この記事を読むのに必要な時間:およそ 1 分
SNS,BLOGなど,Webを使ったシステムは広く普及し,Webシステムへの依存度は増大しています。Webシステムの中核たるWebサーバには,長らくApache HTTPやMicrosoft IISが君臨していましたが,その中に食い込む勢いを持つのが「Nginx(エンジンエックス)」です。本稿ではNginxが支持されるその特徴を紹介します。
支持される理由
Nginxが支持される理由はそのシンプルさです。軽量・高速ながら,インストールや設定は極めてシンプルです。Webサーバのチューニングや最適化に時間をかけなくても,目の前にあるPCを一瞬にして高速Webサーバに仕立てる力を持ちます。特にNginxの本領が発揮されるのは,複数のWebサーバを束ねるロードバランシングやリバースProxyといった用途です。
イベント駆動とノンブロッキング非同期I/O
Nginxの特徴として「イベント駆動」と「ノンブロッキング非同期I/O」といった技術が挙げられます。
Webサーバのように同時に複数の処理を行うシステムでは,記憶領域やネットワークといったI/O処理の多重化が必要不可欠です。従来型のWebサーバはファイルやネットワークソケットなどのファイルディスクリプタをプログラム側が1つ1つチェックする方式が取られているの対し,Nginxでは各ディスクリプタの状態をシステム側のカーネル内で管理するようにしています。そのためプログラムがディスクリプタを1つ1つチェックする必要がなくなり,処理にかかる時間はリクエストによらず一定です。Nginxは高いスケーラビリティも併せ持っていますが,それを可能にしているのが,「ノンブロッキング非同期I/O」です。Nginx側でシステムコールの終了を待つ必要がなく,I/Oリクエストを発行した直後から別の処理を実行できます。そのため大量のデータを配信できます。
得意とするサーバ構成
Nginxが高速かつ大量のリクエストを処理できるのは比較的小さいデータやメモリにキャッシュされたデータです。そのため静的コンテンツの配信やコンテンツデリバリサービス(CDS)のような用途には適しているものの,1リクエストに長時間かかるWebアプリケーションのような処理は不得意です。代わりにフロントにNginxを置きバックエンドにアプリケーションサーバを配置するようなサーバ構成をとることがで,Nginxの真価を発揮できます。
バックエンドサーバはNginxと同じサーバに同居させることもできます。たとえばNginxをフロントエンドとして起動し,PHPスクリプトを処理するプロセスを常駐させNginxとプロセス間通信を行うことで,高速なPHPアプリケーションサーバに仕立てることができます。また処理が重いWebアプリケーションは,複数のアプリケーションサーバに分担し,それをNginxでロードバランシングさせることで,高価なロードバランサを買わなくても大規模化できます。さらにNginxでSSL/TLSを終端させ,Nginxとアプリケーションサーバとは平文通信を行うことで,SSLアクセラレータとして機能させることもできます。HTTP/2やSPDYを終端させるなどプロトコル変換機としても活躍します。
HA構成でも活躍
Nginxがロードバランシグ可能なのはWebシステムだけではありません。メールシステムやTCPストリームにも対応しています。たとえば複数台あるMySQLサーバをNginxでロードバランシングさせることでハイアベイラビリティ(HA)化できます。MySTCPストリームを使ったLDAPやRTMPといったプロトコルに対応しています。今後はこうしたHTTP以外のプロトコルでの活躍を目にするようになるでしょう。
開発が促進されるNginx
Nginxは長らく開発者のIgor Sysoev(イゴール シソエフ)さん一人の手でメンテナンスされてきましたが,2010年にNginx,Inc.が創業されたことで,開発のスピードが促進されています。今年はHTTP/2への対応や動的モジュールの採用など,Nginxにも大きな転機になるようなリリースが多数予定されており,注目を集めています。