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にも大きな転機になるようなリリースが多数予定されており、注目を集めています。