groonga 2.0.4で新しくgroonga-httpdが追加されました - 2012-06-29 - ククログ

ククログ

株式会社クリアコード > ククログ > groonga 2.0.4で新しくgroonga-httpdが追加されました

groonga 2.0.4で新しくgroonga-httpdが追加されました

はじめに

groonga 2.0.4が6月29日にリリースされました。そのリリースの変更点の1つとして新しい実行ファイルであるgroonga-httpdが追加されました。

今回はgroonga-httpdについて説明するとともに、簡単に特長を紹介します。

groonga-httpdについて

groongaには、groongaという実行ファイルが含まれています。groonga-httpdgroongaと関連しているので、まずはgroongaについて説明します。

groongaを使うことで、ローカルにあるgroongaのデータベースファイルに対してテーブル作成、レコード追加、全文検索などの処理を行うことができます。その他にもgroongaはサーバーモードとして実行することもでき、リモートからも同様にテーブル作成、レコード追加、全文検索などの処理を行うことが可能です。リモートとの通信には、HTTPか独自プロトコルであるGQTPを利用します。

groonga-httpdはそのgroongaのHTTPでのサーバーモードの代わりとして利用できるものです。

groongaのHTTPサーバーの実装は独自なものですが、groonga-httpdnginxを使っています。そのためnginxの特長がそのままgroonga-httpdにも当てはまります。具体的には、高性能であること、nginxモジュールで様々な機能が提供されていること、HTTPの仕様にしっかり準拠していることなどが挙げられます。

groonga-httpdの詳細については、groongaのドキュメントを参照してください。

使ってみる

上で説明したように、groonga-httpdでのみサポートされている機能としてHTTPのKeep-Aliveがあります。Keep-Aliveを有効にすることでクエリごとの接続、切断処理が省略され性能が向上します。そのことを確認してみましょう。

まず、groonga-httpdのドキュメントに書いてあるようにgroonga-httpdをセットアップします。

そのあと、次のようにabでKeep-Aliveの無効の時と有効の時とで性能を測定してみます。

Keep-Aliveが無効の時:

$ ab -c 100 -n 100000 'http://0.0.0.0:10041/d/status'
Requests per second:    15135.00 [#/sec] (mean)
Time per request:       6.607 [ms] (mean)
Time per request:       0.066 [ms] (mean, across all concurrent requests)

Keep-Aliveが有効の時:

$ ab -c 100 -n 100000 -k 'http://0.0.0.0:10041/d/status'
Requests per second:    23285.10 [#/sec] (mean)
Time per request:       4.295 [ms] (mean)
Time per request:       0.043 [ms] (mean, across all concurrent requests)

無効の時と比べ、有効にした時は、Requests per secondから約1.5倍の性能向上が確認できます。

groongaのHTTPサーバーに対しても同様に性能を測定してみます。

Keep-Aliveが無効の時:

$ ab -c 100 -n 100000 'http://0.0.0.0:10041/d/status'
Requests per second:    20933.84 [#/sec] (mean)
Time per request:       4.777 [ms] (mean)
Time per request:       0.048 [ms] (mean, across all concurrent requests)

Keep-Aliveが有効の時:

$ ab -c 100 -n 100000 -k 'http://0.0.0.0:10041/d/status'
Requests per second:    20683.93 [#/sec] (mean)
Time per request:       4.835 [ms] (mean)
Time per request:       0.048 [ms] (mean, across all concurrent requests)

groongaのHTTPサーバーはKeep-Aliveに対応していないので、有意義な性能差は確認できません。

今回の性能測定の結果はHTTPの通信処理だけの性能差ということになり、クエリの処理全体でみると性能差は縮まります。しかし今回のリリースではnginxとgroongaを組み合わせた最初のリリースです。さらなる性能向上や機能追加はこれからということになっていますのでご期待ください。

まとめ

groonga 2.0.4で新しく追加されたgroonga-httpdについて簡単に紹介しました。