Nginxとは

Nginxとは

  • フリーかつオープンソースなWebサーバ
  • 非同期のイベント駆動
  • Webアプリケーションサーバを配置して動的なコンテンツを配信できる
  • ソフトウェアロードバランサとして使える
    • ソフトウェアロードバランサ: サーバーにかかる負荷を、平等に振り分けるための装置
  • HTTPキャッシュとしても使える
    • HTTPキャッシュ: 過去に取得したリソース
  • リバースプロキシの機能を持つ
    • リバースプロキシ: webサーバの身代わり。ブラウザとサーバの間に立って負荷分散できる。複数のwebサーバーを割り当てられる。
  • C10K問題(クライアント1万台問題)に対応できる
    • 万を超える接続に対応するプロセスやスレッドを生成すると
  • リバースプロキシサーバとしての用途が多い

Apachとの違い

  • Apach
    • マルチプロセスモデル
      • コンピュータにおいて複数のタスク(プロセス)を切り替えて実行できるシステムのこと
      • タスクの切り替えのオーバーヘッドや、キャッシュやトランスレーション・ルックアサイド・バッファのミス率の上昇などのコストがかかるが、入出力待ちなどであるタスクの実行が止まっても他のタスクが実行されるため、全体としてスループットの上昇が期待できる
        • オーバーヘッド: コンピュータさんが何かやったときに発生する、付加的な処理(負荷)
        • トランスレーション・ルックアサイド・バッファ: CPUが仮想アドレスと論理アドレスとを対応させた情報を一時的に保管しておくバッファメモリ
        • スループット: 一定時間に処理できる情報量
    • マルチプロセス
      • 1つのプロセスまたはスレッドが処理される
      • 1アクセスを処理している間は他のアクセスを処理できず、同時接続数分だけプロセスまたはスレッドが必要
  • Njinx
    • 1プロセス1スレッド
    • apacheの標準にははいっていないSPDY対応
    • イベント駆動
      • 1つのプロセスで複数アクセスを処理することが可能
      • 同時接続数が増えてもプロセス数やスレッド数は増えない
        • モリ消費量やコンテキストスイッチのオーバーヘッドが小さい
      • ソースコードは複雑になりやすい

https://blog.mosuke.tech/entry/2016/06/04/180122/
http://gintec.hatenablog.com/entry/2015/09/13/195121
https://tech.akat.info/?p=349
https://techinfoofmicrosofttech.osscons.jp/index.php?C10k%20problem%20%28C10K%E5%95%8F%E9%A1%8C%29