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