Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ZOZO Tech Meetup ZOZOTOWN 検索機能のマイクロサービス化への取り組み ...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
TomohiroKani
July 29, 2021
5.4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ZOZO Tech Meetup ZOZOTOWN 検索機能のマイクロサービス化への取り組み / ZOZO Tech Meetup ZOZOTOWN Search Microservice
TomohiroKani
July 29, 2021
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Skip the Path - Find Your Career Trail
mkilby
1
230
Everyday Curiosity
cassininazir
0
320
The Spectacular Lies of Maps
axbom
PRO
1
1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
940
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
280
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
700
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Transcript
ZOZOTOWN 検索機能の マイクロサービス化への取り組み ZOZO Tech Meetup 〜マイクロサービス化に取り組む、16年目のZOZOTOWN〜 株式会社ZOZOテクノロジーズ EC基盤本部 検索基盤部
検索基盤チーム 可児 友裕 Copyright © ZOZO Technologies, Inc.
© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ EC基盤本部 検索基盤部 検索基盤チーム 2 可児
友裕 2017年4月にスタートトゥデイ工務店(現ZOZOテクノロジー ズ)に中途入社。ZOZOTOWNのバックエンド開発を経てリプ レイスプロジェクトに参加、現在は検索機能のバックエンド開 発に従事し、検索機能のマイクロサービス化を担当。
© ZOZO Technologies, Inc. https://zozo.jp/ • 日本最大級のファッション通販サイト • 1,400以上のショップ、8,200以上のブランドの取り扱い(ともに2021年3月 末時点)
• 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商品 を掲載 • コスメ専門モール「ZOZOCOSME」や靴の専門モール 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 • 即日配送サービス • ギフトラッピングサービス • ツケ払い など 3
© ZOZO Technologies, Inc. アジェンダ • はじめに • なぜ検索機能をマイクロサービス化したか •
どのように構築したか • 得られた効果 4
© ZOZO Technologies, Inc. はじめに 5
© ZOZO Technologies, Inc. https://techblog.zozo.com/entry/zozotown-search-microservice 本内容はZOZO Tech Blog に記載した内容のスライド形式での発表になります
© ZOZO Technologies, Inc. • 本日話すこと ◦ ZOZOTOWNで利用しているマイクロサービスか ら、検索APIを切り出し検索機能に特化したマイク ロサービスを構築した話
7 ZOZOTOWN 検索ページ 主に検索ページで利用される マイクロサービスを構築しました
© ZOZO Technologies, Inc. なぜ検索機能を マイクロサービス化したか 8
© ZOZO Technologies, Inc. 9 ZOZOTOWNのシステム概要図 ※詳細は一部省略しています 検索機能をマイクロサービス化する前 出典:ZOZOTOWN検索機能のマイクロサービス化への取り組み(https://techblog.zozo.com/entry/zozotown-search-microservice)
© ZOZO Technologies, Inc. 検索機能をマイクロサービス化する前の課題 1. 開発 ◦ 1つのマイクロサービスに非常に多くのAPIが存在していた ▪
リプレイスを進めるにつれマイクロなサービスではなくなり、 検索機能もそこに含まれていた ◦ 把握していないAPIや共通処理があり、開発コストがかさんでいた ◦ SQL ServerとElasticsearchを参照していた 2. 保守・運用 ◦ 別チームが主管 ▪ 機能追加や改修の際はレビュー・リリース依頼をしていた ▪ 自チームのみで完結できる開発作業でも連携が必要だった ▪ 改修のマージ・リリースタイミングを自由にハンドリングできなかった ◦ 障害発生時 ▪ 原因調査が広域に及ぶため、切り分けが難しく複数チームが調査にあたっていた 10
© ZOZO Technologies, Inc. 課題をどうにかしたい 検索機能に特化した マイクロサービスを構築しよう 11
© ZOZO Technologies, Inc. 検索機能に特化したマイクロサービスを構築する目的 • 開発速度を向上させる ◦ 検索基盤チームが主管である検索APIのみのため、精通したAPIの開発に集中できる →開発・改修・リリースに掛かるサイクルの短縮が見込める
◦ チャレンジングな実装の場合でも、スムーズな意思決定が可能となる • 検索機能に特化したマイクロサービスを開発する ◦ バックエンドはElasticsearchのみとする 12
© ZOZO Technologies, Inc. どのように構築したか 13
© ZOZO Technologies, Inc. 14 ZOZOTOWNのシステム概要図 ※詳細は一部省略しています 検索機能をマイクロサービス化する前 再掲
© ZOZO Technologies, Inc. 15 ZOZOTOWNのシステム概要図 ※詳細は一部省略しています 検索機能のマイクロサービス実装後 新規に構築したマイクロサービス ZOZOTOWNの検索リクエストを処理する ※一部検索機能は除く
© ZOZO Technologies, Inc. 構築方法として2案を検討 1. リポジトリを丸々コピーしマイクロサービスを構築する方法 •
メリット ◦ リポジトリをコピーするため少ない作業量で短期間の本番リリースが可能 • デメリット ◦ 不要なAPIのコードが丸々残るため削除する作業が発生する ◦ SQL Serverの参照や、古くなっているライブラリ等もそのまま残るためバージョンアップが必要 2. 検索APIのみを切り出しマイクロサービスを構築する方式 • メリット ◦ Elasticsearchを参照する検索APIのみが実装されたマイクロサービスが構築できる ◦ コードのコピー・リファクタリングのタイミングで各種のバージョンアップが可能 • デメリット ◦ 1のパターンより作業量が多い 16
© ZOZO Technologies, Inc. どちらの方法で構築したか 検索APIのみを切り出し マイクロサービスを構築する • メリット
◦ Elasticsearchを参照する検索APIのみが実装されたマイクロサービスが構築できる ◦ コードのコピー・リファクタリングのタイミングで各種のバージョンアップが可能 • デメリット ◦ 1のパターンより作業量が多い 17
© ZOZO Technologies, Inc. 不要なAPIを取り除いたマイクロサービスを構築 技術的負債を抱えない 目先の開発工数を優先するのではなく、 技術的負債を含めないことを優先することで、今後の検索機能開発に集中できると考えた 18
© ZOZO Technologies, Inc. 検索機能のマイクロサービス構築時にやったこと • API実装 • 静的解析 •
ヘルスチェックの実装 • OSSライセンスチェック • リリース 19
© ZOZO Technologies, Inc. API実装 ユニットテストが書いてあると 安心して移植できる • API実装で行ったこと ◦
最初期に切り出したAPIは4本 → コードの大半を移植し、必要に応じて再実装した ◦ リファクタリングとユニットテストの拡充 • ユニットテスト ◦ 複雑な実装をしている部分は、ユニットテストのおかげで安心して移植できた ◦ ユニットテストを書くことは安定した品質につながり、改修作業が容易になると再認識 20
© ZOZO Technologies, Inc. 静的解析 コードの品質を保つ • コードの静的解析ツールとしてSonarCloudを利用し、コードの状態を可視化 • チームの取り組みとして、ユニットテストガイドラインを作成
21
© ZOZO Technologies, Inc. ヘルスチェックの実装 Elasticsearchの 複数エンドポイント対応 • 複数エンドポイントのElasticsearchで運用している ◦
Spring Boot ActuatorはElasticsearchの複数エンドポイントのヘルスチェックに対応していない → そのため独自のヘルスチェックを実装した 22
© ZOZO Technologies, Inc. OSSライセンスチェック 社内のOSS 利用ガイドラインを順守 ライセンス一覧を作成し、OSSを不正利用していないかをチェック 23 $
mvn license:add-third-party -D license.excludedScopes=test $ cat ./target/generated-sources/license/THIRD-PARTY.txt | sort > license.txt https://www.mojohaus.org/license-maven-plugin/add-third-party-mojo.html
© ZOZO Technologies, Inc. リリース 本番稼働しているAPIを 切り替えるのはとても大変 並行して別の開発案件も動いているため、 それらの合間をみて検索機能のマイクロサービスをリリース 24
© ZOZO Technologies, Inc. リリース時の取り組み • 比較テスト ◦ 既存の検索APIと新APIで実施
• 既存の検索APIに対する開発案件の差分取込 ◦ 毎週差分をチェック • カナリアリリース ◦ 検索APIは非常に大量のリクエストを受けるため、1度に全リクエストの切り替えはおこなわず、 カナリアリリースで段階的に切替えを実施 プログラムバグや、リリースミスなど無くAPIのリリースが完了 パフォーマンス劣化は無く、既存の検索APIと同等のパフォーマンスを実現 25
© ZOZO Technologies, Inc. 得られた効果 26
© ZOZO Technologies, Inc. 得られた効果 ・開発速度の向上 自チームでハンドリングできる マイクロサービスは意思決定が早く 開発速度がスピードUP •
定量的な測定ができていないため、定性的な評価になるが、開発速度が向上していることを実感 • 開発がやり易くなるような改善やリファクタリングをチームメンバーが自発的に実施 27
© ZOZO Technologies, Inc. 得られた効果 ・検索機能に特化したマイクロサービス 自チームでAPI開発が完結でき、 想定通りのパフォーマンスで安定稼 働 28
• パフォーマンスは既存マイクロサービスと同等 • ユニットテストによりコードの品質が安定的した
© ZOZO Technologies, Inc. まとめ Simple is the best 機能単位で特化することは重要
29 • 多くの役割を担うことなくシンプルに検索に特化することで得られる恩恵は十分にある • システム改修に柔軟に対応できる形へ分離したことで、更なる検索速度や精度改善に取り組む環境が整った
None