Rabbit Slide Show

ngx_http_groonga - 全文検索nginx

2016-02-08

Description

nginxに全文検索エンジンGroongaを組み込んでnginxを全文検索サーバーにするngx_http_groongaを紹介します。

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

Other slides

Mroonga!
2015-10-30