Go 1.27 percepat HTTP/1 hingga 5x lebih cepat

Judul asli: Better HTTP/1 connection reuse in Go 1.27

Mengapa Ini Penting

Peningkatan 5x tanpa ubah kode klien berarti efisiensi besar bagi aplikasi backend yang intensif HTTP.

Go 1.27 tingkatkan reuse koneksi HTTP/1 sehingga 100 permintaan ke index.golang.org turun dari ~710ms menjadi ~150ms, hampir 5x lebih cepat.

Tim Go merilis peningkatan signifikan pada manajemen koneksi HTTP/1 di Go 1.27. Dalam pengujian yang dilakukan Nicholas Husin dan Damien Neil, 100 permintaan GET ke index.golang.org membutuhkan ~710 milidetik di Go 1.26, namun hanya ~150 milidetik di Go 1.27 — penurunan hampir 5 kali lipat.

Akar masalahnya ada di biaya pembukaan koneksi baru. Setiap koneksi HTTPS memerlukan TCP handshake (1 RTT) lalu TLS handshake (2 RTT untuk TLS 1.2, atau 1 RTT untuk TLS 1.3), sehingga total 2–3 RTT sebelum permintaan HTTP pertama bisa dikirim. Dalam komunikasi lintas wilayah, satu RTT bisa mencapai 100ms, artinya setup koneksi saja bisa makan 300ms.

Solusinya adalah reuse koneksi yang lebih agresif. HTTP/1.1 mendukung persistent connection (keep-alive), memungkinkan beberapa permintaan melewati satu koneksi yang sama. Namun implementasi lama di Go 1.26 memiliki celah yang menyebabkan koneksi tidak selalu dipakai ulang secara optimal, terutama ketika response body tidak dibaca sampai habis. Go 1.27 memperbaiki perilaku ini sehingga koneksi idle dikembalikan ke pool lebih andal.

Sumber

go.dev — Baca artikel asli →