Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
ZOZOTOWNの商品検索におけるElasticsearch活用事例 / Elasticsearch Case Study in ZOZOTOWN Goods Search
banatt
December 01, 2022
Technology
0
830
ZOZOTOWNの商品検索におけるElasticsearch活用事例 / Elasticsearch Case Study in ZOZOTOWN Goods Search
banatt
December 01, 2022
Tweet
Share
Other Decks in Technology
See All in Technology
OpenShiftクラスターのアップグレード自動化への挑戦! / OpenShift Cluster Upgrade Automation
skitamura7446
0
150
Stripe / Okta Customer Identity Cloud(旧Auth0) の採用に至った理由 〜モリサワの SaaS 戦略〜
tomuro
0
130
re:Inventで発表があったIoT事例の紹介と考察
kizawa2020
0
180
2年で10→70人へ! スタートアップの 情報セキュリティ課題と施策
miekobayashi
1
630
01_ユーザーリサーチ実施の進め方
kouzoukaikaku
0
520
ユーザーテストガイドライン VERSION 2.0
kouzoukaikaku
0
1.3k
AI Builderについて
miyakemito
0
910
IoTを始めたきっかけの話と個人でできるIoTの今後 / 新年LT会「私の愛するIoT 2023」
you
0
230
FlexScan HD2452Wの 後継を探して
tring
0
6.3k
創業1年目のスタートアップでAWSコストを抑えるために取り組んでいること / How to Keep AWS Costs Down at a Startup
yuj1osm
3
2.2k
Deep Neural Networkの共同学習
hf149
0
290
OpenShiftのリリースノートを整理してみた
loftkun
2
390
Featured
See All Featured
Scaling GitHub
holman
453
140k
The Mythical Team-Month
searls
210
40k
Fireside Chat
paigeccino
16
1.8k
Pencils Down: Stop Designing & Start Developing
hursman
114
10k
What's in a price? How to price your products and services
michaelherold
233
9.7k
From Idea to $5000 a Month in 5 Months
shpigford
374
44k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
7
580
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
22
1.7k
The World Runs on Bad Software
bkeepers
PRO
59
5.7k
Building Applications with DynamoDB
mza
85
5k
Design by the Numbers
sachag
271
18k
How GitHub (no longer) Works
holman
298
140k
Transcript
ZOZOTOWNの商品検索における Elasticsearch活用事例 株式会社ZOZO 技術本部 検索基盤部 池田 祐一 SRE部 立花 隆 Copyright ©
ZOZO, Inc. 1
© ZOZO, Inc. 株式会社ZOZO 技術本部 検索基盤部 検索基盤ブロック 池田 祐一 前職はSIerで働いており、2021年4月よりZOZOの検索基盤
チームへジョインしました。 現在はZOZOTOWNの検索に関するバックエンド領域の開発 ・保守/運用を行っています。 フルリモートでの生活もすっかり板につきました。 2
© ZOZO, Inc. https://zozo.jp/ • ファッションEC • 1,500以上のショップ、8,400以上のブランドの取り扱い • 常時90万点以上の商品アイテム数と毎日平均2,600点以上の新着
商品 を掲載(2022年9月末時点) • ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、靴の専門モール 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 • 即日配送サービス • ギフトラッピングサービス • ツケ払い など 3
© ZOZO, Inc. 本セッションの構成 4 第1部: アプリケーション ZOZOTOWNにおけるElasticsearchの活用方法と、商品検索システムの構成について
第2部: SRE 検索APIが利用するElasticsearchをプロダクションレディにするための取り組みについて アプリケーション観点と、SRE観点の2部構成でお話しします。 本セッションの構成
© ZOZO, Inc. 5 第1部 1. ZOZOTOWNとElasticsearchのこれまでの歩み 2. ZOZOTOWNにおけるElasticsearchの活用方法 3.
ZOZOTOWNの検索システムの構成 第2部 1. Elasticsearch周りのアーキテクチャ 2. プロダクションレディとは? 3. プロダクションレディにするために取り組んでいること 4. 今後の展望 アジェンダ
© ZOZO, Inc. 6 第1部 1. ZOZOTOWNとElasticsearchのこれまでの歩み 2. ZOZOTOWNにおけるElasticsearchの活用方法 3.
ZOZOTOWNの検索システムの構成 第2部 1. Elasticsearch周りのアーキテクチャ 2. プロダクションレディとは? 3. プロダクションレディにするために取り組んでいること 4. 今後の展望 アジェンダ
© ZOZO, Inc. ZOZOTOWNとElasticsearchのこれまでの歩み 7 GSAサービス終了に伴う 乗り換え Elasticsearchへ全面移行 ➡ 2020年4月より、ZOZOTOWNの商品検索はElasticsearchへと全面移行しました。 2017
2018 2019 2020 2021 2022 ✓ ZOZOTOWN商品検索におけるElasticsearch移行までの歴史 Google Search Appliance
© ZOZO, Inc. 8 第1部 1. ZOZOTOWNとElasticsearchのこれまでの歩み 2. ZOZOTOWNにおけるElasticsearchの活用方法 3.
ZOZOTOWNの検索システムの構成 第2部 1. Elasticsearch周りのアーキテクチャ 2. プロダクションレディとは? 3. プロダクションレディにするために取り組んでいること 4. 今後の展望 アジェンダ
© ZOZO, Inc. ZOZOTOWNにおけるElasticsearchの活用方法 ✓ ZOZOTOWNで取り扱っている商品全般の検索機能をElasticsearchが担当する。 9 検索キーワードサジェスト ランキング機能 商品検索
© ZOZO, Inc. 製品情報 ZOZOTOWNにおけるElasticsearchの活用方法 検索に必要な情報をリアルタイム更新 ✓ Elasticsearchへインデクシングした商品データから、検索条件にマッチした商品を一覧表示する。 ブランド 検索条件に合った商品をソートして出力
サイズ カラー クーポン 情報 セール 情報 在庫状態 1 2 3 4 5 … … … … 10
© ZOZO, Inc. ZOZOTOWNにおけるElasticsearchの活用方法 ✓ ユーザーの行動履歴や属性を元に検索結果を並べる「あなたにおすすめ順」を実現するために、 Elasticsearch Learning to
Rank(LTR)プラグインを利用している。 11 おすすめ順を指定 機械学習モデルの再学習を 繰り返し改善 商品特徴量ログを出力 機械学習モデルを使い、 ユーザーの嗜好に合わせた並び順 へ並べ替える プロフィール ・30代男 ・過去に購入した商品 ・…
© ZOZO, Inc. 12 第1部 1. ZOZOTOWNとElasticsearchのこれまでの歩み 2. ZOZOTOWNにおけるElasticsearchの活用方法 3.
ZOZOTOWNの検索システムの構成 第2部 1. Elasticsearch周りのアーキテクチャ 2. プロダクションレディとは? 3. プロダクションレディにするために取り組んでいること 4. 今後の展望 アジェンダ
© ZOZO, Inc. ZOZOTOWNの検索システムの構成 ✓ 検索システムは、Elasticsearchへ商品情報をインデクシングするバッチ機能(以下インデクシングバッチ)と、 Elasticsearchから商品情報を取得するAPI(以下検索API)から構成している。 13
© ZOZO, Inc. ZOZOTOWNの検索システムの構成 ✓ インデクシングバッチ詳細 14 製品情報・クーポン情報・人気順、など複数の処理 へ分割しており、Elasticsearchへのインデクシング を並列に処理する
更新情報を反映 対象データの情報取得 Elasticsearchへ情報反映 スケジュール起動
© ZOZO, Inc. ZOZOTOWNの検索システムの構成 ✓ 検索API詳細 15 検索リクエスト Elasticsearchへのクエリ発行 商品情報の取得
商品情報の返却 リクエストに応じた情報を取得。 商品検索やランキング検索、また、商品件数取 得など、複数のエンドポイントから構成
© ZOZO, Inc. 検索APIが利用するElasticsearchをプロダクションレディにするための取り組みについて、ご紹介します。 16 ここからSREのお話
© ZOZO, Inc. 株式会社ZOZO 技術本部 SRE部 ECプラットフォーム基盤SREブロック 立花 隆 2021年2月に入社し、ZOZOTOWNのマイクロサービス基盤を 担当するSREチームにジョインしました。現在は検索サービ
スのSREを担当しています。 プライベートでは2022年4月から始めたロードバイクで福岡 市周辺を走ってます🚴 17
© ZOZO, Inc. 18 第1部 1. ZOZOTOWNとElasticsearchのこれまでの歩み 2. ZOZOTOWNにおけるElasticsearchの活用方法 3.
ZOZOTOWNの検索システムの構成 第2部 1. Elasticsearch周りのアーキテクチャ 2. プロダクションレディとは? 3. プロダクションレディにするために取り組んでいること 4. 今後の展望 アジェンダ
© ZOZO, Inc. 19 Elasticsearch周りのアーキテクチャ
© ZOZO, Inc. 20 第1部 1. ZOZOTOWNとElasticsearchのこれまでの歩み 2. ZOZOTOWNにおけるElasticsearchの活用方法 3.
ZOZOTOWNの検索システムの構成 第2部 1. Elasticsearch周りのアーキテクチャ 2. プロダクションレディとは? 3. プロダクションレディにするために取り組んでいること 4. 今後の展望 アジェンダ
© 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
© ZOZO, Inc. 22 第1部 1. ZOZOTOWNとElasticsearchのこれまでの歩み 2. ZOZOTOWNにおけるElasticsearchの活用方法 3.
ZOZOTOWNの検索システムの構成 第2部 1. Elasticsearch周りのアーキテクチャ 2. プロダクションレディとは? 3. プロダクションレディにするために取り組んでいること 4. 今後の展望 アジェンダ
© ZOZO, Inc. 1. マネージドサービスを活用して運用負荷を下げる ✓ Elasticsearchクラスタの管理にはマネージドクラウドサービスである Elastic Cloudを利用している 23
Elastic Cloudを選定した理由としては、カ スタムプラグインの利用に制限がないこと も大きかった • インフラ管理を手放す • 障害ノードの自動リカバリ • バックアップの自動取得
© 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
© ZOZO, Inc. 3. パフォーマンステストとキャパシティプラン 25 ✓ 検索APIからElasticsearchを通す負荷試験を実施し、基礎数値を把握する • 1データノードあたりの目標レイテンシを捌けるスループット
• エラーが出ないラインではなく、レイテンシが跳ねないラインを探る ✓ データノードを増やした時にスループットが比例することを確認する concurrency(req/sec) latency(msec) 負荷試験結果の例 99%ile mean 昔は同じ物理ノードに複数コンテナが 乗りリソースが取り合いになることが 多く、20データノードくらいで性能が頭 打ちになっていた・・・
© 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ではディスク 利用量トリガーでしかオートスケールできない。 そのため残念ながら人力で変更しており運用負荷が高い状態・・・
© ZOZO, Inc. 4. モニタリング 27 ✓ ダッシュボードで各種メトリクスを確認できる • インフラ、アプリケーションのメトリクスそれぞれの監視対象の例
(赤字はアラート判定の対象) インフラ監視対象 CPU使用量 メモリ使用量 ディスク使用量 スレッドプール(queue,rejected) データノード数 クラスタステータス 未アサイン状態のシャード数 アプリケーション監視対象 クエリ&フェッチ スループット クエリ&フェッチ レイテンシ インデクシングバッチの遅延 インデックス毎のドキュメント数 エイリアスの指すインデックス数 セール商品数、クーポン商品数など 独自クエリでしか取得できないメトリクスについては、 DatadogのPythonライブラリ*1を利用した自家製エク スポーターを作り対応している *1 ref. Datadog/datadogpy
© ZOZO, Inc. 4. モニタリング 28 ✓ Slackへのアラート通知が設定されている • 監視アラートメッセージには対応アクションが記載されたリンクを明
記し、誰でも即応できるようにする ✓ 一定以上の障害レベルの場合、PagerDutyから輪番担当者へのオンコー ルが設定されている
© ZOZO, Inc. 29 第1部 1. ZOZOTOWNとElasticsearchのこれまでの歩み 2. ZOZOTOWNにおけるElasticsearchの活用方法 3.
ZOZOTOWNの検索システムの構成 第2部 1. Elasticsearch周りのアーキテクチャ 2. プロダクションレディとは? 3. プロダクションレディにするために取り組んでいること 4. 今後の展望 アジェンダ
© ZOZO, Inc. 今後の展望 30 😤 セールイベント時のデータノード数変更の運用負荷が高い ➜ CPU利用量 or
リクエスト量判定のオートスケール追加を待ってます!🙏 😤 Elasticsearchのチューニングはまだ手動設定 ➜ 手動設定はクラスタ追加時に失念するリスクがあるためTerraform*1で IaC化する!💪 😤 おすすめ順検索の特徴量を増やすとレイテンシが悪化する ➜ 検索全体でレイテンシを改善し、特徴量を増やせる余地を作る!💪 *1 ref. elastic/terraform-provider-elasticstack 信頼性・保守性の向上 ユーザ体験の向上
© ZOZO, Inc. 31 最後に・・・
© ZOZO, Inc. • マッピング設定の最適化によるパフォーマンスチューニング • ユーザーログを活用したZOZOTOWNの検索サジェスト改善 • Elasticsearchバージョンアップ対応
32 取り組みについて、弊社テックブログ でも紹介していますので是非! 日々の運用・改善についてご紹介 その他にもElasticsearchに関わる様々な改善・開発を日々行っている
© ZOZO, Inc. ご清聴ありがとうございました 33
None