ズッキューン!バッコーン!!

لإملاءات الفائدة

【Nginx】Nginxについて(概要)

UbuntuにNginxをインストールしたついでに、Nginxについて学習したので概要についてまとめます。

Nginxとは

Nginxは、軽量な拡張性の高いオープンソースのWebサーバーです。近年急速にシェアを伸ばしています。Nginxは、c10k問題というWebサーバが抱える問題を解決するために設計されました。c10k問題とは、クライアントから同時に大量のアクセスをされると、サーバーが処理しきれずパンクしてしまう現象のことです。Nginxはイベント駆動という仕組みを採用することで、c10k問題に対処しました。このイベント駆動についてはアーキテクチャの項目で解説します。

Nginxの主な用途

Webサーバとしてはもちろん、ロードランサーやリバースプロキシとして使われることも多い。

リバースプロキシ

webサーバーの前にnginxを配置することで、特定のサーバの負担を軽減したり、クライアントからのアクセスを制限することで、サーバーのセキュリティを高めることができる。

f:id:t_tsuyoshi:20170729145106p:plain

Nginxのアーキテクチャ

Nginxはmasterプロセスとworkerプロセスで構成されています。masterプロセスはworkerプロセスの制御と管理を担います。一方、workerプロセスはインベント駆動で処理を実行していきます。イベント駆動とは、イベントが発生するで待機し、何らかのイベンントが発生すると処理を行う仕組みです。

f:id:t_tsuyoshi:20170729145312p:plain:w400

またworkerプロセスは、ノンブロッキングI/Oや非同期I/Oを利用し、複数のクライアントからのリクエストを平行して処理することを可能にしました。select,epoll,kqueueといったシステムコールを使うことでI/O処理の多重化を実現しています。

ノンブロッキングI/O

すぐに処理できないデータがくるとエラーを返し、すぐに処理できるタスクを優先して処理を行う。

非同期I/O

ある処理を行っている時、別の処理も平行して行う。

Nginxは、イベント駆動モデルを採用することで従来のモデルに比べ、少ないプロセス数で処理を行い、プロセスの切り替えによる負担を減らしc10k問題に対処しています。

おわりに

Nginxについて調べているとカーネルなど低レイヤーの話にぶち当たり、そのたびに知識不足を感じました。今まで低レイヤーにあまり興味がなかったのですが、調べていく過程で興味が湧いてきたので少しずつ勉強していきたいと思います。

参考文献

nginx実践入門 (WEB+DB PRESS plus)

nginx実践入門 (WEB+DB PRESS plus)

参考URL

NGINXのパフォーマンスをスレッドプールで9倍にする | FAworksブログ
Nginx Inside Memo (カーネル/VM Advent Calendar) - 技術日記@kiwanami
Nginxの仕組みについて入門 · Goldstine研究所
I/Oを多重化するためのシステムコール(select, poll, epoll, kqueue) - $shibayu36->blog;

素材リンク

Laptop and other icons by Icons8