Facebook Web サイトの速度は、企業にとって最も重要なタスクの 1 つとしてランク付けされています。 2009 年には、Facebook ウェブサイトの速度を 3 倍にすることに成功しました。そしてそれを可能にするのは、当社のエンジニア チームによるいくつかの重要なイノベーションです。この記事では、私たちの秘伝のソースの 1 つであるBigPipeと呼ばれる優れた基盤テクノロジーを紹介します。
BigPipe は、再設計された基本的な動的 Web サービス システムです。一般的なアイデアは、Web ページをページレットと呼ばれる小さな部分に分割し、Web サーバーとブラウザを介してパイプラインを構築して、さまざまな段階での実行を管理することです。これは、最新のマイクロプロセッサのパイプライン実行プロセスに似ています。最適なパフォーマンスを達成するために、複数の命令パイプラインが異なるプロセッサ実行ユニットを通過します。 BigPipe は既存のサービス ネットワーク インフラストラクチャ プロセスを再設計したものですが、既存の Web ブラウザやサーバーを変更する必要はなく、完全に PHP と JavaScript を使用して実装されます。
モチベーション
BigPipe をよりよく理解するには、既存の動的 Web サービス システムを見てみる必要があります。その歴史は World Wide Web の初期に遡りますが、現在では初期と比べてあまり変わっていません。最新の Web サイトは 10 年前に比べてはるかに動的な効果と対話性を備えていますが、従来の Web サービス システムは長い間、今日のインターネット速度要件に追いつくことができませんでした。従来のモデルでは、ユーザー リクエストのライフ サイクルは次のとおりです。
多くのシステムの操作シーケンスが互いに重複できないため、従来のモデルは現代の Web サイトでは非常に非効率的です。 JavaScript の遅延読み込みや並列ダウンロードなどの最適化手法は、制限の一部を克服するためにオンライン コミュニティで広く採用されています。ただし、これらの最適化では、Web サーバーとブラウザの実行順序によって引き起こされるボトルネックが解決されることはほとんどありません。 Web サーバーがページの生成で忙しい間、ブラウザはアイドル状態になり、何もせずにサイクルを無駄にします。 Web サーバーがページの生成を完了してブラウザに送信すると、ブラウザがパフォーマンスのボトルネックとなり、Web サーバーは役に立ちません。 Web サーバーの生成時間とブラウザーのレンダリング時間をオーバーラップさせることで、最終的な遅延時間を短縮できるだけでなく、Web ページがユーザーに見える領域をより早くユーザーに表示できるようになり、ユーザーの遅延の知覚を大幅に軽減できます。
これは、Web サーバーの生成時間がブラウザのレンダリング時間と重なる Facebook のようなコンテンツが豊富なサイトで特に役立ちます。一般的な Facebook Web ページには、友人リスト、友人の更新情報、広告など、さまざまなソースからのデータが含まれています。従来の Web ページ レンダリング モードでは、ユーザーはこれらのクエリ データが返され、最終ファイルが生成されてユーザーのコンピュータに送信されるまで待つ必要がありました。クエリに遅延があると、最終的なファイル生成全体が遅くなります。
BigPipe の仕組み
Web サーバーとブラウザー間の並列性を利用するために、BigPipe はまず Web ページを複数の呼び出し可能なページレットに分割します。パイプライン マイクロプロセッサが命令のライフ サイクルを複数の段階 (「命令フェッチ」、「命令デコード」、「実行」、「レジスタへの書き戻し」など) に分割するのと同じように、BigPipe のページ生成プロセスは次のように分割されます。次の段階:
出典: isd