Envoy えんぼい
Envoyとは
Envoy(エンボイ)は、米Lyft社が2016年に開発しオープンソースとして公開した、高性能なL4/L7プロキシ(ネットワークの中継役)です。もともとLyftの巨大なマイクロサービス基盤を安定させるために作られたもので、現在はCloud Native Computing Foundation(CNCF)のプロジェクトとして多くの企業に採用されています。
Envoyの最大の特徴は「サイドカーパターン」での動作です。各マイクロサービスのコンテナの隣に小さなプロキシとして配置され、アプリ本体のコードをまったく変更せずに、通信の監視・ロードバランシング・リトライ・サーキットブレーカーといった複雑な通信制御を肩代わりします。つまり、アプリ開発者はビジネスロジックだけに集中できる、という分業体制を実現するソフトウェアです。
実務の場面では、IstioやAWS App Meshなどのサービスメッシュ(マイクロサービス間通信を統合管理する仕組み)のデータプレーン(実際に通信を処理する部分)として採用されることが多く、「Envoy単体」よりも「サービスメッシュの中心エンジン」として触れるケースが大半です。
Envoyの主な機能・構造
| 機能カテゴリ | 内容 | 実務上の効果 |
|---|---|---|
| ロードバランシング | ラウンドロビン・最小リクエスト数・ランダムなど複数方式 | リクエストを複数サーバーに均等分散 |
| サーキットブレーカー | 障害サービスへの通信を一時遮断 | 障害の連鎖(カスケード障害)を防止 |
| リトライ・タイムアウト | 失敗リクエストの自動再試行・待ち時間制限 | 一時的な障害を自動回復 |
| TLS終端 | 暗号化通信(HTTPS)の処理を代行 | サービス間通信の暗号化を自動化 |
| オブザーバビリティ | メトリクス・トレース・ログを自動収集 | 通信の可視化・障害原因の特定 |
| トラフィック制御 | カナリアリリース・A/Bテスト向けルーティング | リスクを抑えた段階的デプロイ |
サイドカーパターンの覚え方
「側車(サイドカー)付きバイク」をイメージしてください。バイク本体がマイクロサービス(アプリ)、横の側車がEnvoyです。バイクが走る(アプリが動く)ための通信のコントロールは全部サイドカーに任せて、ライダーはハンドルだけ握ればいい、という構造です。
xDS APIとは
Envoyの設定はxDS API(x Discovery Service API)という仕組みで動的に更新できます。サービスが増減しても、Envoyを再起動せずにリアルタイムで設定が反映されるため、大規模な本番環境でも安全に使えます。IstioなどのコントロールプレーンがこのxDS APIを通じてEnvoyを制御します。
歴史と背景
- 2015年頃 — 米Lyft社の急拡大するマイクロサービス基盤で通信管理が限界に。既存のプロキシ(HAProxy・NGINXなど)では動的設定変更・可観測性が不十分と判断
- 2016年9月 — Lyftがオープンソースとして公開。L7プロキシとして高い注目を集める
- 2017年9月 — CNCF(Cloud Native Computing Foundation)に寄贈。ガバナンスがオープンになり企業採用が加速
- 2018年 — Googleが主導するIstio 1.0がリリース。EnvoyをデータプレーンとしてデフォルトCNCF採用。一気に業界標準の地位へ
- 2019年〜 — AWS App Mesh・Consul Connect・Kuma・OSMなど多数のサービスメッシュ実装がEnvoyを採用
- 2021年以降 — エッジプロキシ(Envoy Gateway)やAPIゲートウェイ用途への展開が加速。用途が大幅に拡大
サービスメッシュ内でのEnvoyの位置づけ
サービスメッシュは「コントロールプレーン(司令塔)」と「データプレーン(実際に通信する部分)」に分かれます。Envoyはデータプレーンを担当します。
Envoyと他のプロキシの比較
| 比較項目 | Envoy | NGINX | HAProxy |
|---|---|---|---|
| 主な用途 | サービスメッシュ・サイドカー | Webサーバー・リバースプロキシ | TCPロードバランサー |
| 動的設定 | ◎ xDS APIで無停止変更 | △ reload必要 | △ reload必要 |
| L7プロキシ | ◎ HTTP/2・gRPC対応 | ◎ | ○ |
| オブザーバビリティ | ◎ 組み込みで豊富 | △ 別途設定要 | △ 別途設定要 |
| サービスメッシュ採用 | ◎ 業界標準 | △ | × |
| 設定の複雑さ | △ やや複雑 | ◎ シンプル | ○ |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 7540 | HTTP/2(EnvoyがネイティブサポートするHTTPプロトコル) |
| RFC 9114 | HTTP/3(Envoyが対応を進めている次世代HTTPプロトコル) |
| RFC 8446 | TLS 1.3(EnvoyのmTLS通信に利用されるTLS規格) |
| RFC 7231 | HTTP/1.1セマンティクス(Envoyが処理するHTTPの基本仕様) |
関連用語
- サービスメッシュ — マイクロサービス間通信を統合管理する仕組み全体のこと
- Istio — EnvoyをデータプレーンとするOSSのサービスメッシュ実装
- サイドカーパターン — アプリの横に補助機能を持つプロセスを配置する設計パターン
- マイクロサービス — 機能を小さなサービス単位に分割するアーキテクチャ
- ロードバランシング — 複数サーバーにリクエストを分散する技術
- サーキットブレーカー — 障害が連鎖しないよう通信を一時遮断するパターン
- Kubernetes — コンテナオーケストレーションプラットフォーム。Envoyは主にKubernetes上で動作する
- APIゲートウェイ — 外部からのAPIアクセスを一元管理する入口サーバー。Envoy Gatewayとして利用可能