Slide 1

Slide 1 text

ZOZOTOWN 検索機能の
 マイクロサービス化への取り組み
 ZOZO Tech Meetup
 〜マイクロサービス化に取り組む、16年目のZOZOTOWN〜
 株式会社ZOZOテクノロジーズ
 EC基盤本部 検索基盤部 
 検索基盤チーム
 可児 友裕 Copyright © ZOZO Technologies, Inc.

Slide 2

Slide 2 text

© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 EC基盤本部 検索基盤部
 検索基盤チーム 2 可児 友裕
 2017年4月にスタートトゥデイ工務店(現ZOZOテクノロジー ズ)に中途入社。ZOZOTOWNのバックエンド開発を経てリプ レイスプロジェクトに参加、現在は検索機能のバックエンド開 発に従事し、検索機能のマイクロサービス化を担当。


Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

© ZOZO Technologies, Inc. アジェンダ
 ● はじめに
 ● なぜ検索機能をマイクロサービス化したか
 ● どのように構築したか
 ● 得られた効果
 
 4

Slide 5

Slide 5 text

© ZOZO Technologies, Inc. はじめに
 5

Slide 6

Slide 6 text

© ZOZO Technologies, Inc. https://techblog.zozo.com/entry/zozotown-search-microservice
 本内容はZOZO Tech Blog に記載した内容のスライド形式での発表になります


Slide 7

Slide 7 text

© ZOZO Technologies, Inc. ● 本日話すこと
 ○ ZOZOTOWNで利用しているマイクロサービスか ら、検索APIを切り出し検索機能に特化したマイク ロサービスを構築した話
 
 7 ZOZOTOWN 検索ページ
 主に検索ページで利用される
 マイクロサービスを構築しました


Slide 8

Slide 8 text

© ZOZO Technologies, Inc. なぜ検索機能を
 マイクロサービス化したか
 8

Slide 9

Slide 9 text

