apacheとnginx

主に、オープンソースカンファレンス2014 Tokyo/Spring
Apacheコミッターが見た Apache vs nginx
http://openstandia.jp/pdf/140228_osc_seminar_ssof8.pdf
より

webサーバ仕組み – ざっくり

リクエストに対して、レスポンスを返却する
process

apache – マルチプロセス、マルチスレッドアーキテクチャ-

マルチプロセス、スレッドの場合、1つのプロセスまたはスレッドがこれを処理する。そのため、1アクセスを処理している間は他のアクセスを処理できず、同時接続数分だけプロセスまたはスレッドが必要となる
process2

マルチプロセス、マルチスレッドの違い

マルチプロセスはメモリ空間を個別に持つが、マルチスレッドはメモリ空間を共有する
メモリの使用効率が高く、プロセス切り替え時にメモリ空間の切り替えが発生しないためコストが低くなる

マルチプロセスの場合、メモリ空間が独立しているため、スクリプト言語などを組みやすい
ただし独立しているため、プロセス間の状況共有が難しく、その分リソースを消費する

マルチスレッドの場合、メモリ空間が各スレッドで共有できる
リソースの消費が少なく、コンテキストスイッチのオーバーヘッドが小さい
ただし、メモリ空間の共有によりスクリプト言語を組み込めないことがある
linuxではスレッドの生成に約1Mメモリが必要

C10K問題

コンテキストスイッチのオーバーヘッドが大きくなり、

nginx -イベント駆動アーキテクチャ-

イベント駆動の場合は処理を分割して考え、イベント駆動マシンが管理する
※3つにわけて考えているが、実際はあらゆる時間のかかる処理を分割して動作している
※apacheのEventMPMはクライアントとネットワークI/O部分のみイベント駆動しているらしい
event

apacheとは違い、1つのプロセスで複数アクセスを処理することが可能、つまり同時接続数が増えてもプロセス数やスレッド数は増えない
そのため、メモリ消費量やコンテキストスイッチのオーバーヘッドが小さいが、ソースコードは複雑になりやすいとのこと
event2

またapacheと比較して後発であるため、動画ストリーミングやapacheの標準にははいっていないSPDY対応がされている

参考

オープンソースカンファレンス2014 Tokyo/Spring
Apacheコミッターが見た Apache vs nginx