rabbit-slide-Piro-droonga-meetup-1 2014.07.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.rabbit +1 -0
  3. data/README.md +24 -0
  4. data/Rakefile +17 -0
  5. data/config.yaml +21 -0
  6. data/images/benchmark-elapsedtime.png +0 -0
  7. data/images/benchmark-qps.png +0 -0
  8. data/images/groonga-vs-droonga-compatible-http.png +0 -0
  9. data/images/groonga-vs-droonga.png +0 -0
  10. data/images/join.png +0 -0
  11. data/images/partition-and-replication-actual.png +0 -0
  12. data/images/partition-and-replication.png +0 -0
  13. data/images/partition-read.png +0 -0
  14. data/images/partition-write.png +0 -0
  15. data/images/replication-read-dead.png +0 -0
  16. data/images/replication-read.png +0 -0
  17. data/images/replication-write.png +0 -0
  18. data/images/service-droonga-dead.png +0 -0
  19. data/images/service-droonga-overload.png +0 -0
  20. data/images/service-droonga.png +0 -0
  21. data/images/service-groonga-dead-1.png +0 -0
  22. data/images/service-groonga-dead-2.png +0 -0
  23. data/images/service-groonga-overload-2.png +0 -0
  24. data/images/service-groonga-overload.png +0 -0
  25. data/images/service-groonga.png +0 -0
  26. data/images/svg/D3255CB9.png +0 -0
  27. data/images/svg/groonga-vs-droonga.svg +2366 -0
  28. data/images/svg/join.svg +191 -0
  29. data/images/svg/partition-and-replication.svg +928 -0
  30. data/images/svg/partition-read.svg +519 -0
  31. data/images/svg/partition-write.svg +511 -0
  32. data/images/svg/replication.svg +570 -0
  33. data/images/svg/service-droonga-overload.svg +2732 -0
  34. data/images/svg/service-droonga.svg +876 -0
  35. data/images/svg/service-groonga-dead-1.svg +468 -0
  36. data/images/svg/service-groonga-dead-2.svg +473 -0
  37. data/images/svg/service-groonga-overload-2.svg +2143 -0
  38. data/images/svg/service-groonga-overload.svg +2031 -0
  39. data/images/svg/service-groonga.svg +462 -0
  40. data/images/unjoin.png +0 -0
  41. data/introduction.md +441 -0
  42. data/pdf/droonga-meetup-1-introduction.pdf +0 -0
  43. metadata +98 -0
