Member-only story
DropboxをNginxからEnvoyにマイグレーションする方法(第五章)
今回はDropboxをNginxからEnvoyにマイグレーションするやり方をご説明します。今回の記事は長いので6回に分けてお送ります。今回は5回目です。
Features
ここからは、この記事の中で最も独断的な部分になります。
Nginxは、リソースの消費を最小限に抑えた静的ファイルの配信に特化したウェブサーバーとしてスタートしました。その機能は、静的ファイルの提供、キャッシング(thundering herd protectionを含む)、レンジキャッシングなど、最高レベルのものです。
しかし、プロキシ側では、Nginx は最新のインフラに必要な機能を欠いています。バックエンドへの HTTP/2 はありません。 gRPC プロキシは利用できますが、接続の多重化はありません。gRPC トランスコーディングはサポートされていません。その上、Nginx の “オープンコア” モデルは、オープンソース版のプロキシに搭載できる機能を制限しています。その結果、統計情報のような重要な機能のいくつかは “community” バージョンでは利用できません。
対照的に、Envoy は ingress/egress プロキシとして進化しており、gRPC を多用する環境で頻繁に使用されています。そのウェブサービス機能は初歩的なもので、ファイルサービスはなく、作業中のキャッシュもなく、 brotliも事前圧縮もしていません。これらのユースケースのために、小さなフォールバック用のNginxセットアップを用意しており、Envoyはアップストリームクラスタとして使用しています。
EnvoyのHTTPキャッシュが運用可能になれば、長期保存用のファイルシステムの代わりにS3を使用して、静的サービスのユースケースのほとんどをキャッシュに移行することができます。eCacheの設計については、”eCache: a multi-backend HTTP cache for Envoy “を参照してください。
Envoyはまた、多くのgRPC関連機能をネイティブに対応しています。
・gRPC プロキシ。これは基本的な機能で、私たちのアプリケーション(例:Dropboxデスクトップクライアント)にエンドツーエンドでgRPCを使用することが可能になりました。
・バックエンドへのHTTP/2。この機能により、トラフィック層間の TCP 接続数を大幅に削減し、メモリ消費量とキープアライブトラフィックを削減することができます。
・gRPC → HTTPブリッジ(+リバース) これらにより、最新のgRPCスタックを使用してレガシーなHTTP/1アプリケーションをエクスポーズすることができました。
・gRPC-WEB。この機能により、ミドルボックス(ファイアウォールやIDSなど)がHTTP/2にまだ対応していない環境でも、gRPCをエンドツーエンドで利用できるようになりました。