定義
Envoyは、クラウドネイティブなアプリケーション向けに設計された、オープンソースの高性能なL7(アプリケーション層)プロキシおよび通信バスである。C++で記述されており、マイクロサービスアーキテクチャにおけるサービス間通信の制御、可観測性の確保、ネットワークの抽象化を目的として開発された。
背景
マイクロサービスアーキテクチャの普及に伴い、サービス間の通信経路が複雑化する課題が生じた。従来のハードウェアロードバランサや単一のゲートウェイでは、個別のサービスごとの詳細なトラフィック制御や、動的なサービスディスカバリへの対応が困難であった。Envoyは、各サービスにサイドカーとして配置されるプロキシとして設計され、ネットワークの複雑性をアプリケーション層から分離するために誕生した。
技術的仕組みと構造
Envoyのアーキテクチャは、以下の要素で構成される。
- リスナー(Listeners): 外部からの接続を受け付けるポートとプロトコルを定義する。
- フィルタ(Filters): リスナーで受け取ったデータに対して、HTTPヘッダーの操作や認証、ルーティングなどの処理を行う。
- クラスター(Clusters): 通信先のサービス群を定義し、ロードバランシングやヘルスチェックの設定を管理する。
- xDS API: 制御プレーンから動的に設定を更新するためのAPI群である。これにより、再起動なしでルーティングルールやエンドポイント情報を変更できる。
Envoyは、非同期I/Oモデルを採用しており、高いスループットと低いレイテンシを実現している。また、gRPCやHTTP/2、TCPなど多様なプロトコルをネイティブにサポートしている。
具体例
Envoyの代表的な利用形態は、サービスメッシュにおけるデータプレーンとしての役割である。Istioなどのサービスメッシュ基盤において、各コンテナの隣にEnvoyがサイドカーとして配置される。これにより、アプリケーションコードを変更することなく、相互TLS(mTLS)による暗号化、リトライ処理、サーキットブレーカー、詳細なメトリクス収集が自動的に適用される。
IT業界における重要性
Envoyは、現代の分散システムにおけるネットワーク通信の標準化を推進している。その重要性は以下の点に集約される。
- ネットワークの抽象化: アプリケーション開発者がネットワークの複雑な制御を意識することなく、ビジネスロジックに集中できる環境を提供する。
- 可観測性の向上: 通信の全トラフィックに対して一貫したログ出力、トレース情報の付与、メトリクス収集を行うことで、システム全体の可視化を可能にする。
- エコシステムの基盤: CNCF(Cloud Native Computing Foundation)の卒業プロジェクトとして、多くのクラウドプラットフォームやサービスメッシュ製品の標準コンポーネントとして採用されている。


コメント