Member-only story
DropboxをNginxからEnvoyにマイグレーションする方法(第一章)
今回はDropboxをNginxからEnvoyにマイグレーションするやり方をご説明します。今回の記事は長いので6回に分けてお送ります。今回は1回目です。
このブログ記事では、旧来の Nginx ベースのトラフィックインフラストラクチャとその問題点、そして Envoyへの移行によって得られたメリットについてお話しします。Nginx と Envoy をソフトウェアエンジニアリングや運用面で比較します。また、マイグレーションプロセスや現在の状況、途中で起こった問題点についても簡単に触れます。
Dropbox のトラフィックの大半を Envoy に移行する際には、すでに数千万のオープン接続、毎秒数百万のリクエスト、テラビットの帯域幅を処理しているシステムをシームレスに移行しなければなりませんでした。これにより、私たちは事実上、世界最大級の Envoy ユーザーとなりました。
免責事項:客観性を保つようにしていますが、これらの比較のかなりの部分はDropboxと私たちのソフトウェア開発方法に特有のものです:Bazel、gRPC、C++/Golangに賭けています。
また、これは追加機能のある商用版ではなく、オープンソース版のNginxを対象としています。
1.Our legacy Nginx-based traffic infrastructure
私たちのNginxのコンフィグレーションはほとんどが静的で、Python2、Jinja2、YAMLの組み合わせでレンダリングされていました。これを変更するには、完全に再デプロイすることが必要でした。アップストリーム管理や統計情報のエクスポートなどのダイナミックな部分はすべてLuaで書かれています。十分に複雑なロジックは、Goで書かれた次のプロキシレイヤーに移されました。
私たちの投稿「Dropbox のトラフィックインフラ。エッジネットワ ーク」には、レガシーな Nginx ベースのインフラストラクチャについて のセクションがあります。
Nginxは10年近くもの間、私たちに十分な機能を提供してくれましたが、現在の開発のベストプラクティスには適応しませんでした。
・内部および(プライベートの)外部APIは徐々にRESTからgRPCに移行しており、プロキシからのあらゆる種類のトランスコード機能を必要としています。
・プロトコルバッファは、サービスの設定とコンフィグレーションのための事実上の標準となりました。
・言語に関係なく、すべてのソフトウェアはBazelでビルドされ、テストされています。
・オープンソースコミュニティの重要なインフラプロジェクトに当社のエンジニアが積極的に参加しています。
また、運用面でもNginxはメンテナンスにかなりのコストがかかっていました。