Text
Page: 1
ngx_http_groonga
全文検索nginx
須藤功平
クリアコード
nginx Tech Talks
2016-02-08
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 2
nginx
HTTPサーバー
HTTPリバースプロキシサーバー
メールプロキシサーバー
TCPプロキシサーバー
1.9.0から。まだmainline。
nginx = いろいろできるサーバー
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 3
全文検索nginx
HTTPサーバー
HTTPリバースプロキシサーバー
メールプロキシサーバー
TCPプロキシサーバー
[New!]全文検索エンジン!
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 4
使い方:登録
登録
HTTP
POST
ngx_http_groonga 全文検索nginx
全文検索
NGINX
Powered by Rabbit 2.1.9
Page: 5
使い方:検索
検索
HTTP GET
?query=nginx
全文検索
NGINX
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 6
速度:1リクエスト
対象:Wikipedia日本語版
レコード数:約185万件
データサイズ:約7GB
検索キーワード:nginx
0.6ms
Intel Core i7-6700 3.40GHz
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 7
速度:スループット
1 worker
4 workers
8 workers
14000
12000
10000
N CPUs = 8
8000
6000
4000
2000
0
1 2 3 4 5 6 7 8
16
N connections
32
ワーカー数を増やすとCPUコア数までスケール
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 8
速度:スループット
No keep-alive
With keep-alive
14000
12000
10000
8000
6000
4000
N workers = 8 (= N CPUs)
2000
0
1 2 3 4 5 6 7 8
16
N connections
32
クライアントがkeep-aliveを使うとさらにスケール
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 9
速度
1リクエストの処理も速い
スループットも出る
ワーカー数を増やすとスケール
keep-aliveでさらにスケール
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 10
速さの理由
本物の全文検索エンジンを組込
→1リクエストの処理が速い
(しかも豊富な機能)
それもnginxのよさを殺さずに
例:マルチプロセスでスケール
例:性能向上用のHTTPの機能を利用
(keep-alive、レスポンス圧縮など)
例:I/O多重化 (同時接続数の増加に対応)
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 11
本物の全文検索エンジン
(ぐるんが)
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 12
Groonga
速い
日本語に強い(国産)
ライブラリーとして使える
組み込みやすい
マルチプロセス対応
複数のプロセスで同時にDBを使える
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 13
組込方法
モジュール
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 14
ngx_http_groonga
HTTP
普通の
HTTP,I/O,TLS,...
nginx
全文検索
ngx_http_groonga
NGINX
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 15
Groongaから見たメリット
nginxと連携すると…
プロセス管理を任せられる
クライアントとのI/Oを任せられる
keep-alive・認証・TLS・圧縮対応
HTTP2対応 (まだmainline)
全文検索に集中できる!
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 16
困ったこと
nginxのWindows用バイナリーを
GNU/Linux上でビルドできない
Groongaはバイナリーを配布したい
Windowsが必要だとリリース作業が
ツライ
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 17
対策
パッチを送る
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 18
結果
取り込まれた
(1.7.7 released at 2014-10-28)
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 19
パッチが取り込まれるまで
hgでパッチを作る
メーリングリストに送る
やりとりする
取り込まれる
結構反応してくれるから
なにかあったら送るといいよ!
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 20
全文検索nginx
nginx + Groonga
= groonga-httpd:Groongaパッケージに含まれている
nginxが全文検索エンジンに!
nginxのモジュール機能で実装
モジュールを作って
nginxと共存しよう!
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9
Page: 21
お知らせ
MySQL・PostgreSQLとも共存
Groongaは肉の日リリース
2月9日にイベントあります!
MySQLとPostgreSQLと
日本語全文検索
(DMM.comラボにて)
ngx_http_groonga 全文検索nginx
Powered by Rabbit 2.1.9