#はじめに
未経験からWeb系エンジニア職へ転職活動を行っています。企業との面談中に出てきたNginxというワードに聞き馴染みがなく震えたので今回まとめました。筆者は違いを意識せずApacheを使っていたのであまり馴染みがなかったようです。。
##Nginxとは
Webサーバーの一種。Webサイトを公開する時に様々なサーバーが動いているが、その中心になるのがWebサーバーである。Webサーバー用のソフトウェアには、種類と得意分野がある。以前まではApacheが有名で多く利用されていたが、近年ではNginxも注目されており、2020年8月時点のWebサーバーのシェアは第1位Nginx(36.45%)、第2位Apache(25.87%)となっていて、目覚ましい成長がある。
参考:https://news.netcraft.com/archives/2020/08/26/august-2020-web-server-survey.html
ミドルウェア:
コンピュータを制御するオペレーションシステム(OS)と、特定の処理を行うアプリケーションソフトウェアとの間に存在するソフトウェアのこと。
Webサーバーソフトウェア:
ミドルウェアの一つ。HTTPリクエストを送った後に、何かしらのレスポンスを返すプログラム。
##NginxとApacheの比較
###Nginx(エンジンエックス)
- オープンソースソフトウェア(OSS)
- Apachと比較して、Nginxは高速かつ高負荷に強い
- C10K問題をはじめ、大容量のデータ配信や大量同時接続に耐えることを目的に設計された。
- ノンブロッキングI/Oと非同期のイベント駆動アーキテクチャを採用することで、Apacheと比較して同時接続数が10〜100倍くらいになる。→Nginxはworkerと呼ばれるシングルスレッドのプロセスを複数利用している
###Apache(アパッチ)
- 正式名称は「Apache HTTP Server」
- オープンソースソフトウェア(OSS)
- マルチプロセスモデル(接続毎にプロセスをフォーク)のため、メモリがいっぱいになりやすい
→リクエストを処理するごとにリソースが枯渇してしまう - CMS(Contents Management System)を利用する際に、比較的簡単な設定で済む
- 約20年間OSSとして公開され、バージョンアップした結果、信頼性が高い
・オープンソース:
WordPressのようにプログラミングを無料で利用でき、自由にカスタマイズができる。
・C10K問題:
Apache HTTP ServerなどのWebサーバソフトウェアとクライアントの通信において、クライアントが約1万台に達すると、Webサーバーのハードウェア性能に余裕があるにも関わらず、レスポンス性能が大きく下がる問題
参考:https://qiita.com/katu_/items/01c9c35d17a541014d32
・イベント駆動型アーキテクチャ:
変化に適応できてリアルタイムで意思決定できる、柔軟なシステムを組織が達成できるよう支援します。リアルタイムで状況を把握できるので、システムの現状を表すすべての利用可能なデータを使用して、手動または自動でビジネス上の意思決定を下せます。
参考:https://www.redhat.com/ja/topics/integration/what-is-event-driven-architecture
・シングルスレッド
コンピュータのプログラムは、基本的に1行ずつコードが実行されながら動作する。通常、分岐やループがあっても、プログラム全体は1つの流れになっている。このような一連のプログラムの流れを「スレッド(糸)」と呼ぶ。1つのスレッドだけからなるプログラムを「シングルスレッドなプログラム」という。一方、処理効率を上げるなどの目的で1つのプログラムで複数のスレッドを同時に実行することができる。これを「マルチスレッド・プログラム」という。
参考:https://www.atmarkit.co.jp/ait/articles/0503/12/news025.html
##Nginxが向いている分野
- 一般向けのWebサービスなど多数の同時アクセスが発生する業務
- 静的コンテンツが多いWebサービスなど
静的コンテンツ:
静的コンテンツは、index.html などのように、要求のパスに指定されたhtmlなどのデータがそのまま応答のデータとして送信される方式のWebページのことです。誰が見る場合でも常に同じ内容を提供する場合に使われます。
参考:静的コンテンツと動的コンテンツ
http://juen-cs.dl.juen.ac.jp/html/www/005/
##NginxとApacheの使い分け
###Nginxの場合
- 負荷が高く、スケーラビリティが要求される
- 静的ページに同時多数のアクセスが想定される
###Apacheの場合
- 負荷が低く、早期または簡単なセットアップが必要
- 同時アクセス数が小さく、リクエスト数が多い
参考:
・https://www.out48.com/archives/1576/
・https://qiita.com/kamihork/items/49e2a363da7d840a4149
#おわりに
Nginxを実際に触ったことがないため、あまり深くまでApacheとの比較はできませんでした。
今後の学習で、この記事に深みを出していきます。
(もしこの記事に誤りがありましたらご教授いただけると幸いです。)