トップ OSS紹介 Envoy

Envoy

サポート対象

NRIのOpenStandiaが提供するEnvoy最新情報

バージョンアップ情報

Envoy情報

Envoyとは

Envoy(エンヴォイ)はクラウドネイティブなWebサービスのために設計されたL4/L7両機能を持つ高機能なプロキシソフトウェアです。

Envoyは、急速に普及したマイクロサービスの分散システム構築・運用を安定させるため2015年5月にライドシェアサービスのLyftが開発を始めました。

Envoyは、C++で実装されており、開発はAmazonやTwitterにも在籍したことがあり、10年以上分散システムに携わってきた配管工(Plumber)ことMatt Klein(マットクライン)氏を中心に行われました。

2016年9月にはEnvoy 1.0をオープンソースとしてリリースされ、2017年9月にはIncubatingプロジェクトとしてCloud Network Computing Foundation(CNCF)(※1)に参加し、2018年11月にはKubernetesやFluentdなどと同様のGraduatedプロジェクトとして認定されました。

Envoyは、次のような信念から開発されています。

"ネットワークはアプリケーションに対して透過的でなければなりません。それにより、ネットワークおよびアプリケーションの問題が発生した場合、問題の原因を簡単に特定できるはずです。"

実際には、この目標を達成することは困難ですが、これを高いレベルで実現させるためにEnvoyは様々な機能を提供しています。

Envoyはマイクロサービスに対応するため、サービス間のネットワーク制御をライブラリとしてではなく、ネットワークプロキシとして提供することを目的に開発されました。これにより個々のサービスはEnvoyを経由してそれぞれのサービスへ接続します。これはネットワークを抽象化して、アプリケーション開発者をビジネスロジックに集中できるようにするという目標のために行われていることです。
例えば、Envoyを利用したアーキテクチャでは、アプリケーションと同じホスト上にEnvoyを構築します。Kubernetesなどでは、Envoyを各アプリケーションのサイドカーコンテナとしてデプロイします。これにより、各サービスは別のサービスを直接参照するのではなくEnvoyを経由することになります。
サイドカーとして立てられたEnvoyは、各サービスのIPアドレスなどを知っており、アプリケーション自体が別のサービスのIPアドレスを知らなくても問題はなくなります。
これにより、サービスの通信経路やIPアドレスが変更になった場合でも、Envoyの設定を更新するのみで、アプリケーションに手を加える必要がなくなります。
このようにして、Envoyはアプリケーションからのネットワークの切り離しを実現しています。

また、Envoyでは豊富で使いやすいネットワーク機能をクラウドネイティブアプリケーションに提供するため、アプリケーションレイヤー(L7)に焦点を当てて開発を行っています。
HTTPやgRPCのサポートに加え、Redis、Thrift、MongoDB、DynamoDBなどその他多くの機能をサポートしています。

(※1) CNCF:クラウドネイティブアプリケーション開発・運用環境に関する技術の標準化やオープンソースプロジェクトを推進している団体。

主な機能

Envoyの主な機能は以下の通りです。

L3/L4フィルターアーキティクチャ

プラガブルフィルタチェインメカニズムにより様々なTCP/UDPプロキシタスクを実行するためのフィルタを作成することが出来ます。フィルタはTCPプロキシ、UDPプロキシ、HTTPプロキシ、TLSクライアント証明書認証、Redis、MongoDB、Postgresなどをサポートします。

HTTP L7フィルターアーキティクチャ

EnvoyはHTTP L7フィルターレイヤーをサポートしています。HTTPフィルタはバッファリング、レート制限、ルーティング/フォワーディング、Amazon DynamoDBのスニッフィングのような様々なタスクをサポートします。

HTTP/2サポート

HTTPモードで動作している場合、EnvoyはHTTP/1.1とHTTP/2の両方をサポートします。これにより双方向で透過的なHTTP/1.1からHTTP/2プロキシとして動作します。

HTTP/3 サポート(現在はアルファ版)

HTTP/3のアップストリーム、ダウンストリームをサポートし、HTTP/1.1、HTTP/2、HTTP/3の任意の組み合わせに変換可能です。

HTTP L7ルーティング

HTTPモードで動作している場合、ルーティングやパスに基づくリダイレクトリクエスト、認証、コンテンツタイプ、ランタイム値などルーティングサブシステムをサポートします。

gRPCサポート

EnvoyはgRPCリクエスト/レスポンスのルーティングおよび負荷分散の基盤として使用する必要のあるHTTP/2機能全てをサポートしています。