data/images/unjoin.png ADDED
Binary file
data/introduction.md ADDED
@@ -0,0 +1,441 @@
1
+ # はじめてのDroonga
2
+
3
+ subtitle
4
+ :   
5
+ Droongaの簡単な紹介と
6
+ Groongaからの移行手順
7
+
8
+ author
9
+ : 結城洋志
10
+
11
+ institution
12
+ : 株式会社クリアコード
13
+
14
+ allotted_time
15
+ : 30m
16
+
17
+ theme
18
+ : groonga
19
+
20
+ # 要旨
21
+
22
+ 「自作のアプリケーションを
23
+ GroongaからDroongaへ
24
+ 今すぐ移行できるのか?」
25
+ にお答えします
26
+
27
+ # 気になる点、疑問点
28
+
29
+ * 気になる事があったら:
30
+ * メモして後から質問
31
+ * その場で質問してもOK
32
+ * どこが気になったかを
33
+ 教えてください!
34
+
35
+
36
+ # アジェンダ
37
+
38
+ * Droongaとは?
39
+ * Droongaの何が嬉しい?
40
+ * Droongaの何が嬉しくない?
41
+ * デモ
42
+
43
+
44
+ # Groongaの困った所
45
+
46
+ * 分散が流行ってる
47
+ * Groongaは分散処理に
48
+ 対応していない
49
+
50
+
51
+ # Droongaとは
52
+
53
+ *D*istributed G*roonga*
54
+ =分散Groonga
55
+
56
+ # サーバ構成の違い
57
+
58
+ ![](images/groonga-vs-droonga.png){:relative_height='95'}
59
+
60
+ # Groonga互換
61
+
62
+ ![](images/groonga-vs-droonga-compatible-http.png){:relative_height='95'}
63
+
64
+ # Groonga互換
65
+
66
+ * 今までと同じ感覚で使える
67
+ * Groongaベースの
68
+ 既存のアプリケーションを
69
+ 最小の工数で分散対応できる
70
+
71
+ # データベースを分散
72
+
73
+ * *レプリケーション*
74
+ * 現在の開発はここに注力
75
+ * *パーティショニング*
76
+ * 現在は部分的に対応(これから改善)
77
+
78
+ # レプリケーション?
79
+
80
+ ![](images/replication-write.png){:relative_width="35" align="left" relative_margin_left="-20"}
81
+
82
+ ![](images/replication-read.png){:relative_width="45" align="right"}
83
+
84
+ # パーティショニング?
85
+
86
+ ![](images/partition-write.png){:relative_width="40" align="left" relative_margin_left="-20"}
87
+
88
+ ![](images/partition-read.png){:relative_width="50" align="right"}
89
+
90
+ # Groonga→Droonga
91
+
92
+ 今現在得られるメリット
93
+
94
+ * *レプリケーションできる*
95
+ ようになる
96
+ * ノードを*簡単に追加・削除*できる
97
+
98
+ # レプリケーション無しだと(1)
99
+
100
+ ![](images/service-groonga.png "単一のGroongaサーバに
101
+ サービスが依存"){:relative_height='90'}
102
+
103
+ # レプリケーション無しだと(1)
104
+
105
+ ![](images/service-groonga-dead-1.png "Groongaが死ぬと……"){:relative_height='90'}
106
+
107
+ # レプリケーション無しだと(1)
108
+
109
+ ![](images/service-groonga-dead-2.png "サービスも道連れになる"){:relative_height='90'}
110
+
111
+ # レプリケーション無しだと(2)
112
+
113
+ ![](images/service-groonga-overload.png "負荷が増大すると……"){:relative_height='90'}
114
+
115
+ # レプリケーション無しだと(2)
116
+
117
+ ![](images/service-groonga-overload-2.png "サービスレベルが落ちる"){:relative_height='90'}
118
+
119
+ # レプリケーション有りだと(1)
120
+
121
+ ![](images/replication-write.png "データが自動的に複製される"){:relative_height='90'}
122
+
123
+ # レプリケーション有りだと(1)
124
+
125
+ ![](images/replication-read-dead.png "耐障害性が高くなる"){:relative_height='90'}
126
+
127
+ # レプリケーション有りだと(1)
128
+
129
+ ![](images/service-droonga.png "単一のサーバに依存しなくなる"){:relative_height='90'}
130
+
131
+ # レプリケーション有りだと(1)
132
+
133
+ ![](images/service-droonga-dead.png "障害があってもサービスを
134
+ 提供し続けられる"){:relative_height='90'}
135
+
136
+ # レプリケーション有りだと(2)
137
+
138
+ ![](images/replication-read.png "負荷が分散される"){:relative_height='90'}
139
+
140
+ # レプリケーション有りだと(2)
141
+
142
+ ![](images/service-droonga-overload.png "負荷の増大に対応しやすい"){:relative_height='90'}
143
+
144
+
145
+ # クラスタ構成の変更
146
+
147
+ 付属のコマンドラインユーティリティを使用
148
+
149
+ * droonga-engine-join
150
+ * droonga-engine-unjoin
151
+
152
+ # ノードの追加
153
+
154
+ % droonga-engine-join --host=cccc --replica-source-host=bbbb
155
+
156
+ ![](images/join.png){:relative_height='100'}
157
+
158
+ # ノードの切り離し
159
+
160
+ % droonga-engine-unjoin --host=cccc
161
+
162
+ ![](images/unjoin.png){:relative_height='100'}
163
+
164
+
165
+ ## パーティショニング
166
+
167
+ ![](images/partition-write.png){:relative_height='90'}
168
+
169
+ ## パーティショニング
170
+
171
+ ![](images/partition-read.png){:relative_height='90'}
172
+
173
+ ## パーティショニング
174
+
175
+ ![](images/partition-and-replication.png){:relative_height='90'}
176
+
177
+ ## パーティショニング
178
+
179
+ ![](images/partition-and-replication-actual.png){:relative_height='90'}
180
+
181
+
182
+
183
+
184
+
185
+ # デモ
186
+
187
+ * Groongaベースの
188
+ アプリケーションを作成
189
+ * Droongaクラスタを構築
190
+ * バックエンドをDroongaに移行
191
+
192
+ ([Groongaユーザ向けの、はじめてのDroonga](http://www.clear-code.com/blog/2014/7/11.html)
193
+  と同内容です)
194
+
195
+ # デモ:用意する物
196
+
197
+ * サーバ2つ
198
+ * 192.168.100.50
199
+ * 192.168.100.51
200
+
201
+ ## 実行するコマンド
202
+
203
+ Groongaのインストール
204
+
205
+ % sudo apt-get -y install software-properties-common
206
+ % sudo add-apt-repository -y universe
207
+ % sudo add-apt-repository -y ppa:groonga/ppa
208
+ % sudo apt-get update
209
+ % sudo apt-get -y install groonga
210
+
211
+ データベース作成
212
+
213
+ % mkdir -p $HOME/groonga/db/
214
+ % groonga -n $HOME/groonga/db/db quit
215
+
216
+ テーブル定義
217
+
218
+ % groonga $HOME/groonga/db/db table_create --name Topic --flags TABLE_PAT_KEY --key_type ShortText
219
+ % groonga $HOME/groonga/db/db column_create --table Topic --name title --flags COLUMN_SCALAR --type ShortText
220
+ % groonga $HOME/groonga/db/db table_create --name Term --flags TABLE_PAT_KEY --key_type ShortText -- d ef aul t_tokenizer TokenBigram --normalizer NormalizerAuto
221
+ % groonga $HOME/groonga/db/db column_create --table Term --name topic_title --flags "COLUMN_INDEX|WITH_POSITION" --type Topic --source title
222
+
223
+ GroongaをHTTPサーバとして起動
224
+
225
+ % groonga -p 10041 -d --protocol http $HOME/groonga/db/db
226
+
227
+ Webサーバを起動
228
+
229
+ % ruby -run -e httpd -- --port 8080 demo/ &
230
+
231
+ Droongaのインストール
232
+
233
+ (on 192.168.100.50, 192.168.100.51)
234
+ % sudo apt-get update
235
+ % sudo apt-get -y upgrade
236
+ % sudo apt-get install -y libgroonga-dev ruby ruby-dev build-essential nodejs nodejs-legacy npm
237
+ % sudo gem install droonga-engine
238
+ % sudo npm install -g droonga-http-server
239
+ % mkdir ~/droonga
240
+ % droonga-engine-catalog-generate --hosts=192.168.100.50,192.168.100.51 --output=~/droonga/catalog.json
241
+
242
+ サービス起動
243
+
244
+ (on 192.168.100.50)
245
+ % export host=192.168.100.50
246
+ % export DROONGA_BASE_DIR=$HOME/droonga
247
+ % droonga-engine \
248
+ --host=$host \
249
+ --log-file=$DROONGA_BASE_DIR/droonga-engine.log \
250
+ --daemon \
251
+ --pid-file=$DROONGA_BASE_DIR/droonga-engine.pid
252
+ % droonga-http-server \
253
+ --port=10042 \
254
+ --receive-host-name=$host \
255
+ --droonga-engine-host-name=$host \
256
+ --environment=production \
257
+ --daemon \
258
+ --pid-file=$DROONGA_BASE_DIR/droonga-http-server.pid
259
+
260
+ (on 192.168.100.51)
261
+ % export host=192.168.100.51
262
+ % export DROONGA_BASE_DIR=$HOME/droonga
263
+ % droonga-engine \
264
+ --host=$host \
265
+ --log-file=$DROONGA_BASE_DIR/droonga-engine.log \
266
+ --daemon \
267
+ --pid-file=$DROONGA_BASE_DIR/droonga-engine.pid
268
+ % droonga-http-server \
269
+ --port=10042 \
270
+ --receive-host-name=$host \
271
+ --droonga-engine-host-name=$host \
272
+ --environment=production \
273
+ --daemon \
274
+ --pid-file=$DROONGA_BASE_DIR/droonga-http-server.pid
275
+
276
+ 動作確認
277
+
278
+ % curl "http://192.168.100.50:10042/droonga/system/status"
279
+
280
+ データの引き継ぎに必要なツール
281
+
282
+ % sudo gem install grn2drn droonga-client
283
+
284
+ データの引き継ぎ
285
+
286
+ % grndump ~/groonga/db/db | grn2drn | \
287
+ droonga-send --server=192.168.100.50
288
+
289
+ 接続先の切り替え
290
+
291
+ % vi demo/index.html
292
+ - var base = 'http://' + location.hostname + ':10041';
293
+ + var base = 'http://' + location.hostname + ':10042';
294
+
295
+
296
+
297
+ # Groonga→Droonga
298
+
299
+ 今現在あるデメリット
300
+
301
+ * *レイテンシーが低下*する
302
+ * 処理のオーバーヘッドがある
303
+ * *Groonga非互換*の部分が
304
+ まだある
305
+
306
+ # Groongaとの性能比較
307
+
308
+ * 検索対象:
309
+ Wikipedia日本語版のページ30万件
310
+ (データベースサイズ 約1.1GiB)
311
+ * 検索クエリ:
312
+ ページのタイトル200件
313
+ (キャッシュヒット率50%)
314
+
315
+ [ベンチマーク取得手順](https://github.com/droonga/presentation-droonga-meetup-1-introduction/tree/master/benchmark)
316
+
317
+ # Groongaとの性能比較
318
+
319
+ ![](images/benchmark-qps.png){:relative_height='90'}
320
+
321
+ # Groongaとの性能比較
322
+
323
+ ![](images/benchmark-elapsedtime.png){:relative_height='90'}
324
+
325
+ # Groongaとの性能比較
326
+
327
+ * Groonga
328
+ * サーバ1台の処理能力では有利
329
+ * 負荷が増えた時に
330
+ スループットが頭打ちになる
331
+ * Droonga
332
+ * サーバ1台の処理能力では不利
333
+ * 負荷が増えてもノードを増やして
334
+ スループットの上限を増やせる
335
+
336
+ # 今分かっている遅くなる理由
337
+
338
+ * ドリルダウンがあると遅くなる
339
+ * レスポンスのサイズが大きくなると遅くなる
340
+ * クラスタ構成に合わせた
341
+ 処理の最適化が不十分
342
+
343
+ ## オーバーヘッド
344
+
345
+ * オーバーヘッドがある(レイテンシーが落ちる)
346
+ * Groongaで単一サーバでさばききれる程度のリクエストに対しては、性能面でのメリットはない。
347
+ * 耐障害性の高さ、アクセスの増加への対応のしやすさとのトレードオフ。
348
+
349
+
350
+ # 現時点での互換性(概要)
351
+
352
+ * スキーマ変更系
353
+ * `load`, `delete`
354
+ * `select`
355
+
356
+ それ以外は未対応(今後の課題)
357
+
358
+ # 現時点での互換性(詳細)
359
+
360
+ table操作系
361
+
362
+ * `table_create`
363
+ * `table_remove`
364
+ * `table_list`
365
+
366
+ # 現時点での互換性(詳細)
367
+
368
+ column操作系
369
+
370
+ * `column_create`
371
+ * `column_remove`
372
+ * `column_rename`
373
+ * `column_list`
374
+
375
+ # 現時点での互換性(詳細)
376
+
377
+ データ更新系
378
+
379
+ * `load`
380
+ * ただし、以下は未対応
381
+ `--ifexists`, `--input_type`
382
+ * `delete`
383
+
384
+ # 現時点での互換性(詳細)
385
+
386
+ 検索系
387
+
388
+ * `select`
389
+ * ただし、以下は未対応
390
+ `--scorer`, `--cache`,
391
+ `--match_escalation_threshold`,
392
+ `--query_expansion`,
393
+ `--query_flags`, `--query_expander`,
394
+ `--adjuster`
395
+
396
+ ## 未対応の機能
397
+
398
+ * GQTPは喋れない
399
+ * ダッシュボードがまだ無い(Groongaの管理画面はちょっと動く)
400
+ * サジェストもまだ対応していない
401
+ * 監視機能もまだできていない
402
+
403
+ # とはいえ
404
+
405
+ ![](images/groonga-vs-droonga-compatible-http.png "Groongaの利用状況次第では
406
+ 今すぐにでもDroongaに移行できる!"){:relative_height="90"}
407
+
408
+
409
+
410
+ # 改善にご協力を!
411
+
412
+ *様々な条件でのベンチマーク結果*
413
+
414
+ * できればGroongaでの
415
+ ベンチマーク結果も添えて
416
+ * 開発チームで認識できていない
417
+ ボトルネックを明らかにしたい
418
+ * [ベンチマーク取得手順公開中](https://github.com/droonga/presentation-droonga-meetup-1-introduction/tree/master/benchmark)
419
+
420
+ # 改善にご協力を!
421
+
422
+ 実際のWebアプリケーションからの
423
+ *使い勝手レポート*
424
+
425
+ * 互換性向上の作業の
426
+ 優先順位付けの参考にしたい
427
+
428
+ # 改善にご協力を!
429
+
430
+ フィードバックは
431
+ [droonga-engineのissue tracker](https://github.com/droonga/droonga-engine/issues)
432
+ もしくは
433
+ groonga-dev ML
434
+ までお寄せ下さい
435
+
436
+ ## 参考:Droonga以外の分散Groonga
437
+
438
+ * MySQL/MariaDB + Mroonga + Spider
439
+ * 自前で頑張る
440
+ ([Yappoさんによる事例](http://blog.yappo.jp/yappo/archives/000843.html))
441
+
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-Piro-droonga-meetup-1
3
+ version: !ruby/object:Gem::Version
4
+ version: 2014.07.30
5
+ platform: ruby
6
+ authors:
7
+ - 結城洋志
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: Droonga Meetupで発表した、Groongaユーザ向けのDroongaの簡単な紹介と、Groongaを利用したアプリケーションをDroongaに移行する手順の解説です。
28
+ email:
29
+ - yuki@clear-code.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - .rabbit
35
+ - config.yaml
36
+ - Rakefile
37
+ - README.md
38
+ - images/svg/partition-and-replication.svg
39
+ - images/svg/service-droonga-overload.svg
40
+ - images/svg/service-droonga.svg
41
+ - images/svg/groonga-vs-droonga.svg
42
+ - images/svg/replication.svg
43
+ - images/svg/service-groonga-dead-1.svg
44
+ - images/svg/service-groonga.svg
45
+ - images/svg/service-groonga-overload.svg
46
+ - images/svg/service-groonga-dead-2.svg
47
+ - images/svg/service-groonga-overload-2.svg
48
+ - images/svg/partition-write.svg
49
+ - images/svg/join.svg
50
+ - images/svg/partition-read.svg
51
+ - images/partition-write.png
52
+ - images/service-droonga-overload.png
53
+ - images/service-groonga-dead-2.png
54
+ - images/replication-read-dead.png
55
+ - images/join.png
56
+ - images/service-groonga-overload-2.png
57
+ - images/replication-read.png
58
+ - images/unjoin.png
59
+ - images/svg/D3255CB9.png
60
+ - images/service-groonga.png
61
+ - images/benchmark-qps.png
62
+ - images/partition-read.png
63
+ - images/partition-and-replication-actual.png
64
+ - images/groonga-vs-droonga.png
65
+ - images/replication-write.png
66
+ - images/partition-and-replication.png
67
+ - images/service-groonga-dead-1.png
68
+ - images/service-groonga-overload.png
69
+ - images/service-droonga.png
70
+ - images/groonga-vs-droonga-compatible-http.png
71
+ - images/benchmark-elapsedtime.png
72
+ - images/service-droonga-dead.png
73
+ - introduction.md
74
+ - pdf/droonga-meetup-1-introduction.pdf
75
+ homepage: http://slide.rabbit-shocker.org/authors/Piro/droonga-meetup-1/
76
+ licenses: []
77
+ metadata: {}
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubyforge_project:
94
+ rubygems_version: 2.0.14
95
+ signing_key:
96
+ specification_version: 4
97
+ summary: はじめてのDroonga
98
+ test_files: []