Engineering from Scratch

エンジニア目指してます

2022/05/31

NginxとApache

参考

qiita.com

blog.inductor.me

blog.framinal.life

C10K問題とは

ハードウェアの性能上は問題がなくても,あまりにもクライアントの数が多くなるとサーバーがパンクする問題のこと。プロセスやスレッドが多くなることが原因となる。

プロセスやスレッドが多くなると

Apache

preforkモデル

  • 1プロセスあたり1スレッド
  • プロセス数の上限に達しやすくなる

    workerモデル

  • 1プロセスあたり複数スレッド
  • ファイルディスクリプタの上限(1プロセスあたり1024)に達しやすくなる

Nginx

概要

1プロセス1スレッドで複数のアクセスを捌ける。

特徴

  • ノンブロッキングI/O
  • イベント駆動
    • クライアントのアクセスをイベントとして扱い,それをきっかけにプロセス内で処理を開始する

ノンブロッキングI/Oとは

参考

blog.takanabe.tokyo

ブロッキングI/O・同期I/O

KernelのI/O処理中,プロセスは待ち状態となり,プログラムの処理が止まる。

ノンブロッキングI/O

KernelのI/O処理中,プロセスは待ち状態とはならず,他の処理を行うことができ,Kernelの処理中はエラーが返される。

非同期I/O

KernelのI/O処理中,プロセスは待ち状態とはならず,他の処理を行うことができ,I/O処理が終了すれば,完了通知が来る。

ApacheとNginxの比較

Apache

  • configの文法的に静的配信に向いている

Nginx

  • リバースプロキシとして動的配信を行えるように設定されている
    • ただのPort転送ならApacheに比べて簡素な設定で終わる