Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Elasticsearch at 
! 
@mumoshu
九岡 佑介(くおか ~) 
https://www.wantedly.com/users/392910
@mumoshu 
• 2008年~ NECビッグローブ 
• 2010年~ フリュー 
• 2013年~ グリー 
• 2014年~ クラウドワークス 
• 元々Scalaエンジニア 
• 今はRuby/インフラエンジニア
福井県出身 
おろし蕎麦が好き
クラウドワークス 
クラウドソーシングサービス 
http://crowdworks.jp/
仕事を探す・仕事をする・報酬をもらう 
インターネット上で完結
仕事の発注と受注ができる 
リモートワーク前提
188種類の仕事が発注できる
“クラウドソーシングは労働の 
「オープンソース化」” 
ジェフ・ハウ 
http://crowdworks.jp/adviser
“自分が将来リモートワークを 
する際の下地づくり” 
@mumoshu
「働く」を通して人々に笑顔を 
クラウドワークスのスローガン 
http://crowdworks.co.jp/
「ありがとう」ボタン 
感謝の気持ち 
の可視化
Elasticsearch 
at CrowdWorks
検索対象 
仕事
結果 
• 検索時間が一桁短くなった
Elasticsearchなし(db.m3.large) 
• Completed 200 OK in 7096.3ms (Views: 217.5ms 
| ActiveRecord: 6794.6ms | Elasticsearch: 0....
Elasticsearchあり(Found 4GB) 
• Completed 200 OK in 648.7ms (Views: 355.5ms 
| ActiveRecord: 77.6ms | Elasticsearch: 194.5ms...
要件と仕様 
• 高可用性 
• 検索性能重視
高可用性 
• Elasticsearchが落ちた場合はInnoDB FTS(Full-text 
search)で代替 (いわゆるGraceful Degradationの仕組み) 
• 一部ユーザにだけElasticsearchによる検索を...
検索性能重視 
• Dynamic Scriptingオフ 
• Object Type/Nested Objects 
• Parent/ChildでもNested Type/Documentsでもなく 
• インデックス更新 
• Elas...
Mapping定義 
83行
Elasticsearch 
• Elasticsearch 1.3.4 
• Foundというサービス 
• メモリ 2GB、ディスク容量 16GBのクラスタ
Gems 
• elasticsearch-rails 
• elasticsearch-model 
• crowdworks/gracefully 
• crowdworks/elasticsearch-model-extensions 
...
Gracefullyの紹介 
• https://github.com/crowdworks/gracefully 
• 「処理が失敗したときに、代替処理を呼び出す」を汎用化 
したライブラリ 
• Graceful Degradationの実...
*-extensionsの紹介 
• https://github.com/crowdworks/elasticsearch-model-extensions 
• elasticsearch-modelの追加機能集 
• Mappingからa...
Found 
Elasticsearch as a service 
http://found.no/
Elasticsearch as a service 
• ダウンタイムなしでクラスタサイズ変更可能 
• ダウンタイムなしでElasticsearchアップグレード可能 
• 最小クラスタ: メモリ256MB、ディスク2GB 
• 最大クラス...
Elasticsearch as a service 
• Elasticsearchに(まだ)ない機能 
• Web UIでクラスタ設定変更 
• セキュリティ 
• httpsとBasic認証、ACL 
• read、read/write用...
まとめ 
• クラウドワークスのRailsアプリの検索をElasticsearchベースに 
→検索時間が1桁短く 
• Elasticsearch as a serviceであるFoundを利用→運用フリー 
• 高可用性→Elasticse...
TODO 
• Elasticsearchによる検索を 
100%のユーザに公開 
• 仕事検索以外にもElasticsearchを適用
:bow: 
ありがとうございました!
We are hiring! 
https://crowdworks.co.jp/recruit/engineer/
質疑応答
本番テスト手順 
1. Elasticsearchのインデックス更新を100%公開 
2. インデックスを再構築 
• 再構築開始時点の全データがインデックス化される 
• 再構築の開始から終了までに作成されたデータがインデックスから漏れると ...
学習リソース 
• Wantedlyさんのブログとスライド 
• http://www.elasticsearch.org/guide/ 
• https://www.found.no/foundation/ 
• 分散システム一般
開発リソース 
• 全エンジニア: 8名(うち鳥取1名) 
• Elasticsearch対応: 1名
負荷テスト 
• CloudFormationとFoundで立ち上げた環境+ 
本番相当の規模のデータセット 
• Gatling
Upcoming SlideShare
Loading in …5
×

Elasticsearch at CrowdWorks

10,762 views

Published on

第7回 Elasticsearch勉強会(http://elasticsearch.doorkeeper.jp/events/16837)の登壇資料です。

http://engineer.crowdworks.jp/

Published in: Technology

Elasticsearch at CrowdWorks

  1. 1. Elasticsearch at ! @mumoshu
  2. 2. 九岡 佑介(くおか ~) https://www.wantedly.com/users/392910
  3. 3. @mumoshu • 2008年~ NECビッグローブ • 2010年~ フリュー • 2013年~ グリー • 2014年~ クラウドワークス • 元々Scalaエンジニア • 今はRuby/インフラエンジニア
  4. 4. 福井県出身 おろし蕎麦が好き
  5. 5. クラウドワークス クラウドソーシングサービス http://crowdworks.jp/
  6. 6. 仕事を探す・仕事をする・報酬をもらう インターネット上で完結
  7. 7. 仕事の発注と受注ができる リモートワーク前提
  8. 8. 188種類の仕事が発注できる
  9. 9. “クラウドソーシングは労働の 「オープンソース化」” ジェフ・ハウ http://crowdworks.jp/adviser
  10. 10. “自分が将来リモートワークを する際の下地づくり” @mumoshu
  11. 11. 「働く」を通して人々に笑顔を クラウドワークスのスローガン http://crowdworks.co.jp/
  12. 12. 「ありがとう」ボタン 感謝の気持ち の可視化
  13. 13. Elasticsearch at CrowdWorks
  14. 14. 検索対象 仕事
  15. 15. 結果 • 検索時間が一桁短くなった
  16. 16. Elasticsearchなし(db.m3.large) • Completed 200 OK in 7096.3ms (Views: 217.5ms | ActiveRecord: 6794.6ms | Elasticsearch: 0.0ms) Completed 200 OK in 1676.2ms (Views: 211.3ms | ActiveRecord: 1409.3ms | Elasticsearch: 0.0ms) Completed 200 OK in 1657.5ms (Views: 210.7ms | ActiveRecord: 1405.8ms | Elasticsearch: 0.0ms)
  17. 17. Elasticsearchあり(Found 4GB) • Completed 200 OK in 648.7ms (Views: 355.5ms | ActiveRecord: 77.6ms | Elasticsearch: 194.5ms) Completed 200 OK in 580.4ms (Views: 372.7ms | ActiveRecord: 67.4ms | Elasticsearch: 118.6ms) Completed 200 OK in 626.9ms (Views: 367.8ms | ActiveRecord: 71.1ms | Elasticsearch: 152.2ms)
  18. 18. 要件と仕様 • 高可用性 • 検索性能重視
  19. 19. 高可用性 • Elasticsearchが落ちた場合はInnoDB FTS(Full-text search)で代替 (いわゆるGraceful Degradationの仕組み) • 一部ユーザにだけElasticsearchによる検索を公開 (Feature Toggleの仕組み) • 非同期でインデックス更新、失敗時はインターバルを変 えながらリトライ • サービス無停止でインデックス再構築
  20. 20. 検索性能重視 • Dynamic Scriptingオフ • Object Type/Nested Objects • Parent/ChildでもNested Type/Documentsでもなく • インデックス更新 • Elasticsearchのドキュメントを必要なフィールドだけ部分更新 • http://www.elasticsearch.org/guide/en/elasticsearch/guide/ current/partial-updates.html
  21. 21. Mapping定義 83行
  22. 22. Elasticsearch • Elasticsearch 1.3.4 • Foundというサービス • メモリ 2GB、ディスク容量 16GBのクラスタ
  23. 23. Gems • elasticsearch-rails • elasticsearch-model • crowdworks/gracefully • crowdworks/elasticsearch-model-extensions • delayed_job
  24. 24. Gracefullyの紹介 • https://github.com/crowdworks/gracefully • 「処理が失敗したときに、代替処理を呼び出す」を汎用化 したライブラリ • Graceful Degradationの実現に利用可能 • リトライ回数、代替処理と主処理の入れ替え(Fail-fast)まで の連続失敗回数、タイムアウト秒数など設定可能 • Proc、メソッドを簡単にGraceful Degradation対応に
  25. 25. *-extensionsの紹介 • https://github.com/crowdworks/elasticsearch-model-extensions • elasticsearch-modelの追加機能集 • Mappingからas_indexed_jsonメソッドの自動生成 • エイリアスを利用した無停止のインデックス再構築を1メソッドで • ドキュメントの部分更新(ActiveRecord::Dirtyという変更検知の仕 組みとElasticsearchのPartial Updateの仕組みを利用)
  26. 26. Found Elasticsearch as a service http://found.no/
  27. 27. Elasticsearch as a service • ダウンタイムなしでクラスタサイズ変更可能 • ダウンタイムなしでElasticsearchアップグレード可能 • 最小クラスタ: メモリ256MB、ディスク2GB • 最大クラスタ: メモリ32GB、ディスク256GB • SSDあり • HA構成(2つ以上のDCにサーバを分散)可能 • ただし日本リージョンは未対応…
  28. 28. Elasticsearch as a service • Elasticsearchに(まだ)ない機能 • Web UIでクラスタ設定変更 • セキュリティ • httpsとBasic認証、ACL • read、read/write用ユーザを作成可能
  29. 29. まとめ • クラウドワークスのRailsアプリの検索をElasticsearchベースに →検索時間が1桁短く • Elasticsearch as a serviceであるFoundを利用→運用フリー • 高可用性→Elasticsearchが落ちても安心 • 検索速度重視の設計が特徴 • そのために開発したソフトウェアはOSSとして公開 →Elasticsearchコミュニティに還元
  30. 30. TODO • Elasticsearchによる検索を 100%のユーザに公開 • 仕事検索以外にもElasticsearchを適用
  31. 31. :bow: ありがとうございました!
  32. 32. We are hiring! https://crowdworks.co.jp/recruit/engineer/
  33. 33. 質疑応答
  34. 34. 本番テスト手順 1. Elasticsearchのインデックス更新を100%公開 2. インデックスを再構築 • 再構築開始時点の全データがインデックス化される • 再構築の開始から終了までに作成されたデータがインデックスから漏れると 困るので、予め1を実行した 3. Elasticsearchによる検索を 10%のユーザに公開 4. しばらくスモークテスト 5. 問題あれば非公開に戻す
  35. 35. 学習リソース • Wantedlyさんのブログとスライド • http://www.elasticsearch.org/guide/ • https://www.found.no/foundation/ • 分散システム一般
  36. 36. 開発リソース • 全エンジニア: 8名(うち鳥取1名) • Elasticsearch対応: 1名
  37. 37. 負荷テスト • CloudFormationとFoundで立ち上げた環境+ 本番相当の規模のデータセット • Gatling

×