Go 1.27でHTTP/1接続再利用が5倍高速化
原題: Better HTTP/1 connection reuse in Go 1.27
なぜ重要か
HTTP/1接続再利用の改善はコード変更不要で最大5倍の高速化をもたらし、Go製マイクロサービスやCLIツールのレイテンシ削減に直結する。
Googleは2026年10月14日、Go 1.27においてHTTP/1の接続再利用を大幅に改善したと公式ブログで発表した。同一エンドポイントへ100回リクエストを送る実験では、Go 1.26の約710ミリ秒に対してGo 1.27では約150ミリ秒と、約5倍の高速化を達成。net/httpパッケージの接続管理ロジックが見直された結果、TCP/TLSハンドシェイクの繰り返しコストが大きく削減される。
GoのHTTPクライアントが抱えてきた課題のひとつが、HTTP/1における接続再利用の非効率さだ。HTTP通信にはTCPハンドシェイク(1 RTT)とTLSハンドシェイク(TLS 1.2なら2 RTT、TLS 1.3なら1 RTT)のセットアップコストが伴う。クロスリージョン通信では片道50ミリ秒(往復100ミリ秒)の遅延が生じることも珍しくなく、接続確立だけで300ミリ秒を超えるケースも存在する。
HTTPクライアントはこのコストを回避するために既存の接続を複数リクエストにわたって再利用しようとするが、Go 1.26以前のnet/httpは接続の返却タイミングや再利用判定に非効率な部分があり、新規接続を不必要に確立するケースがあった。
Go 1.27では、Nicholas HusinとDamien NeilがHTTP/1接続再利用の仕組みを根本から見直した。公式ブログに掲載されたベンチマークでは、`http.Get`を用いてindex.golang.orgへ100回リクエストを送るシンプルなコード(`GODEBUG=http2client=0`でHTTP/1を強制)を使用。Go 1.26では約710ミリ秒かかっていた処理が、Go 1.27では約150ミリ秒に短縮されることを確認した。
HTTPのバージョンごとに接続再利用の仕組みは異なる。HTTP/2はひとつの接続上で複数リクエストを並列多重化できるため接続コストの影響を受けにくい。一方HTTP/1は1接続につき原則1リクエストの逐次処理が基本であり、接続管理の巧拙がレイテンシに直結する。今回の改善はHTTP/1に特化したものだが、実際の運用環境ではまだHTTP/1が多く使われているため、影響を受けるワークロードは広い。
Go 1.27の正式リリースは2026年を予定しており、今回の変更はすでにGoのリポジトリに取り込まれている。既存コードを変更せずパフォーマンス向上を享受できる点が、Go開発チームの今回の改善の大きな特徴だ。