バージョンアップ情報
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のライセンス
Envoyのライセンスは、 「Apacheライセンスバージョン2」(Apache License version2)というライセンスに基づいて公開され、営利、非営利を問わず、 誰でも自由かつ無償で利用・改変・再配布できるようになっています。
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。