【エンボイ】

Envoy とは?

💡 マイクロサービスの「交通整理員」――通信の渋滞も事故も見逃さない
📌 このページのポイント
Envoy サイドカープロキシ Pod A サービスA アプリ Envoy プロキシ Pod B Envoy プロキシ サービスB アプリ mTLS暗号化通信 コントロールプレーン Istio / xDS API 設定配信 設定配信 負荷分散 リトライ サーキットブレーカー 可観測性
Envoyサイドカープロキシのイメージ
ひよこ ひよこ

Envoyってプロキシの一種なの?ふつうのプロキシとどう違うの?

ペンギン先生 ペンギン先生

ふつうのプロキシはユーザーとサーバーの間に立つけど、Envoyは「サービスとサービスの間」に立つプロキシだよ。マイクロサービスが何十個もあると、どのサービスにリクエストを振り分けるか・障害が起きたらどうするかを管理する必要があって、それを肩代わりしてくれるんだ

ひよこ ひよこ

サイドカーってどういう意味なの?

ペンギン先生 ペンギン先生

バイクの横に付けるサイドカーのイメージだよ。各マイクロサービスの「横」にEnvoyを1つずつ配置して、通信は全部Envoy経由にするんだ。アプリケーション自体は通信制御のことを気にしなくてよくなるから、開発者はビジネスロジックに集中できるんだよ

ひよこ ひよこ

Istioとの関係がよくわからないんだけど、別物なの?

ペンギン先生 ペンギン先生

IstioはEnvoyを束ねる「コントロールプレーン」で、Envoy自体は実際に通信を処理する「データプレーン」だよ。Istioが交通管制塔で、Envoyが各交差点に立つ交通整理員と考えるとわかりやすいね

ひよこ ひよこ

NginxやHAProxyでも同じことができるんじゃないの?

ペンギン先生 ペンギン先生

いい質問だね。NginxやHAProxyも優秀なプロキシだけど、Envoyの強みはxDS APIによる「動的設定」なんだよ。設定ファイルを書き換えて再起動する必要がなく、APIで即座にルーティングを変更できるんだ。何百ものサービスが動くクラスターでは、この動的制御能力が決定的な差になるよ

ひよこ ひよこ

EnvoyってC++で書かれてるって聞いたけど、パフォーマンスはそんなに重要なの?

ペンギン先生 ペンギン先生

すべての通信がEnvoyを経由するから、プロキシ自体が遅いとシステム全体のレイテンシが悪化するんだよ。C++で書かれているおかげで1リクエストあたりの追加遅延はサブミリ秒レベルに抑えられているんだ。ちなみにEnvoyはHTTP/2gRPCにもネイティブ対応していて、最近ではWasm拡張でフィルタをプラグイン的に追加できる仕組みも備えているよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Envoy」って出てきたら「マイクロサービスの通信を賢く仲介するプロキシ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Envoy」 = 使節・特使
💬 外交の「特使」のようにサービス間のメッセージを正確に届ける役割から名付けられたよ。Lyftの配車サービスで生まれた実戦派のプロキシなんだよ
← 用語集にもどる