Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Elasticsearch at CrowdWorks

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 37 Publicité
Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Similaire à Elasticsearch at CrowdWorks (20)

Publicité

Plus par 佑介 九岡 (11)

Plus récents (20)

Publicité

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

×