https://qiita.com/hiroaki-u/items/f2455d62f8a4017663cb?utm_source=Qiitaニュース&utm_campaign=584f50ab74-Qiita_newsletter_518_06_08_2022&utm_medium=email&utm_term=0_e44feaa081-584f50ab74-34388437
Webサーバーを使うときに、NginxとApacheって言葉よく耳にしますよね。 ただその違いっていまいち良くわからなくないですか??(僕だけだったらすみません笑) ちなみに僕は「Nginxの方がなんか人気だし良さそうな気がする。。。」という何の根拠もないイメージしか持っていませんでした。 さすがにもう少しちゃんと理解したいと思い、今回はこの違いを記事にしてみました。 ぜひぜひ最後まで読んでみてください〜! ※ちなみにNginxとApacheはそれぞれ、「エンジンエックス」「アパッチ」と読みます。
NginxとApacheはWebサーバーのソフトです。 サーバーにこれらのソフトをインストールすると、Webサーバーとしての機能をもちます。
Webサーバーソフトにおいて、2021年12月時点でNginxとApacheが圧倒的シェアを誇っています。
※引用:『TECH+ マイナビニュース 12月Webサーバシェア、Apacheが増加』
Nginxの方がApacheよりも同時大量アクセスに対処できます。 C10K問題という問題がポイントになってきます。 C10K問題はググってみると以下のように書いています。
「ハードウェアの性能上は問題がなくても,あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと」をC10K問題と定義しています。
引用:『技術評論者ブログ C10K問題』
CPUやメモリの性能によらず、クライアント数が多くなってしまうと、Webサーバーの処理が追いつかなくなってしまうんですね。 なぜこのようなことが起きてしまうのか理解するために、Webサーバーの処理を深堀りしていきます。
Webサーバーはプログラムで動いているので、まずはプログラムがサーバー上でどのように実行されているかを簡単に説明していきます。
プログラムが実行されるとき、まずはメモリにその処理内容が書き込まれます。この処理内容をプロセスと呼びます。 またプロセスをCPUの実行単位まで細かくしたものをスレッドと呼びます。 CPUには処理を実行するコアというものがあり、1コアにつき1度に処理できるスレッド数は1つです(以下図参照)。
上の図ではスレッド数が少ないので処理を問題なく捌けそうですが、処理が多くなると以下の図のように処理待ちのプロセスやスレッドが多発してしまいます。