© ZOZO Technologies, Inc. 9 ZOZOTOWNのシステム概要図 ※詳細は一部省略しています
 検索機能をマイクロサービス化する前
 出典:ZOZOTOWN検索機能のマイクロサービス化への取り組み(https://techblog.zozo.com/entry/zozotown-search-microservice)


Slide 10

Slide 10 text

© ZOZO Technologies, Inc. 検索機能をマイクロサービス化する前の課題
 1. 開発 ○ 1つのマイクロサービスに非常に多くのAPIが存在していた ■ リプレイスを進めるにつれマイクロなサービスではなくなり、 検索機能もそこに含まれていた ○ 把握していないAPIや共通処理があり、開発コストがかさんでいた ○ SQL ServerとElasticsearchを参照していた 2. 保守・運用 ○ 別チームが主管 ■ 機能追加や改修の際はレビュー・リリース依頼をしていた ■ 自チームのみで完結できる開発作業でも連携が必要だった ■ 改修のマージ・リリースタイミングを自由にハンドリングできなかった ○ 障害発生時 ■ 原因調査が広域に及ぶため、切り分けが難しく複数チームが調査にあたっていた
 10

Slide 11

Slide 11 text

© ZOZO Technologies, Inc. 課題をどうにかしたい
 検索機能に特化した
 マイクロサービスを構築しよう
 11

Slide 12

Slide 12 text

© ZOZO Technologies, Inc. 検索機能に特化したマイクロサービスを構築する目的
 ● 開発速度を向上させる
 ○ 検索基盤チームが主管である検索APIのみのため、精通したAPIの開発に集中できる
 →開発・改修・リリースに掛かるサイクルの短縮が見込める
 ○ チャレンジングな実装の場合でも、スムーズな意思決定が可能となる
 
 ● 検索機能に特化したマイクロサービスを開発する
 ○ バックエンドはElasticsearchのみとする
 12

Slide 13

Slide 13 text

© ZOZO Technologies, Inc. どのように構築したか
 13

Slide 14

Slide 14 text

© ZOZO Technologies, Inc. 14 ZOZOTOWNのシステム概要図 ※詳細は一部省略しています
 検索機能をマイクロサービス化する前
 再掲


Slide 15

Slide 15 text

© ZOZO Technologies, Inc. 15 ZOZOTOWNのシステム概要図 ※詳細は一部省略しています
 検索機能のマイクロサービス実装後
 新規に構築したマイクロサービス
 ZOZOTOWNの検索リクエストを処理する ※一部検索機能は除く


Slide 16

Slide 16 text

© ZOZO Technologies, Inc. 構築方法として2案を検討
 
 
 1. リポジトリを丸々コピーしマイクロサービスを構築する方法
 ● メリット
 ○ リポジトリをコピーするため少ない作業量で短期間の本番リリースが可能
 ● デメリット
 ○ 不要なAPIのコードが丸々残るため削除する作業が発生する
 ○ SQL Serverの参照や、古くなっているライブラリ等もそのまま残るためバージョンアップが必要
 
 2. 検索APIのみを切り出しマイクロサービスを構築する方式
 ● メリット
 ○ Elasticsearchを参照する検索APIのみが実装されたマイクロサービスが構築できる
 ○ コードのコピー・リファクタリングのタイミングで各種のバージョンアップが可能
 ● デメリット
 ○ 1のパターンより作業量が多い
 16

Slide 17

Slide 17 text

© ZOZO Technologies, Inc. どちらの方法で構築したか
 検索APIのみを切り出し
 マイクロサービスを構築する
 
 ● メリット
 ○ Elasticsearchを参照する検索APIのみが実装されたマイクロサービスが構築できる
 ○ コードのコピー・リファクタリングのタイミングで各種のバージョンアップが可能
 ● デメリット
 ○ 1のパターンより作業量が多い
 
 
 17

Slide 18

Slide 18 text

© ZOZO Technologies, Inc. 不要なAPIを取り除いたマイクロサービスを構築
 技術的負債を抱えない
 目先の開発工数を優先するのではなく、
 技術的負債を含めないことを優先することで、今後の検索機能開発に集中できると考えた
 18

Slide 19

Slide 19 text

© ZOZO Technologies, Inc. 検索機能のマイクロサービス構築時にやったこと
 ● API実装
 ● 静的解析
 ● ヘルスチェックの実装
 ● OSSライセンスチェック
 ● リリース
 19

Slide 20

Slide 20 text

© ZOZO Technologies, Inc. API実装
 ユニットテストが書いてあると
 安心して移植できる
 ● API実装で行ったこと
 ○ 最初期に切り出したAPIは4本
    → コードの大半を移植し、必要に応じて再実装した
 ○ リファクタリングとユニットテストの拡充
 
 ● ユニットテスト
 ○ 複雑な実装をしている部分は、ユニットテストのおかげで安心して移植できた
 ○ ユニットテストを書くことは安定した品質につながり、改修作業が容易になると再認識
 
 20

Slide 21

Slide 21 text

© ZOZO Technologies, Inc. 静的解析
 コードの品質を保つ
 ● コードの静的解析ツールとしてSonarCloudを利用し、コードの状態を可視化
 ● チームの取り組みとして、ユニットテストガイドラインを作成
 21

Slide 22

Slide 22 text

© ZOZO Technologies, Inc. ヘルスチェックの実装
 Elasticsearchの
 複数エンドポイント対応
 ● 複数エンドポイントのElasticsearchで運用している
 ○ Spring Boot ActuatorはElasticsearchの複数エンドポイントのヘルスチェックに対応していない
   → そのため独自のヘルスチェックを実装した
 22

Slide 23

Slide 23 text

© 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

Slide 24

Slide 24 text

© ZOZO Technologies, Inc. リリース
 本番稼働しているAPIを
 切り替えるのはとても大変
 並行して別の開発案件も動いているため、
 それらの合間をみて検索機能のマイクロサービスをリリース
 24

Slide 25

Slide 25 text

© ZOZO Technologies, Inc. リリース時の取り組み
 ● 比較テスト
 ○ 既存の検索APIと新APIで実施
 
 ● 既存の検索APIに対する開発案件の差分取込
 ○ 毎週差分をチェック
 
 ● カナリアリリース
 ○ 検索APIは非常に大量のリクエストを受けるため、1度に全リクエストの切り替えはおこなわず、 カナリアリリースで段階的に切替えを実施
 プログラムバグや、リリースミスなど無くAPIのリリースが完了
 パフォーマンス劣化は無く、既存の検索APIと同等のパフォーマンスを実現
 25

Slide 26

Slide 26 text

© ZOZO Technologies, Inc. 得られた効果
 26

Slide 27

Slide 27 text

© ZOZO Technologies, Inc. 得られた効果
 ・開発速度の向上
 自チームでハンドリングできる
 マイクロサービスは意思決定が早く
 開発速度がスピードUP
 ● 定量的な測定ができていないため、定性的な評価になるが、開発速度が向上していることを実感
 ● 開発がやり易くなるような改善やリファクタリングをチームメンバーが自発的に実施
 27

Slide 28

Slide 28 text

© ZOZO Technologies, Inc. 得られた効果
 ・検索機能に特化したマイクロサービス
 自チームでAPI開発が完結でき、
 想定通りのパフォーマンスで安定稼 働
 28 ● パフォーマンスは既存マイクロサービスと同等
 ● ユニットテストによりコードの品質が安定的した


Slide 29

Slide 29 text

© ZOZO Technologies, Inc. まとめ
 Simple is the best
 機能単位で特化することは重要
 
 29 ● 多くの役割を担うことなくシンプルに検索に特化することで得られる恩恵は十分にある
 ● システム改修に柔軟に対応できる形へ分離したことで、更なる検索速度や精度改善に取り組む環境が整った
 


Slide 30

Slide 30 text

No content