Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

© ZOZO, Inc. 株式会社ZOZO
 技術本部 検索基盤部 検索基盤ブロック
 池田 祐一
 前職はSIerで働いており、2021年4月よりZOZOの検索基盤 チームへジョインしました。
 現在はZOZOTOWNの検索に関するバックエンド領域の開発 ・保守/運用を行っています。
 フルリモートでの生活もすっかり板につきました。
 2

Slide 3

Slide 3 text

© ZOZO, Inc. https://zozo.jp/
 ● ファッションEC
 ● 1,500以上のショップ、8,400以上のブランドの取り扱い
 ● 常時90万点以上の商品アイテム数と毎日平均2,600点以上の新着 商品 を掲載(2022年9月末時点)
 ● ブランド古着のファッションゾーン「ZOZOUSED」や
 コスメ専門モール「ZOZOCOSME」、靴の専門モール
 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン
 「ZOZOVILLA」を展開
 ● 即日配送サービス
 ● ギフトラッピングサービス
 ● ツケ払い など
 3

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

© ZOZO, Inc. ZOZOTOWNとElasticsearchのこれまでの歩み
 7 GSAサービス終了に伴う 乗り換え Elasticsearchへ全面移行 ➡ 2020年4月より、ZOZOTOWNの商品検索はElasticsearchへと全面移行しました。
 2017 2018 2019 2020 2021 2022 ✓ ZOZOTOWN商品検索におけるElasticsearch移行までの歴史
 Google Search Appliance

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

© ZOZO, Inc. ZOZOTOWNにおけるElasticsearchの活用方法
 ✓ ZOZOTOWNで取り扱っている商品全般の検索機能をElasticsearchが担当する。
 9 検索キーワードサジェスト ランキング機能 商品検索

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

© ZOZO, Inc. ZOZOTOWNにおけるElasticsearchの活用方法
 
 ✓ ユーザーの行動履歴や属性を元に検索結果を並べる「あなたにおすすめ順」を実現するために、
 Elasticsearch Learning to Rank(LTR)プラグインを利用している。
 11 おすすめ順を指定 機械学習モデルの再学習を 繰り返し改善 商品特徴量ログを出力 機械学習モデルを使い、 ユーザーの嗜好に合わせた並び順 へ並べ替える プロフィール ・30代男 ・過去に購入した商品 ・…

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

© ZOZO, Inc. ZOZOTOWNの検索システムの構成
 ✓ 検索システムは、Elasticsearchへ商品情報をインデクシングするバッチ機能(以下インデクシングバッチ)と、 Elasticsearchから商品情報を取得するAPI(以下検索API)から構成している。
 13

Slide 14

Slide 14 text

© ZOZO, Inc. ZOZOTOWNの検索システムの構成
 ✓ インデクシングバッチ詳細
 14 製品情報・クーポン情報・人気順、など複数の処理 へ分割しており、Elasticsearchへのインデクシング を並列に処理する 更新情報を反映 対象データの情報取得 Elasticsearchへ情報反映 スケジュール起動

Slide 15

Slide 15 text

© ZOZO, Inc. ZOZOTOWNの検索システムの構成
 ✓ 検索API詳細
 15 検索リクエスト Elasticsearchへのクエリ発行 商品情報の取得 商品情報の返却 リクエストに応じた情報を取得。 商品検索やランキング検索、また、商品件数取 得など、複数のエンドポイントから構成

Slide 16

Slide 16 text

© ZOZO, Inc. 検索APIが利用するElasticsearchをプロダクションレディにするための取り組みについて、ご紹介します。
 16 ここからSREのお話

Slide 17

Slide 17 text

© ZOZO, Inc. 株式会社ZOZO
 技術本部 SRE部 ECプラットフォーム基盤SREブロック
 立花 隆
 2021年2月に入社し、ZOZOTOWNのマイクロサービス基盤を 担当するSREチームにジョインしました。現在は検索サービ スのSREを担当しています。
 プライベートでは2022年4月から始めたロードバイクで福岡 市周辺を走ってます🚴
 
 
 17

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

© ZOZO, Inc. 19 Elasticsearch周りのアーキテクチャ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

© 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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

© ZOZO, Inc. 1. マネージドサービスを活用して運用負荷を下げる ✓ Elasticsearchクラスタの管理にはマネージドクラウドサービスである Elastic Cloudを利用している 23 Elastic Cloudを選定した理由としては、カ スタムプラグインの利用に制限がないこと も大きかった ● インフラ管理を手放す ● 障害ノードの自動リカバリ ● バックアップの自動取得

Slide 24

Slide 24 text

© 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


Slide 25

Slide 25 text

© ZOZO, Inc. 3. パフォーマンステストとキャパシティプラン 25 ✓ 検索APIからElasticsearchを通す負荷試験を実施し、基礎数値を把握する ● 1データノードあたりの目標レイテンシを捌けるスループット ● エラーが出ないラインではなく、レイテンシが跳ねないラインを探る ✓ データノードを増やした時にスループットが比例することを確認する concurrency(req/sec) latency(msec) 負荷試験結果の例 99%ile mean 昔は同じ物理ノードに複数コンテナが 乗りリソースが取り合いになることが 多く、20データノードくらいで性能が頭 打ちになっていた・・・

Slide 26

Slide 26 text

© 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ではディスク 利用量トリガーでしかオートスケールできない。 そのため残念ながら人力で変更しており運用負荷が高い状態・・・

Slide 27

Slide 27 text

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


Slide 28

Slide 28 text

© ZOZO, Inc. 4. モニタリング 28 ✓ Slackへのアラート通知が設定されている ● 監視アラートメッセージには対応アクションが記載されたリンクを明 記し、誰でも即応できるようにする ✓ 一定以上の障害レベルの場合、PagerDutyから輪番担当者へのオンコー ルが設定されている

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

© ZOZO, Inc. 31 最後に・・・

Slide 32

Slide 32 text

© ZOZO, Inc. ● マッピング設定の最適化によるパフォーマンスチューニング
 ● ユーザーログを活用したZOZOTOWNの検索サジェスト改善
 ● Elasticsearchバージョンアップ対応
 
 32 取り組みについて、弊社テックブログ でも紹介していますので是非! 日々の運用・改善についてご紹介 その他にもElasticsearchに関わる様々な改善・開発を日々行っている

Slide 33

Slide 33 text

© ZOZO, Inc. ご清聴ありがとうございました 33

Slide 34

Slide 34 text

No content