Uberは、リモート・プロシージャ・コール(RPC)を通じて多数のサービスが疎結合に相互作用するマイクロサービス・アーキテクチャの複雑さに対処するため、CheckEnvという新しいツールを開発した。このツールは、データの不整合や予期しない動作などの望ましくない結果につながる可能性がある、本番環境とステージング環境などの異なる環境間をまたぐ RPCコールを迅速に検出し、対処するように設計されている。
CheckEnvは、サービス間コールを表す依存関係グラフを利用し、通信パターンと依存関係についての洞察を提供する。この可視化は、クロス環境RPCコールをピンポイントで特定するのに役立つ。このシステムは、高度なグラフ分析技術を採用して検出プロセスを自動化し、このような問題を迅速に解決するために、これらの機能をUberの監視および警告システムに統合している。
このツールには、リアルタイムと集約された依存関係グラフの両方が組み込まれている。リアルタイムのグラフは継続的に更新され、重要なメトリクスを取得し、サービスの依存関係における潜在的な問題を特定する。一方、集約されたグラフは、サービスの相互作用の履歴的な視点を提供し、長期にわたるシステム・パフォーマンスの分析を支援する。
CheckEnvは、Uber内の2つのグラフ・データ・ストレージ・システム、GrailとLocal Graph上で動作する。これらのプラットフォームは、コールグラフデータを集約して保存し、CheckEnvは、サービスの依存関係や本番依存関係につながるパスなどの情報にアクセスして取得するためのAPIを提供する。このセットアップにより、異常の特定、問題のトラブルシューティング、マイクロサービス・アーキテクチャの最適化の能力が強化される。
CheckEnvのアプリケーションの例として、Uberの合成負荷テストプラットフォームBallastがある。ここでは、負荷テスト中の潜在的なクロス環境コールを検出し、潜在的な問題がエスカレートする前にユーザーに警告することで、安全で信頼性の高いテスト環境を確保している。
Uberは今後、CheckEnvとその基盤となるデータ取り込みパイプラインMazeXの機能を拡張し、より強力なグラフを構築する計画だ。この拡張は、サービス間の通信パターンを分析するシステムの能力を強化し、データの流れを最適化し、サービスの効率を向上させることを目的としている。このグラフベースのアプローチは、リアルタイムの障害検出やワークフロー管理など、マイクロサービス・アーキテクチャ内のさまざまな課題に対処することが期待されている。