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

ZOZOTOWNを支える検索パーソナライズ基盤 / zozotech_gcp_01

ZOZOTOWNを支える検索パーソナライズ基盤 / zozotech_gcp_01

Yu Kodama

June 22, 2020
Tweet

Other Decks in Technology

Transcript

  1. © ZOZO Technologies, Inc. アジェンダ
 2 • ZOZOTOWN検索パーソナライズとは
 • プロジェクト体制


    • アーキテクチャ概要
 • アーキテクチャ設計の検証
 • Elasticsearch (Elastic Cloud) について
 

  2. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 技術開発本部 SRE部 MLOpsチーム
 児玉 悠

    (@dama_yu)
 3 • 2019年11月入社
 ◦ 累計リモート出社日数がオフィス出社日数を上回ってしまった
 • 検索パーソナライズとかレコメンドのSRE担当
 • 前職はフリマアプリの会社でMLエンジニア
 

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


    • 常時73万点以上の商品アイテム数と毎日平均3,200点以上の新着 商 品を掲載
 • 即日配送サービス
 • ギフトラッピングサービス
 • ツケ払い など
 4
  4. © ZOZO Technologies, Inc. ZOZOTOWN 検索パーソナライズとは
 5 これ • ZOZOTOWNの検索結果のパーソナライズPJ


    • ユーザの行動履歴や属性を元に
 パーソナライズされた
 おすすめ順を新規追加
 • Web でリリース済み。
 

  5. © ZOZO Technologies, Inc. プロジェクト体制
 6 • 幕張オフィス
 ◦ 推薦基盤チーム


    ▪ 検索パーソナライズ基盤のバックエンド全般
 ▪ プロジェクトマネジメント
 ◦ 分析部
 ▪ パーソナライズロジックの作成、効果測定・分析
 ◦ リプレイスチーム
 ▪ ZOZOTOWN本体へのバックエンドの繋ぎこみ
 • 青山オフィス
 ◦ MLOps
 ▪ インフラ全般
 

  6. © ZOZO Technologies, Inc. 7 Web (PC) Web (SP) パーソナライズ

    API Elasticsearch 商品メタデータ生 成 オンプレDB BigQuery インデクシング バッチ 商品マスタ ユーザステータ ス生成 ユーザ情報管理 商品情報管理 Front API アーキテクチャ全体 (ざっくり)
 7
  7. © ZOZO Technologies, Inc. 8 AWS Cloud Bigtable Front API

    Dedicated Interconnect Cloud SQL Cloud Memorystore Cloud Dataflow ユーザ情報 ルール ユーザ情報のキャッシュ Personalize API Kubernetes Engine 分析部管理 BigQuery GitHub Actions on: schedule パーソナライズ基盤 リプレイス チーム管理 once / day r w GitHub Actions on: pull_request w アーキテクチャ詳細 (ユーザ情報部分)
 8
  8. © ZOZO Technologies, Inc. 9 SQL Server リプレイス チーム管理 アーキテクチャ詳細

    (商品情報部分)
 分析部管理 Cloud Dataflow BigQuery SQL Server レプリケーション CDC Kafka 更新差分 BigQuery Master BigQuery マスターデータ 商品特徴量 JOIN ElasticCloud Elasticsearch (ElasticCloud) Cloud SQL App Engine 状態管理 cron SQL Server 9
  9. © ZOZO Technologies, Inc. アーキテクチャ設計の検証
 10 リリース前の設計段階で、検証の結果、以下の変更を行った。
 
 1. API

    のインフラ: Cloud Run → GKE
 2. ユーザ情報更新バッチの定期実行: Cloud Scheduler + Cloud Functions → GitHub Actions
 3. ESインデクシングバッチ: Cloud Dataflow → App Engine

  10. © ZOZO Technologies, Inc. APIインフラ: Cloud Run → GKE への変更


    11 • Cloud Run とは
 ◦ GCP のフルマネージドなサーバーレスコンテナプラットフォーム
 • システム要件
 ◦ private IP でサービスを提供できること
 ▪ GAEは public IPになってしまうのでNG
 • Cloud Run の検証
 ◦ 以下の理由で 「Nリクエストに1回は 20secかかる」現象が発生
 ▪ Cloud Run はリクエストが来たら、pod が起動し、しばらくしたら停止
 ▪ Javaコンテナの立ち上がりが遅く、20secほどかかる
 ◦ これにより、今回のプロジェクトでの採用は断念し、GKEを採用
 

  11. © ZOZO Technologies, Inc. バッチの定期実行: Cloud Scheduler + Cloud Functions


    → GitHub Actions 
 12 • 当初、ユーザ情報更新バッチ(Dataflow)は、
 Cloud Scheduler + Cloud Functions で定期実行をする予定だったが、
 プロジェクトの CI/CD で用いていた、GitHub Actions (on schedule) へ変更
 • GHA の シンプルな yaml ファイル定義のみで設定可能

  12. © ZOZO Technologies, Inc. ESインデクシングバッチ: Cloud Dataflow → App Engine


    13 • 元々、Elasticsearch のインデックスを作成する部分は Dataflow だった
 • しかし Apache Beam が最新のES version に対応していないことが判明
 • 結局 App Engine で自前で書いたバッチを Cron で動かしている

  13. © ZOZO Technologies, Inc. Elasticsearch (Elastic Cloud) について
 14 •

    Elastic Cloud の紹介
 • ここがウレシイよElastic Cloud
 • ここがツライよElastic Cloud
 • Elasticsearch の監視方法
 • Elasticsearch の運用について
 

  14. © ZOZO Technologies, Inc. Elasticsearch (Elastic Cloud) について
 15 •

    Elastic 社 が提供する Elasticsaerch のマネージドサービス

  15. © ZOZO Technologies, Inc. ここがウレシイよElastic Cloud
 16 • マネージドサービスなので運用が楽
 ◦

    運用移管もアカウントの受け渡しだけでOK
 • 選択可能な Elastic stack の version が AWS Elasticsearch Service より新しい
 ◦ 2020/05 現在 AWS: 7.4, Elastic Cloud: 7.7
 • Elastic社公式のテクニカルサポート
 • Elastic Cloud Consoleから参照できるメトリクスの種類が多い
 ◦ 検索/インデックスレート、レイテンシ、ガベージコレクションカウントと期間、
 スレッドプールなどなど

  16. © ZOZO Technologies, Inc. ここがツライよElastic Cloud
 17 • 細かくインスタンスタイプを選べない
 •

    Node数の増減をしようとした時に失敗することがある
 • 同じノードに複数のコンテナが乗って、I/Oを持っていかれることがある
 • Elastic Cloud の操作APIがなく、Infrastructure as Code 化できなかった
 ◦ → Elastic Cloud Control (ecctl) APIが公開されたので使用予定
 • 問い合わせのコンソール画面が本体と別ログインで、アカウント人数制限あり

  17. © ZOZO Technologies, Inc. Elasticsearch の監視
 18 • Elastic Cloud

    (Elasticsearch) の監視には Datadog (dashboard, monitor)を使用
 ◦ Datadog Dashboard: 各メトリクスの状況を一覧で見るのに使用
 ▪ 主に見ているのは query/sec, CPU使用率など
 
 
 
 
 
 
 

  18. © ZOZO Technologies, Inc. Elasticsearch の監視
 19 • Elastic Cloud

    (Elasticsearch) の監視には Datadog (dashboard, monitor)を使用
 ◦ Datadog monitor: 閾値アラートの設定に使用
 
 
 
 
 
 

  19. © ZOZO Technologies, Inc. Elasticsearch の運用について
 20 • 運用上の作業で最も多いのはES の

    Node 数変更
 ◦ セールなどのキャンペーンごとに、過去の負荷傾向から Node数を見積もる
 ◦ 基本はキャンペーン前日までにES運用担当がNode 数の変更
 ▪ Elastic Cloud 本体だけでなく、関連するインデクシングバッチの
 設定も変更する必要がある
 • 最近、検索周りのインフラを一貫して見ることができるように
 MLOps → リプレイスチームへ運用を移管した