コンテンツに移動
データベース

Waze、Memorystore で 1 秒あたり 100 万件以上のリアルタイム読み取りでトラフィックの流れを維持

2025年11月21日
https://storage.googleapis.com/gweb-cloudblog-publish/images/Waze-Memorystore-Hero.max-2500x2500.png
Eden Levin

Waze BE infra developer

Yuval Kamran

Waze SRE

Try Gemini 3

Our most intelligent model is now available on Vertex AI and Gemini Enterprise

Try now

※この投稿は米国時間 2025 年 11 月 15 日に、Google Cloud blog に投稿されたものの抄訳です。

編集者注: Google の親会社である Alphabet の一部門である Waze は、コアとなるナビゲーション機能を強化するために、膨大な量の動的なリアルタイムのユーザー セッション データを活用しています。しかし、世界中の同時ユーザーをサポートするためにデータをスケーリングするには、新しいアプローチが必要でした。同社のチームは、次によって裏打ちされたセッション サーバーを構築しました:Memorystore for Redis Cluster は、99.99% の可用性を備えたフルマネージド サービスで、部分的な更新をサポートし、1 秒あたり 100 万件を超える MGET コマンドを約 1 ミリ秒のレイテンシで処理するという Waze のユースケースに合わせて簡単にスケーリングできます。このアーキテクチャは、Waze のバックエンドの継続的なモダナイゼーションの基盤となります。


リアルタイム データが Waze アプリのエクスペリエンスを支えています。Google のターンバイターン方式のナビゲーション、事故によるルート変更、ドライバーへのアラートは、ミリ秒単位の精度に依存しています。しかし、数百万の同時セッションでシームレスなエクスペリエンスを維持するには、ユーザー セッション データの膨大なストリームを管理するように構築された、堅牢で実戦に耐えるインフラストラクチャが必要です。これには、アクティブなナビゲーション ルート、ユーザーの位置情報、ドライバーのレポートなどが含まれ、これらは数秒で表示され、変化する可能性があります。

一方舞台裏では、ユーザー セッションという頻繁に更新される大規模で複雑なオブジェクトがあり、非常に大量の読み取り / 書き込みオペレーションに寄与しています。セッション データはかつて、モノリシック サービスにロックされ、単一のバックエンド インスタンスに緊密に結合されていました。そのため、スケーリングが難しく、他のマイクロサービスがリアルタイムのセッション状態にアクセスできませんでした。これをモダナイズするには、これらのセッションをリアルタイムで、またグローバル規模で処理できる、低レイテンシの共有ソリューションが必要でした。Memorystore for Redis Cluster でそれが可能になりました。

適切なルートの選択

Google では、マイクロサービス ベースのバックエンドへの移行を計画するにあたり、Redis Enterprise Cloud、セルフマネージドの Redis クラスタ、Memorystore デプロイによる既存の Memcached の継続使用など、さまざまな選択肢を評価しました。従来のセットアップでは、Memcached はモノリシックなリアルタイム(RT)サーバーの背後にセッション データを保存していましたが、求めていたレプリケーション、高度なデータ型、部分更新機能がありませんでした。Redis には必要な機能が備わっていることはわかっていましたが、自社で管理したり、サードパーティ プロバイダを通じて管理したりすると、運用上のオーバーヘッドが増加します。

Memorystore for Redis Cluster は、両方の利点を兼ね備えています。Google Cloud のフルマネージド サービスである Cloud Spanner は、Waze のリアルタイムの需要を満たすパフォーマンス、スケーラビリティ、レジリエンスを備えています。これで 99.99% の SLA と、水平スケーリングのためのクラスタ化されたアーキテクチャが得られます。データベースの決定後、二重書き込みアプローチを使用して、Memcached から Memorystore for Redis への慎重な移行を計画しました。データパリティが確認されるまで、両方のシステムが並行して更新されました。その後、ダウンタイムなしで Redis に切り替えました。

