なぜ「HTTPパイプライン化」は消えたのか?―Webの渋滞とHead-of-Line Blockingの正体
こんにちは!インフラエンジニアとして日々ネットワークの深淵を覗いている筆者です。
今日は、Web通信の歴史の中でも、特に「野心的なのに、なぜか不遇だった」技術、HTTP/1.1の「パイプライン化(Pipelining)」についてお話ししましょう。
「リクエストをまとめて送れば速くなるのでは?」という直感から生まれたこの技術。しかし、現代のWebブラウザでは、実はこの機能はほぼ無効化されています。一体、現場のネットワークで何が起きていたのでしょうか?
一歩ずつ、身近な例えで紐解いていきましょう。
—
1. パイプライン化とは?「郵便配達」でイメージしてみよう
HTTP/1.1以前の通信は、まるで「一問一答」のやりとりでした。
- あなた:「手紙をください」
- サーバー:「はい、どうぞ(手紙を渡す)」
- あなた:「あ、もう一通追加でください」
- サーバー:「はい、どうぞ(手紙を渡す)」
これだと、往復の時間がかかるたびに待ち時間が発生してしまいますよね。そこで登場したのがパイプライン化です。
「返事を待たずに、リクエストをどんどんポストに投函しちゃおう!」というのがこの仕組みの正体です。
1. 「手紙Aください」
2. 「手紙Bください」
3. 「手紙Cください」
(一度にまとめてポストへ!)
これなら、サーバー側も忙しく動いて、準備ができた順に返事を返してくれるはず……そう思われていました。しかし、ここにWeb通信特有の「落とし穴」があったのです。
—
2. 悪夢の「Head-of-Line Blocking(先頭行のブロック)」
パイプライン化が直面した最大の壁、それがHead-of-Line Blocking(先頭行のブロック)です。
想像してみてください。あなたはレストランで「カレー」「サラダ」「デザート」を注文しました。パイプライン化では、これらを一気に注文します。しかし、サーバー(厨房)は「注文を受けた順番通りに」料理を出し切らなければならないというルールがありました。
もし、「カレー」の調理にものすごく時間がかかったらどうなるでしょう?
- カレー(調理中…まだできない)
- サラダ(できているのに、カレーのせいで出せない!)
- デザート(準備万端なのに、カレーのせいで出せない!)
結果として、「一番前のカレーのせいで、後ろの料理まで全部ストップしてしまう」という渋滞が発生するのです。ネットワークの世界では、これが「パケットの待ち行列」として起きていました。たった一つの重い画像データが詰まるだけで、その後に続く軽快なテキストデータまで全て「お預け」を食らってしまうのです。
—
3. なぜ現代のブラウザでは使われていないのか?
この「先頭行のブロック」問題に加え、サーバー側の実装が複雑になりすぎてしまったことも致命的でした。
例えば、多くのWebサーバー(ApacheやNginxなど)では、パイプライン化されたリクエストを正しく処理するために、以下のような負荷がかかります。
現代のサーバー設定例
keepalive_requests 100; # 接続を維持してリクエストを再利用する設定
keepalive_timeout 65; # 接続を切るまでの時間
※パイプライン化が有効だと、サーバー側で順序を守るためのメモリ消費が激増します
実装が難しく、少しでもバグがあれば通信が切断される。さらに、結局「渋滞」は解消されない。結局、Google ChromeやFirefoxなどの主要ブラウザは、この機能を「あえて使わない」という選択をしました。
「リクエストをまとめて送る」というアイデアは間違いではありませんでしたが、「順番を厳守せよ」というHTTP/1.1の縛りが、現代の高速なWebには窮屈すぎたのです。
—
4. そして「HTTP/2」へ――革命の時代
この「パイプライン化の挫折」を乗り越えるために生まれたのが、HTTP/2です。
HTTP/2では、「ストリーム」という概念を導入しました。これは、一つの通信路(コネクション)を細かく分割して、複数のリクエストを「順番を気にせず並行して」やりとりできるようにする仕組みです。
さきほどのレストランの例で言えば、カレーができるのを待たずに、サラダとデザートを先に別のルートで運ぶようなイメージですね。
初学者が覚えておくべきポイント
- HTTP/1.1のパイプライン化は「順番待ちの列」を作ってしまう。
- 先頭の処理が遅れると、後ろがすべて止まる「Head-of-Line Blocking」が発生する。
- この教訓を経て、HTTP/2では「多重化」という手法で真の並行処理を実現した。
—
まとめ:失敗は成功の母
パイプライン化は、決して無駄な技術ではありませんでした。私たちが今、高速にWebサイトを閲覧できているのは、「パイプライン化をやってみて、何がボトルネックなのかを痛感した」という歴史的な経験があったからです。
ネットワークの世界では、「仕組みを速くする」ことと同じくらい、「渋滞をどう回避するか」が重要です。次にWebサイトを見るとき、裏側でどんな工夫がなされているのか、少しだけ想像してみてくださいね。
それでは、また次回の深掘り解説でお会いしましょう!Happy Hacking!
コメント