🔨

AWSからGoogle Cloudへ移行する際にマイクロサービス化に取り組んだ話

2024/07/29に公開

はじめに

  • こんにちは。ミスミグループ本社 Gateway推進本部のshimozonoです。検索システムの開発を担当しています。
  • 先日、弊社ECサイトの検索エンジンのバックエンドの一部(以下、ベクトル検索基盤と呼びます)を、AWSからGoogle Cloudへ移行しました。
  • この記事では、その移行において取り組んだマイクロサービス化についてご紹介します。

移行前の構成

移行前のベクトル検索基盤はAWS上で構築されており、以下のような構成でした。

システム構成図(移行前)

移行前システム構成図

  • API Gateway
    • クライアントからのリクエストを受け付け、SageMakerへ振り分け。
  • SageMakerリアルタイム推論
    • 検索エンジン。APサーバ兼DBとして機能している。
    • S3に格納された推論モデルや商品情報を加工したデータをメモリ上へ読み込む。
    • リクエストを受け付けると、推論モデルを使って推論処理を行い、結果を返す。
  • ECR
    • SageMakerのコンテナイメージを格納。
  • S3
    • Step Functionsで作成した、商品情報を加工したデータを格納。
  • Step Functions
    • バッチ処理を実行。商品情報を加工したデータをS3へ保存する。

課題と解決策

移行前のベクトル検索基盤では以下のような課題がありました。

課題1

  • SageMakerで構築した推論モデルでは、複数の属性を全てまとめて評価しているため、クエリによって属性値の重み付けを動的に変更することが難しい。

課題2

  • SageMakerがAPサーバ兼DBとして機能しているため、DBを更新するためには、SageMakerのコンテナを再起動する必要がある。
  • 大容量の商品データをメモリへ読み込んでいるため、再起動に時間がかかる。

課題1の解決策

  • 課題1を解決するために、ベクトル検索基盤の主要サービスをAWS SageMakerからGoogle CloudのVertex AI Vector Searchへ移管することを決定しました。
    • Vertex AI Vector Searchは、近似最近傍探索のベンチマークである ANN-Benchmarks において、現在最も優れた性能を持つScaNNアルゴリズムを提供し、高速な検索が可能です。
    • またこの近似最近傍探索のアルゴリズムにより、複数の属性を個別に評価し、属性毎の重み付けが可能になります。
    • これら2つのポイントが選定の決め手になりました。

課題2の解決策

  • また、核となるサービスをVertex AI Vector Searchにすることから、周辺サービスも全てGoogle Cloudへ移管し、合わせてマイクロサービス化に取り組みました。
    • APサーバは運用しやすいフルマネージドなサーバレスコンテナ実行環境であるCloud Runを採用しました。また、主要な処理ごとにをサーバ分割をすることで、オートスケール時のコンテナ起動時間を短縮しました。
    • DBはVertex AI Vector SearchとMemorystore for Redisの構成とし、DB更新の容易さとレイテンシの最小化を図りました。

移行後の構成

Google Cloudへ移行後のベクトル検索基盤の構成は以下の通りです。

システム構成図(移行後)

移行後システム構成図

  • Cloud Load Balancing
    • ロードバランサ。クライアントサーバからのリクエストを受け付け、サーバレスバックエンドサービスのCloud Runへ振り分け。
  • Cloud Armor
    • WAF。不正なリクエストをブロック。細やかなルール設定が可能。
  • Cloud Run
    • APサーバ。推論処理、リランキング処理を行う。
    • サーバレスでスケーラブルなコンテナ実行環境。リクエストの処理中のみ課金される課金体系もあり、比較的低コストでの運用が可能。
  • Artifact Registry
    • Cloud Runのコンテナイメージを格納。
  • Vertex AI Vector Search
    • 検索エンジン。インデックスデータをエンドポイントへデプロイしている。
    • 近似最近傍探索(ANN)を行い、意味的に類似または関連するアイテムから検索を行う。
  • Memorystore for Redis
    • インメモリDB。リランキング処理用データ、商品情報データを格納。
  • Workflows
    • バッチ処理を実行。商品情報を加工したデータをMemorystore for RedisやVertex AI Vector Searchへ保存する。
    • Cloud RunジョブやCloud Functionsを組み合わせて、複数のDB更新処理を行う。

移行して良かったこと

  • 移行後の基盤では以下のような良かった点がありました。

  • 良かった点1:検索速度の向上

    • ベクトル検索基盤の主要サービスをVertex AI Vector Searchに移管したことで、トータル検索速度が向上しました。
  • 良かった点2:DB更新が容易

    • SageMakerがAPサーバ兼DBとして機能していた課題が解消され、DB更新が容易になりました。
  • 良かった点3:コンテナ起動時間の短縮

    • APサーバのオートスケール時のコンテナ起動時間が短縮されました。
  • 良かった点4:運用費用の削減

    • 移行後は運用費が約30%削減されました。
  • 良かった点5:アーキテクチャの拡張性向上

    • マイクロサービス化したことにより、新機能開発や既存機能の改修がしやすくなりました。

移行にあたり苦労したこと

  • 逆に、移行にあたり苦労した点もありました。
  • 苦労した点1:検索結果データの整合性
    • SageMakerからVertex AI Vector Searchへのデータ移行において、検索結果データの整合性を保つことが難しかったです。
  • 苦労した点2:Vertex AI Vector Searchの仕様への理解
    • 新しく、Vertex AI Vector Searchを導入したため、仕様の理解に時間がかかりました。
    • ドキュメントから読み取りづらい仕様もあり、サポートに問い合わせることも多かったです。
  • 苦労した点3:バッチ処理の移行
    • Step FunctionsからWorkflowsへのバッチ処理の移行において、今回、複数のDB更新処理を行うため、バッチ処理の設計や実装において工夫が必要でした。

おわりに

  • 今回は、AWSからGoogle Cloudへ移行する際に取り組んだマイクロサービス化についてご紹介しました。移行を検討している方にとって、参考になる情報があれば幸いです。
  • 私たちと一緒に検索エンジンの開発をしていきたい方、インフラ自動化に興味がある方、ぜひお気軽にご連絡ください!中途採用も随時募集しております。
ミスミ DataTech ブログ

Discussion