Waze の新しいデータエンジン

そこから、Memorystore for Redis Cluster のラッパーとして、アクティブなユーザー セッションの新しいコマンドセンターである集中型セッション サーバーを構築しました。このサービスは、すべてのアクティブなユーザー セッションの信頼できる唯一の情報源となり、セッションデータとモノリシックな RT サーバー間の緊密な結合に代わるものとなりました。セッション サーバーはシンプルな gRPC API を公開するため、移行中の RT を含め、任意のバックエンド マイクロサービスがセッション状態を直接読み書きできます。これにより、クライアント アフィニティが不要になり、すべてのセッション トラフィックを単一のサービス経由でルーティングする必要がなくなり、プラットフォーム全体でセッション データにアクセスできるようになりました。

Google は、レジリエンスとスケーラビリティを考慮してシステムをゼロから設計しました。Redis のクラスタリングとシャーディングにより、単一の競合ポイントが排除され、需要の増加に応じて水平方向にスケーリングできます。組み込みのレプリケーションと自動フェイルオーバーにより、セッションをオンラインに保つように設計されています。ノードの交換により、短期間だけ障害発生率とレイテンシが一時的に増加する可能性がありますが、セッションはオンライン状態を維持するように設計されているため、ナビゲーション エクスペリエンスはすぐに安定します。 また、モバイル クライアントから任意のバックエンド サービスへの直接 gRPC 呼び出しをサポートすることで、より柔軟な設計パターンを使用しながら、リアルタイム パスから貴重なミリ秒を削減できます。

少ないピットストップで高速動作

Memcached の 99.9% の SLA から Memorystore for Redis Cluster の 99.99% に移行することで、サービスの可用性と復元性が向上します。負荷テストでは、新しいアーキテクチャが本番環境のトラフィック全体を維持できることが証明されました。1 秒あたり最大 100 万件の MGET コマンドのバーストを、1 ミリ秒未満の安定したサービス レイテンシで快適に処理できます。

Memorystore for Redis は部分的な更新をサポートしているため、レコード全体を書き換えるのではなく、セッション オブジェクト内の個々のフィールドを変更できます。これにより、ネットワーク トラフィックが削減され、書き込みパフォーマンスが向上し、システム全体の効率が向上します。これは、セッションのサイズが数メガバイトにまで拡大する可能性がある場合に特に重要です。こうした効率化により、エンジニアリング チームはアプリケーション レベルのパフォーマンスと新機能の開発に注力する時間を増やすことができます。

Memorystore for Redis Cluster のセッションデータは、構成の評価からドライバーへのリアルタイム更新のトリガーまで、Waze のコア機能に不可欠なものとなっています。現在の需要に対応し、将来の需要にも対応できるように構築されています。

今後の展望

Waze の最も重要なパスの一つで Memorystore for Redis Cluster を実証したことで、プラットフォーム全体で他の高スループット キャッシュ シナリオでも使用できるという自信が生まれました。一元化されたセッション サーバーとクラスタ化された Redis アーキテクチャは、現在ではバックエンドの標準的な構成要素となっており、ゼロから始めることなく新しいサービスに適用できます。

最初のクリティカル パスが完了したため、次の主な焦点は、残りのすべてのレガシー セッション管理を RT サーバーから移行することです。この結果、最終的にはすべてのマイクロサービスがセッションデータを更新するために独立してアクセスできるようになります。今後については、Memorystore for Redis Cluster をスケーリングして将来のユーザー増加に対応し、費用とパフォーマンスの両面で微調整することにも注力しています。

詳細

Waze の事例は、大規模なリアルタイム ワークロード向けに 99.99% の可用性を備えたフルマネージド サービスである Memorystore for Redis Cluster のパワーと柔軟性を示しています。

-Waze BE インフラ デベロッパー、Eden Levin 氏

-Waze SRE、Yuval Kamran 氏

投稿先