Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ZOZOTOWNの商品検索におけるElasticsearch活用事例 / Elasticsearch Case Study in ZOZOTOWN Goods Search

banatt
December 01, 2022

ZOZOTOWNの商品検索におけるElasticsearch活用事例 / Elasticsearch Case Study in ZOZOTOWN Goods Search

banatt

December 01, 2022
Tweet

Other Decks in Technology

Transcript

  1. ZOZOTOWNの商品検索における
 Elasticsearch活用事例
 株式会社ZOZO
 技術本部
 検索基盤部 池田 祐一
 SRE部   立花 隆
 Copyright ©

    ZOZO, Inc. 1
  2. © ZOZO, Inc. 株式会社ZOZO
 技術本部 検索基盤部 検索基盤ブロック
 池田 祐一
 前職はSIerで働いており、2021年4月よりZOZOの検索基盤

    チームへジョインしました。
 現在はZOZOTOWNの検索に関するバックエンド領域の開発 ・保守/運用を行っています。
 フルリモートでの生活もすっかり板につきました。
 2
  3. © ZOZO, Inc. https://zozo.jp/
 • ファッションEC
 • 1,500以上のショップ、8,400以上のブランドの取り扱い
 • 常時90万点以上の商品アイテム数と毎日平均2,600点以上の新着

    商品 を掲載(2022年9月末時点)
 • ブランド古着のファッションゾーン「ZOZOUSED」や
 コスメ専門モール「ZOZOCOSME」、靴の専門モール
 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン
 「ZOZOVILLA」を展開
 • 即日配送サービス
 • ギフトラッピングサービス
 • ツケ払い など
 3
  4. © ZOZO, Inc. 本セッションの構成
 4 第1部: アプリケーション
 
 ZOZOTOWNにおけるElasticsearchの活用方法と、商品検索システムの構成について
 


    第2部: SRE
 
  検索APIが利用するElasticsearchをプロダクションレディにするための取り組みについて
 アプリケーション観点と、SRE観点の2部構成でお話しします。
 本セッションの構成
  5. © ZOZO, Inc. 5 第1部
 1. ZOZOTOWNとElasticsearchのこれまでの歩み
 2. ZOZOTOWNにおけるElasticsearchの活用方法
 3.

    ZOZOTOWNの検索システムの構成
 
 第2部
 1. Elasticsearch周りのアーキテクチャ
 2. プロダクションレディとは?
 3. プロダクションレディにするために取り組んでいること
 4. 今後の展望
 アジェンダ
  6. © ZOZO, Inc. 6 第1部
 1. ZOZOTOWNとElasticsearchのこれまでの歩み
 2. ZOZOTOWNにおけるElasticsearchの活用方法
 3.

    ZOZOTOWNの検索システムの構成
 
 第2部
 1. Elasticsearch周りのアーキテクチャ
 2. プロダクションレディとは?
 3. プロダクションレディにするために取り組んでいること
 4. 今後の展望
 アジェンダ
  7. © ZOZO, Inc. ZOZOTOWNとElasticsearchのこれまでの歩み
 7 GSAサービス終了に伴う 乗り換え Elasticsearchへ全面移行 ➡ 2020年4月より、ZOZOTOWNの商品検索はElasticsearchへと全面移行しました。
 2017

    2018 2019 2020 2021 2022 ✓ ZOZOTOWN商品検索におけるElasticsearch移行までの歴史
 Google Search Appliance
  8. © ZOZO, Inc. 8 第1部
 1. ZOZOTOWNとElasticsearchのこれまでの歩み
 2. ZOZOTOWNにおけるElasticsearchの活用方法
 3.

    ZOZOTOWNの検索システムの構成
 
 第2部
 1. Elasticsearch周りのアーキテクチャ
 2. プロダクションレディとは?
 3. プロダクションレディにするために取り組んでいること
 4. 今後の展望
 アジェンダ
  9. © ZOZO, Inc. ZOZOTOWNにおけるElasticsearchの活用方法
 ✓ ZOZOTOWNで取り扱っている商品全般の検索機能をElasticsearchが担当する。
 9 検索キーワードサジェスト ランキング機能 商品検索

  10. © ZOZO, Inc. 製品情報 ZOZOTOWNにおけるElasticsearchの活用方法
 検索に必要な情報をリアルタイム更新
 ✓ Elasticsearchへインデクシングした商品データから、検索条件にマッチした商品を一覧表示する。
 ブランド 検索条件に合った商品をソートして出力


    サイズ カラー クーポン 情報 セール 情報 在庫状態 1 2 3 4 5 … … … … 10
  11. © ZOZO, Inc. ZOZOTOWNにおけるElasticsearchの活用方法
 
 ✓ ユーザーの行動履歴や属性を元に検索結果を並べる「あなたにおすすめ順」を実現するために、
 Elasticsearch Learning to

    Rank(LTR)プラグインを利用している。
 11 おすすめ順を指定 機械学習モデルの再学習を 繰り返し改善 商品特徴量ログを出力 機械学習モデルを使い、 ユーザーの嗜好に合わせた並び順 へ並べ替える プロフィール ・30代男 ・過去に購入した商品 ・…
  12. © ZOZO, Inc. 12 第1部
 1. ZOZOTOWNとElasticsearchのこれまでの歩み
 2. ZOZOTOWNにおけるElasticsearchの活用方法
 3.

    ZOZOTOWNの検索システムの構成
 第2部
 1. Elasticsearch周りのアーキテクチャ
 2. プロダクションレディとは?
 3. プロダクションレディにするために取り組んでいること
 4. 今後の展望
 アジェンダ
  13. © ZOZO, Inc. ZOZOTOWNの検索システムの構成
 ✓ 検索システムは、Elasticsearchへ商品情報をインデクシングするバッチ機能(以下インデクシングバッチ)と、 Elasticsearchから商品情報を取得するAPI(以下検索API)から構成している。
 13

  14. © ZOZO, Inc. ZOZOTOWNの検索システムの構成
 ✓ インデクシングバッチ詳細
 14 製品情報・クーポン情報・人気順、など複数の処理 へ分割しており、Elasticsearchへのインデクシング を並列に処理する

    更新情報を反映 対象データの情報取得 Elasticsearchへ情報反映 スケジュール起動
  15. © ZOZO, Inc. ZOZOTOWNの検索システムの構成
 ✓ 検索API詳細
 15 検索リクエスト Elasticsearchへのクエリ発行 商品情報の取得

    商品情報の返却 リクエストに応じた情報を取得。 商品検索やランキング検索、また、商品件数取 得など、複数のエンドポイントから構成
  16. © ZOZO, Inc. 検索APIが利用するElasticsearchをプロダクションレディにするための取り組みについて、ご紹介します。
 16 ここからSREのお話

  17. © ZOZO, Inc. 株式会社ZOZO
 技術本部 SRE部 ECプラットフォーム基盤SREブロック
 立花 隆
 2021年2月に入社し、ZOZOTOWNのマイクロサービス基盤を 担当するSREチームにジョインしました。現在は検索サービ

    スのSREを担当しています。
 プライベートでは2022年4月から始めたロードバイクで福岡 市周辺を走ってます🚴
 
 
 17
  18. © ZOZO, Inc. 18 第1部
 1. ZOZOTOWNとElasticsearchのこれまでの歩み
 2. ZOZOTOWNにおけるElasticsearchの活用方法
 3.

    ZOZOTOWNの検索システムの構成
 
 第2部
 1. Elasticsearch周りのアーキテクチャ
 2. プロダクションレディとは?
 3. プロダクションレディにするために取り組んでいること
 4. 今後の展望
 アジェンダ
  19. © ZOZO, Inc. 19 Elasticsearch周りのアーキテクチャ

  20. © ZOZO, Inc. 20 第1部
 1. ZOZOTOWNとElasticsearchのこれまでの歩み
 2. ZOZOTOWNにおけるElasticsearchの活用方法
 3.

    ZOZOTOWNの検索システムの構成
 
 第2部
 1. Elasticsearch周りのアーキテクチャ
 2. プロダクションレディとは?
 3. プロダクションレディにするために取り組んでいること
 4. 今後の展望
 アジェンダ
  21. © ZOZO, Inc. プロダクションレディとは? サービスが本番トラフィックを捌けるほど信頼のある状態のこと ZOZOTOWNではProduction Readiness Checklist*1 をベースとして、SREがサービス本番 リリース前に何を準備したら良いのか、より実践しやすいように規定している

    21 Production Readiness Checklist *1 プロダクションレディマイクロサービス [オライリージャパン] 付録A 本番対応のチェックリスト より引用 ref. ZOZOTOWNのProduction Readiness Checklistと信頼性向上の取り組み ZOZOTOWN Microservice Production Readiness Checklist 1. 安定性、信頼性を備えている 2. スケーラブルでパフォーマンスが高い 3. 耐障害性があり大惨事対応力がある 4. 適切に監視されている 5. ドキュメントが整備され、組織的に理 解されている 1. CI/CD と Release Engineering 2. Performance Testing / Capacity Planning 3. Failure Testing 4. Monitoring 5. Documentation
  22. © ZOZO, Inc. 22 第1部
 1. ZOZOTOWNとElasticsearchのこれまでの歩み
 2. ZOZOTOWNにおけるElasticsearchの活用方法
 3.

    ZOZOTOWNの検索システムの構成
 
 第2部
 1. Elasticsearch周りのアーキテクチャ
 2. プロダクションレディとは?
 3. プロダクションレディにするために取り組んでいること
 4. 今後の展望
 アジェンダ
  23. © ZOZO, Inc. 1. マネージドサービスを活用して運用負荷を下げる ✓ Elasticsearchクラスタの管理にはマネージドクラウドサービスである Elastic Cloudを利用している 23

    Elastic Cloudを選定した理由としては、カ スタムプラグインの利用に制限がないこと も大きかった • インフラ管理を手放す • 障害ノードの自動リカバリ • バックアップの自動取得
  24. © ZOZO, Inc. 2. IaCとCI/CDによる信頼性・保守性向上 24 ✓ Terraform + GitHub

    ActionsでElasticsearchクラスタ on ElasticCloudをデプロイしている Terraform利用前のCI/CDパイプライン内では、 CLIのElastic Cloud Controller (ecctl)を利用した職人芸的 な自家製スクリプトを利用していた・・・ elastic/terraform-provider-ec

  25. © ZOZO, Inc. 3. パフォーマンステストとキャパシティプラン 25 ✓ 検索APIからElasticsearchを通す負荷試験を実施し、基礎数値を把握する • 1データノードあたりの目標レイテンシを捌けるスループット

    • エラーが出ないラインではなく、レイテンシが跳ねないラインを探る ✓ データノードを増やした時にスループットが比例することを確認する concurrency(req/sec) latency(msec) 負荷試験結果の例 99%ile mean 昔は同じ物理ノードに複数コンテナが 乗りリソースが取り合いになることが 多く、20データノードくらいで性能が頭 打ちになっていた・・・
  26. © ZOZO, Inc. 3. パフォーマンステストとキャパシティプラン 26 ✓ データノードの適切なキャパシティサイズ見積もりができている • 平常時、土日深夜ピーク、大規模セール深夜ピーク、正月ピーク

    それぞれで何台必要になるかわかっている イベント 想定リクエスト量 スループット /1Node 必要なNode数 平常時 1,200 req/sec 100 req/sec 1,200 / 100 = 12 Node 土日深夜ピーク 1,800 req/sec 100 req/sec 1,800 / 100 = 18 Node 大規模セールピーク 2,400 req/sec 100 req/sec 2,400 / 100 = 24 Node 正月ピーク 3,000 req/sec 100 req/sec 3,000 / 100 = 30 Node CPUヘビーなワークロードであるZOZOTOWN検索機能においては、CPU使用量もしくはリク エスト量の閾値超過をトリガーにオートスケールさせたいが、現在Elastic Cloudではディスク 利用量トリガーでしかオートスケールできない。 そのため残念ながら人力で変更しており運用負荷が高い状態・・・
  27. © ZOZO, Inc. 4. モニタリング 27 ✓ ダッシュボードで各種メトリクスを確認できる • インフラ、アプリケーションのメトリクスそれぞれの監視対象の例

    (赤字はアラート判定の対象) インフラ監視対象 CPU使用量 メモリ使用量 ディスク使用量 スレッドプール(queue,rejected) データノード数 クラスタステータス 未アサイン状態のシャード数 アプリケーション監視対象 クエリ&フェッチ スループット クエリ&フェッチ レイテンシ インデクシングバッチの遅延 インデックス毎のドキュメント数 エイリアスの指すインデックス数 セール商品数、クーポン商品数など 独自クエリでしか取得できないメトリクスについては、 DatadogのPythonライブラリ*1を利用した自家製エク スポーターを作り対応している *1 ref. Datadog/datadogpy

  28. © ZOZO, Inc. 4. モニタリング 28 ✓ Slackへのアラート通知が設定されている • 監視アラートメッセージには対応アクションが記載されたリンクを明

    記し、誰でも即応できるようにする ✓ 一定以上の障害レベルの場合、PagerDutyから輪番担当者へのオンコー ルが設定されている
  29. © ZOZO, Inc. 29 第1部
 1. ZOZOTOWNとElasticsearchのこれまでの歩み
 2. ZOZOTOWNにおけるElasticsearchの活用方法
 3.

    ZOZOTOWNの検索システムの構成
 
 第2部
 1. Elasticsearch周りのアーキテクチャ
 2. プロダクションレディとは?
 3. プロダクションレディにするために取り組んでいること
 4. 今後の展望
 アジェンダ
  30. © ZOZO, Inc. 今後の展望 30 😤 セールイベント時のデータノード数変更の運用負荷が高い ➜ CPU利用量 or

    リクエスト量判定のオートスケール追加を待ってます!🙏 😤 Elasticsearchのチューニングはまだ手動設定 ➜ 手動設定はクラスタ追加時に失念するリスクがあるためTerraform*1で IaC化する!💪 😤 おすすめ順検索の特徴量を増やすとレイテンシが悪化する ➜ 検索全体でレイテンシを改善し、特徴量を増やせる余地を作る!💪 *1 ref. elastic/terraform-provider-elasticstack
 信頼性・保守性の向上 ユーザ体験の向上
  31. © ZOZO, Inc. 31 最後に・・・

  32. © ZOZO, Inc. • マッピング設定の最適化によるパフォーマンスチューニング
 • ユーザーログを活用したZOZOTOWNの検索サジェスト改善
 • Elasticsearchバージョンアップ対応
 


    32 取り組みについて、弊社テックブログ でも紹介していますので是非! 日々の運用・改善についてご紹介 その他にもElasticsearchに関わる様々な改善・開発を日々行っている
  33. © ZOZO, Inc. ご清聴ありがとうございました 33

  34. None