Sistem proksi modul bahasa pengaturcaraan Go telah menyebabkan masalah besar kepada penyelenggara repositori dengan memuat turun keseluruhan pangkalan kod berulang kali daripada memeriksa kemas kini dengan cekap. Isu ini telah berlarutan selama bertahun-tahun, mewujudkan apa yang dikenali sebagai masalah thundering herd yang boleh membebankan pelayan huluan.
Masalah Klon Tidak Cekap
Sistem proksi Go melakukan klon repositori lengkap dari awal setiap kali ia memeriksa kemas kini, bukannya menggunakan kaedah yang lebih cekap seperti arahan hg pull
Mercurial . Ini menjadi masalah terutamanya untuk repositori yang mengandungi fail besar - sesetengah projek seperti wasmtime-go mengandungi gigabait arkib pra-binaan yang dimuat turun berulang kali. Seorang pembangun terpaksa melaksanakan had kadar yang membenarkan hanya satu klon setiap repositori setiap 24 jam, selepas itu proksi menerima kod ralat 429.
Mercurial (hg): Sistem kawalan versi teragih yang serupa dengan Git , yang secara sejarahnya digunakan oleh projek Go sebelum ia berhijrah ke Git .
Kesan Teknikal:
- Pelbagai permintaan klon serentak daripada mesin proksi yang berbeza
- Muat turun repositori lengkap dan bukannya kemas kini berperingkat
- Kelewatan 14 saat sebelum pengaktifan thundering herd
- Memberi kesan kepada repositori dengan aset binari yang besar (gigabait dalam wasmtime-go)
Berbilang Mesin Berlumba untuk Data yang Sama
Apabila proksi mengesan versi baharu, bukannya berkongsi kandungan yang telah dimuat turun secara dalaman, berbilang mesin secara serentak cuba mengklon repositori yang sama. Analisis log pelayan menunjukkan bahawa dalam masa 14 saat selepas satu nod menemui kemas kini, lima mesin berbeza secara serentak melaksanakan permintaan klon dari pelayan huluan yang sama. Ini mewujudkan beban yang tidak perlu walaupun pusat data Google yang bersambung baik mempunyai sambungan dalaman yang lebih baik daripada sambungan luaran.
Masalah Berusia Tiga Tahun
Perbincangan komuniti mendedahkan ini bukan isu baharu. SourceHut mengancam untuk mengharamkan Go tiga tahun lalu kerana tingkah laku yang sama ini, namun masalah ini berterusan hari ini. Keadaan ini nampaknya berpunca daripada apa yang digambarkan oleh sesetengah pihak sebagai perisian yang diabaikan - sistem yang menerima pendekatan yang cukup baik daripada perhatian yang sewajarnya terhadap pengoptimuman.
Garis Masa Isu Go Proxy:
- 2022: SourceHut mengancam untuk mengharamkan Go kerana terlalu banyak serangan pelayan
- 2025: Masalah berterusan dengan tingkah laku thundering herd
- Semasa: Had kadar dilaksanakan (1 klon setiap repo setiap 24 jam)
Respons Google dan Penyelesaian Berpotensi
Wakil Google mengakui isu thundering herd dan memohon maaf atas trafik berlebihan. Mereka menjelaskan bahawa walaupun mereka membetulkan masalah serupa untuk repositori Git dengan melaksanakan bendera guna semula yang memeriksa perubahan tanpa muat turun penuh, sokongan Mercurial masih tidak lengkap. Cabaran terletak pada mencari cara untuk sistem kawalan versi menyediakan kaedah murah untuk menyenaraikan tag dan cawangan dengan checksum kriptografi tanpa memerlukan klon repositori penuh.
Keadaan berterusan ini menyerlahkan bagaimana syarikat yang mempunyai sumber yang baik sekalipun boleh mengabaikan kesan sistem mereka terhadap penyedia huluan yang lebih kecil, mewujudkan isu prestasi berturutan merentasi ekosistem pembangunan.
Rujukan: what is the go proxy even doing?