「オープンソース協議会 -IBM i」(以下、OSSi)では、IBM i上で利用可能なオープンソース(5377-OPS)として2017年に追加されたWebサーバー「Nginx」(エンジンエックス)の実装・検証を行った。ApacheベースのIHS(IBM HTTP Server)に次ぐ2つ目のWebサーバーとなるNginxの機能と性能について、検証を担当したティアンドトラストの北原征夫氏(オープンi事業部 事業部長)に話をうかがった。
イベント駆動型の高速Webサーバー
Nginxは、2004年に初リリースされたWebサーバーで、近年急速にシェアを伸ばしているオープンソースである。代表的なWebサーバーであるApacheやMS IISと比較すると、2月3日時点のシェアはApacheが47.5%、MS IISが10.4%なのに対して、Nginxは36.7%と第2位である(W3Techs:Web Technology Surveysによる)。また、シェアの推移を2010年1月からたどってみると、Apacheは71.5%→47.5%で24.0ポイント減、MS IISは20.6%→10.4%で10.2ポイント減であるのに対して、Nginxは3.9%→36.7%の32.8ポイント増と大幅にシェアを拡大している。
以前からNginxに注目しLinux上で検証経験をもつ北原氏は、「Nginxは、一言で言えば、高速なWebサーバー。大量の同時アクセス時に処理性能が劣化するApacheに代わるWebサーバーとして注目を集めています」と話す。
「Webサーバーには、マルチプロセス(prefork)、マルチスレッド(worker)、イベント駆動(event)という3つの実装モデルがありますが、Apacheがマルチプロセス/マルチスレッドモデルなのに対して、Nginxはイベント駆動モデルです。イベント駆動モデルは、マルチプロセス/マルチスレッドモデルと比べてメモリ消費やI/O発生を抑えられるので高速処理が可能です。IBM i上のIHS(Apacheベース)はIBM i 7.2からworkerに対応しましたが、イベント駆動型には未対応でした」(北原氏)
Nginxの検証は、Webサーバー、リバース・プロキシ、ロードバランサー、Webアプリケーションサーバーの4つの機能について実施した。「Nginxは、Webサーバーだけでなく多様な機能を備えるので、それぞれについて検証しました」と、北原氏。検証環境は、サーバー側がIBM i 7.3搭載のPower 720 Express(8202-E4C:POWER7 4コア)で、1コア、メモリ21GBで実施。クライアント側は、JMeter搭載のWindows 10である。
Webサーバー機能の比較検証
IBM i上にNginxとIHSをWebサーバーとして搭載し、そのWebサーバー上に配置した1.1KBの軽いHTML文書を要求するリクエストを、1秒間に100回、それを計100回繰り返すテストを行って(計1万回のリクエスト)、パフォーマンスを比較した。
結果はNginxが抜群のパフォーマンスで、中央値を見るとNginxが24ms(ミリ秒)、IHSは183msでNginxが7.6倍高速、1秒当たりのスループットはNginxが2307、IHSが199で、Nginxが11.6倍の処理数だった(図表1)。
【図表1】Webサーバー機能の比較検証
●IBM HTTP Server(IHHS)
リバース・プロキシ機能の
比較検証
リバース・プロキシとは、サーバーとクライアントの間に配置して認証や負荷分散などを分担するサーバーである。検証では、IBM i上のWebサーバー(IHS)の前に、リバース・プロキシサーバーとしてNginxとIHSをそれぞれ配置し(ともにIBM i上に配置)、Webサーバー上の1.1KBのHTML文書を、1秒間に100回、それを計100回要求するベンチマークを行って、パフォーマンスを計測した。
結果は、こちらもNginxが抜群の性能で、中央値はNginxの52msに対してIHSは246msとなり、Nginxが4.7倍高速、1秒当たりのスループットはNginx 1187に対してIHS 194で、Nginxが6.1倍の処理数だった(図表2)。北原氏は、「Nginxは、Webサーバーよりもリバース・プロキシとしての利用のほうが多い印象ですが、うなずける結果です」と述べる。
【図表2】リバース・プロキシ機能の比較検証
●IBM HTTP Server(IHHS)
ロードバランサー機能の
比較検証
ロードバランサーは、クライアントからの処理要求を複数のサーバーに分散する役割。「NginxとIHSのロードバランサー機能は、セッションを同一サーバーで保持する機能のない単純なもの」と、北原氏は指摘する。
検証は、IBM i上に3つWebサーバー(IHS)を設定し、その前にロードバランサーとしてNginxとIHSを配置して、Webサーバー上の1.1KBのHTML文書を、1秒間に100回、それを計100回要求するテストを行い、パフォーマンスを計測した。
結果は、この検証でもNginxが抜群の性能で、中央値はNginxの56msに対してIHSは259msとなり、Nginxが4.6倍高速、1秒当たりのスループットはNginx 1322に対してIHSは188となり、Nginxが7.0倍の処理数だった(図表3)。
【図表3】ロードバランサー機能の比較検証
●IBM HTTP Server(IHHS)
Webアプリケーション・サーバー
機能の比較検証
Webアプリケーション・サーバーとしての検証では、IBM i上にNginxとZend Server 9 for i(以下、Zend Server)を配置し、各サーバー上の「phpinfo();」というPHPプログラムを実行させて、パフォーマンスを計測した。phpinfo();は、サーバー上の設定内容を出力するプログラムである。北原氏は、「IBM i上のNginxでPHPプログラムを実行する機能が提供されていないので、代わりとして、AIX用にビルドされたPHP-FPMを使用しました」と話す。
検証は、1秒間における同時アクセスを徐々に増やす方法で行った。結果は、Zend Serverのパフォーマンスが優れ、1秒間に100回の要求を計100回繰り返すテストでは、Nginxの1953msに対してZend Serverは1272msとなり、Zend Serverが1.5倍高速だった(図表4)。
【図表4】Webアプリケーション・サーバー機能の比較検証(1コア)
●IBM HTTP Server(IHHS)
一方、CPUを1コアから2コアへ増やすと、パフォーマンスは逆転して、Nginxのほうがやや優れるという結果になった(図表5)。これについて北原氏は、「1コアでの検証では、Nginxはどの計測でも100%近いCPU使用率だったのに対して、Zend Serverは最大でも45%程度でした。これは、NginxがI/Oの処理中でも別の処理を並行して行うイベント駆動型だからで、CPUを増やすとNginxでは全体の処理量が増え、高速化するためです」と説明する。「これにより、NginxをWebアプリケーション・サーバーとして利用するシステムでは、CPUコア数の増設がパフォーマンス向上の解になると想定できます」(北原氏)
【図表5】Webアプリケーション・サーバー機能の比較検証(2コア)
●IBM HTTP Server(IHHS)
*
北原氏は今回の検証を、次のように総括する。
「今回の検証では、Nginxの高い処理性能を確認できました。しかしこのことは、NginxがIHSの移行先になるという意味ではなく、Nginxの特徴がより発揮される特定の領域において選択可能になったということです。Nginxは、日本のIBM iユーザーからすると、製品としての安定性やサポートなどにまだ多くの課題を残しています。現段階ではむしろ、IBM i環境でNginxが利用可能になったことこそが大きな意味をもつと感じています。Node.jsがIBM i対応となって以降、急速に普及したように、Nginxに関しても、今後さまざまなユースケースが出てくることが期待されます」