DUICUO

数兆ものトラフィックを処理する百度の BFE 転送エンジンがオープンソース化されました。

BFE(百度フロントエンド)は、百度の統合7層トラフィック転送プラットフォームです。現在、BFEプラットフォームは百度のトラフィックの大部分を処理しており、1日あたり約1兆件のリクエストを転送し、ピーク時のQPSは1,000万を超えています。2019年の百度春節紅包キャンペーンでは、BFEプラットフォームは膨大なユーザー負荷と複数のトラフィックピークにも関わらずスムーズに動作し、イベントの成功を支えました。

包括的なトラフィック転送プラットフォームとして、BFE プラットフォームは次の 4 つの主要機能を統合しています。

  • トラフィック アクセスと転送: HTTP、HTTPS、HTTP/2、QUIC などの複数のプロトコルをサポートし、強力なアプリケーション層ルーティング機能もサポートします。
  • グローバル トラフィック スケジューリング: 外部ネットワーク トラフィック スケジューリングと内部ネットワーク トラフィック スケジューリングの両方で構成されるグローバル トラフィック スケジューリング システムをサポートします。
  • セキュリティと攻撃防止: ブラックリスト ブロック、きめ細かなレート制限、アプリケーション層ファイアウォール (WAF) などの複数の攻撃防止機能をサポートします。
  • リアルタイムデータ分析: 分単位での超高次元時系列レポートをサポートします。

BFE プラットフォームのコア コンポーネントである BFE 転送エンジンは、2012 年に開発が開始され、2014 年に Go 言語を使用してリファクタリングされました。

BFE は Go プログラミング言語をベースとしているため、広く使用されているオープンソース ソフトウェア Nginx と比較して、次のような利点があります。

  • 高い開発効率: Go の開発効率は C (および Lua) よりもはるかに高く、コードの保守性においても大きな利点があります。
  • このシステムは高いセキュリティと安定性を誇ります。Go 言語は C 言語特有のバッファ オーバーフローのリスクを回避し、多くの安定性とセキュリティのリスクを軽減します。さらに、例外をキャッチできるため、プログラムが急速に反復され、展開されている場合でもクラッシュしません。

長期的には、高水準プログラミング言語をベースとしたソフトウェアシステムが徐々に競争優位性を獲得していくと考えられる理由があります。CPUなどのハードウェアリソースの価格は急速に低下し続ける一方で、開発コスト、プロジェクト開発リスク、システムの安定性/セキュリティといった要素が、意思決定においてより重要な考慮事項となるでしょう。この観点から見ると、C言語をベースとするNginxは徐々に衰退し、BFEなどの高水準プログラミング言語をベースとしたソフトウェアが徐々に主流となるでしょう。

さらに、BFE はエンタープライズ レベルのアプリケーション シナリオを考慮して設計されました。

  • 転送シナリオの直接サポート: Web サーバーからプロキシに進化した Nginx とは異なり、BFE は転送シナリオに直接設計されており、転送モデルと構成の点で転送シナリオのニーズをより適切に満たします。
  • マルチテナントサポート:クラウドコンピューティングのシナリオでは、マルチテナントの再利用が一般的な要件となります。BFEの設計には、マルチテナントサポートが組み込まれています。
  • 構造化された構成: BFE の構成設計では、JSON などの構造化されたメソッドを広範に使用しており、関連する構成管理システムとの統合が容易になります。
  • 広範な監視プローブ:産業グレードのソフトウェアであるBFEは、オンライン監視のニーズを徹底的に考慮して設計されています。BFEプログラムは、数千もの内部状態変数をHTTP経由で公開します。

負荷分散技術の交換と開発を促進するために、BFE 転送エンジンは 2019 年夏に正式にオープンソース化されました。

BFE は現在オープンソースであり、次の重要な機能をサポートしています。

1. 主流のネットワークプロトコルによるアクセス

  • HTTP/HTTPS/SPDY/HTTP2/WebSocketなどをサポートします。
  • TLS/HTTP/WebSocketリバースプロキシモードをサポート

2. 拡張可能なプラグインフレームワーク

  • 拡張可能なプラグイン フレームワークにより、特定のビジネス ニーズを満たすカスタマイズされた拡張モジュールを迅速に開発できます。
  • 書き換え、リダイレクト、トラフィック変更、ブロックなどの豊富なプラグインが組み込まれています

3. コンテンツベースのリクエストルーティング

  • ドメイン固有言語に基づくトラフィック分割ルールは、複雑なビジネス シナリオのカスタマイズされたトラフィック転送ニーズを満たします。
  • リクエスト コンテンツ (URI/ヘッダー/Cookie など) とリクエスト コンテキスト (IP、プロトコル、タグ、時間など) に基づく条件プリミティブを含む、トラフィック分割条件プリミティブの完全なセットをサポートします。

4. 柔軟な負荷分散戦略

  • クラスターレベルおよびインスタンスレベルの負荷分散をサポートし、マルチアベイラビリティゾーンの災害復旧と過負荷保護を可能にします。
  • 加重ラウンドロビンと加重最小接続戦略が組み込まれており、IP アドレスまたはリクエスト コンテンツに基づいてユーザーを識別することでセッションの永続性を実現します。

BFE オープンソース バージョンの詳細と今後のロードマップについては、関心のあるユーザーはフォローすることをお勧めします。

BFE は https://github.com/baidu/bfe で見つけるか、GitHub にログインして直接 BFE を検索することでも見つかります。