サービスディスカバリーとダイナミックコンフィグレーション

EnvoyはオプションとしてDNSを介してバックエンドホストの検出を行うことが出来ます。またxDS APIを使用してEnvoy内の設定を動的に更新することも可能です。

ヘルスチェック

Envoyにはオプションでアップストリームサービスクラスタへのヘルスチェックサブシステムが含まれています。
またサービスディスカバリーとヘルスチェック情報を使用して健全なロードバランシングも提供しています。

高度な負荷分散

自己完結型のプロキシとして、コンポーネント間の高度な負荷分散を実施可能です。自動リトライ、サーキットブレイク、グローバルレート制限、リクエストシャドウイング、および外れ値検出などをサポートします。

フロント/エッジプロキシサポート

HTTPリクエストヘッダやパスに応じた通信経路の設定や複数経路の重み付けでロードバランシングも可能です。そのため、Blue-Greenデプロイやカナリアリリースに必要な機能が備わっています。

最高クラスの観測性

ダウンストリーム、アップストリーム、Envoyサーバーインスタンスに関して様々な統計情報を提供します。統計は管理ポートから表示可能です。また、サードパーティプロバイダを利用した分散トレースもサポートします。

(参考:https://www.envoyproxy.io/docs/envoy/v1.22.2/intro/what_is_envoy

主な特徴

Envoyの主な特徴は以下の通りです。

ハイパフォーマンス

スループットとレイテンシーの両面に関して優れたパフォーマンスを発揮するように設計されています。

信頼性

Envoyプロジェクトは品質と信頼性を非常に重視しています。テストカバレッジから厳密なコードレビューまで、重要なワークロードに対して信頼できる製品を構築することを目標としています。

最新のコードベース

C++ 11で記述されているため、生産性とパフォーマンスのバランスが取れています。

拡張性

多数の拡張ポイントがあり、コアソフトウェア設計の整合性と普遍性を損なうことなく、様々なエンドユースケースに適応させることが可能です。

最高クラスの観測性

ネットワークをアプリケーションに対して透過的にすることを目標としているため、ネットワークの統計情報などから問題が発生した原因を効率的に特定することが可能です。

豊富な構成API

前世代のネットワークプロキシとは異なり、Envoyは明確に指定された下位互換性のあるタイプセーフAPIを使用して、データとコントロールプレーンを完全に分離し、一元的かつ動的に設定されるように作成されています。

コミュニティファーストな開発

主なEnvoyプロジェクトには商用版はありません。これにより商業的なビジネスモデルと競合することがなくなり、コミュニティはテクノロジーファーストな開発を行うことができています。

アウトオブプロセスアーキテクチャ

Envoyは全てのアプリケーションサーバと一緒に実行するように設計された自己完結型のプロセスです。
各アプリケーションがホストと透過的な通信メッシュを形成するため、ネットワークトポロジを必要としません。

高度な負荷分散

Envoyは自己完結型のプロキシであるため、高度な負荷分散技術を1箇所に実装すれば、あらゆるアプリケーションからアクセスすることが出来ます。

ユースケース

Envoyは現在多くのクラウド企業のサービスで採用されています。大手企業ではGoogle、Amazon、IBM、Microsoftなどがあり、日本国内でもCookpad、Yahoo! JAPANなどで採用されています。

動作環境

Envoyプロジェクトには、amd64アーキテクチャとarm64アーキテクチャの両方に対応するビルド済Dockerイメージが多数提供されており利用することが可能です。

また、Get Envoyプロジェクトは、多くの人気のあるディストリビューションに対応するために、多数のバイナリが用意されています。

macOSの場合は、brewを使用してネイティブにインストールすることも可能です。

また、Ubuntu、Windows 上でソースからビルドする方法も公開されています。

Envoyのライセンス

Envoyのライセンスは、 「Apacheライセンスバージョン2」(Apache License version2)というライセンスに基づいて公開され、営利、非営利を問わず、 誰でも自由かつ無償で利用・改変・再配布できるようになっています。

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • Linkerd
    サポート対象

    Linkerd

    リンカード。Kubernetes向けのオープンソースのサービスメッシュです。

  • Istio
    サポート対象

    Istio

    イスティオ。マイクロサービスをセキュアにマネージメントするためのマイクロサービス管理フレームワークです。

  • Cilium
    サポート対象

    Cilium

    Ciliumは、カーネル技術eBPFを利用した、コンテナワークロード間のネットワーク接続を提供、保護、監視するためのオープンソースソフトウェアで、クラウドネイティブです。

オープンソースに関する様々な課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。