Envoy とは?

Envoy

Envoy最新情報

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

OSSの保守サポートサービスの内容はこちら OSSの導入については、こちらのフォームからお問い合わせ下さい OSS全般の事例紹介はこちら

Envoyバージョンアップ情報

すべてを見る

更新日:2022-08-23

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

TOPに戻る

Envoyの主な特徴

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

ハイパフォーマンス スループットとレイテンシーの両面に関して優れたパフォーマンスを発揮するように設計されています。
信頼性 Envoyプロジェクトは品質と信頼性を非常に重視しています。テストカバレッジから厳密なコードレビューまで、重要なワークロードに対して信頼できる製品を構築することを目標としています。
最新のコードベース C++ 11で記述されているため、生産性とパフォーマンスのバランスが取れています。
拡張性 多数の拡張ポイントがあり、コアソフトウェア設計の整合性と普遍性を損なうことなく、様々なエンドユースケースに適応させることが可能です。
最高クラスの観測性 ネットワークをアプリケーションに対して透過的にすることを目標としているため、ネットワークの統計情報などから問題が発生した原因を効率的に特定することが可能です。
豊富な構成API 前世代のネットワークプロキシとは異なり、Envoyは明確に指定された下位互換性のあるタイプセーフAPIを使用して、データとコントロールプレーンを完全に分離し、一元的かつ動的に設定されるように作成されています。
コミュニティファーストな開発 主なEnvoyプロジェクトには商用版はありません。これにより商業的なビジネスモデルと競合することがなくなり、コミュニティはテクノロジーファーストな開発を行うことができています。
アウトオブプロセスアーキテクチャ Envoyは全てのアプリケーションサーバと一緒に実行するように設計された自己完結型のプロセスです。
各アプリケーションがホストと透過的な通信メッシュを形成するため、ネットワークトポロジを必要としません。
高度な負荷分散 Envoyは自己完結型のプロキシであるため、高度な負荷分散技術を1箇所に実装すれば、あらゆるアプリケーションからアクセスすることが出来ます。

TOPに戻る

Envoyの機能

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

TOPに戻る

Envoyのユースケース

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

TOPに戻る

Envoyの動作環境

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

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

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

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

TOPに戻る

Envoyのライセンス

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

TOPに戻る

参考情報

Envoy公式サイト
Envoyのインストール方法

TOPに戻る

Envoyのサポート

NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。

TOPに戻る

OpenStandiaに関する
資料請求・お問い合わせはこちら

  • 資料請求
  • お問い合わせ

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

  • OpenStandiaサポート対象オープンソース|50種類以上のOSSのサポートをご提供します。
  • 人気midPoint
  • 人気Keycloak
  • 注目MongoDB
  • ForgeRock AM(OpenAM)
  • ForgeRock IDM(OpenIDM)
  • MongoDB
  • Postfix
  • Apache HTTP Server
  • ZABBIX
  • PostgreSQL
  • Apache Struts
  • Apache Kafka
  • Apache Hadoop
  • Apache Spark
  • Spring Framework
  • Apache Tomcat
  • Solr
  • iBATIS
  • DRBD
  • MySQL
  • JBoss
  • Ruby on Rails
  • Jaspersoft
  • OpenLDAP
  • Apache log4j
  • Apache Subversion
  • ForgeRock DS(OpenDJ)
  • Pacemaker
  • Samba
  • Red Hat Enterprise Linux
  • Nginx
  • BIND
  • Dovecot
  • Pentaho
  • sendmail
  • Courier-IMAP
  • ForgeRock DS(OpenDJ)
  • Heartbeat
  • Hibernate
  • Hinemos
  • MyBatis
  • MySQL Cluster
  • Apache Axis2
  • Squid
  • OpenSSO