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

ZOZO Tech Meetup ZOZOTOWN 検索機能のマイクロサービス化への取り組み ...

TomohiroKani
July 29, 2021
4.5k

ZOZO Tech Meetup ZOZOTOWN 検索機能のマイクロサービス化への取り組み / ZOZO Tech Meetup ZOZOTOWN Search Microservice

TomohiroKani

July 29, 2021
Tweet

Transcript

  1. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 EC基盤本部 検索基盤部
 検索基盤チーム 2 可児

    友裕
 2017年4月にスタートトゥデイ工務店(現ZOZOテクノロジー ズ)に中途入社。ZOZOTOWNのバックエンド開発を経てリプ レイスプロジェクトに参加、現在は検索機能のバックエンド開 発に従事し、検索機能のマイクロサービス化を担当。

  2. © ZOZO Technologies, Inc. https://zozo.jp/
 • 日本最大級のファッション通販サイト
 • 1,400以上のショップ、8,200以上のブランドの取り扱い(ともに2021年3月 末時点)


    • 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商品 を掲載
 • コスメ専門モール「ZOZOCOSME」や靴の専門モール
 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン
 「ZOZOVILLA」を展開
 • 即日配送サービス
 • ギフトラッピングサービス
 • ツケ払い など
 3
  3. © ZOZO Technologies, Inc. 検索機能をマイクロサービス化する前の課題
 1. 開発 ◦ 1つのマイクロサービスに非常に多くのAPIが存在していた ▪

    リプレイスを進めるにつれマイクロなサービスではなくなり、 検索機能もそこに含まれていた ◦ 把握していないAPIや共通処理があり、開発コストがかさんでいた ◦ SQL ServerとElasticsearchを参照していた 2. 保守・運用 ◦ 別チームが主管 ▪ 機能追加や改修の際はレビュー・リリース依頼をしていた ▪ 自チームのみで完結できる開発作業でも連携が必要だった ▪ 改修のマージ・リリースタイミングを自由にハンドリングできなかった ◦ 障害発生時 ▪ 原因調査が広域に及ぶため、切り分けが難しく複数チームが調査にあたっていた
 10
  4. © ZOZO Technologies, Inc. 検索機能に特化したマイクロサービスを構築する目的
 • 開発速度を向上させる
 ◦ 検索基盤チームが主管である検索APIのみのため、精通したAPIの開発に集中できる
 →開発・改修・リリースに掛かるサイクルの短縮が見込める


    ◦ チャレンジングな実装の場合でも、スムーズな意思決定が可能となる
 
 • 検索機能に特化したマイクロサービスを開発する
 ◦ バックエンドはElasticsearchのみとする
 12
  5. © ZOZO Technologies, Inc. 構築方法として2案を検討
 
 
 1. リポジトリを丸々コピーしマイクロサービスを構築する方法
 •

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


    ◦ Elasticsearchを参照する検索APIのみが実装されたマイクロサービスが構築できる
 ◦ コードのコピー・リファクタリングのタイミングで各種のバージョンアップが可能
 • デメリット
 ◦ 1のパターンより作業量が多い
 
 
 17
  7. © ZOZO Technologies, Inc. 検索機能のマイクロサービス構築時にやったこと
 • API実装
 • 静的解析
 •

    ヘルスチェックの実装
 • OSSライセンスチェック
 • リリース
 19
  8. © ZOZO Technologies, Inc. API実装
 ユニットテストが書いてあると
 安心して移植できる
 • API実装で行ったこと
 ◦

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

    Spring Boot ActuatorはElasticsearchの複数エンドポイントのヘルスチェックに対応していない
   → そのため独自のヘルスチェックを実装した
 22
  10. © 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
  11. © ZOZO Technologies, Inc. リリース時の取り組み
 • 比較テスト
 ◦ 既存の検索APIと新APIで実施
 


    • 既存の検索APIに対する開発案件の差分取込
 ◦ 毎週差分をチェック
 
 • カナリアリリース
 ◦ 検索APIは非常に大量のリクエストを受けるため、1度に全リクエストの切り替えはおこなわず、 カナリアリリースで段階的に切替えを実施
 プログラムバグや、リリースミスなど無くAPIのリリースが完了
 パフォーマンス劣化は無く、既存の検索APIと同等のパフォーマンスを実現
 25
  12. © ZOZO Technologies, Inc. 得られた効果
 ・開発速度の向上
 自チームでハンドリングできる
 マイクロサービスは意思決定が早く
 開発速度がスピードUP
 •

    定量的な測定ができていないため、定性的な評価になるが、開発速度が向上していることを実感
 • 開発がやり易くなるような改善やリファクタリングをチームメンバーが自発的に実施
 27
  13. © ZOZO Technologies, Inc. 得られた効果
 ・検索機能に特化したマイクロサービス
 自チームでAPI開発が完結でき、
 想定通りのパフォーマンスで安定稼 働
 28

    • パフォーマンスは既存マイクロサービスと同等
 • ユニットテストによりコードの品質が安定的した

  14. © ZOZO Technologies, Inc. まとめ
 Simple is the best
 機能単位で特化することは重要


    
 29 • 多くの役割を担うことなくシンプルに検索に特化することで得られる恩恵は十分にある
 • システム改修に柔軟に対応できる形へ分離したことで、更なる検索速度や精度改善に取り組む環境が整った