Pemilih proksi Round-Robin berkongsi dalam Go
Kekalkan pemilih proksi Go hidup merentas permintaan, lindungi keadaan pemilihan yang dikongsi dan bezakan pemilihan laluan daripada pemerhatian keluarnya.
Sesuatu pemilih boleh berputar dengan sempurna dan masih memilih proksi pertama. Kesilapannya ialah mencipta pemilih baharu secara tidak sengaja bagi setiap permintaan, yang menetapkan semula pembilangnya sebelum ia sempat membuat pilihan kedua.
Bina pemilih sekali sahaja dan kekalkannya bersama pengangkutan. Senarai proksi HTTP boleh membekalkan calon HTTP awam untuk set URL apabila permintaan membenarkan perantara awam. Mulakan dengan senarai URL proksi yang telah disahkan dan tidak kosong:
func rotatingProxy(urls []*url.URL) func(*http.Request) (*url.URL, error) {
var mu sync.Mutex
next := 0
return func(*http.Request) (*url.URL, error) {
mu.Lock()
selected := urls[next]
next = (next + 1) % len(urls)
mu.Unlock()
return selected, nil
}
}
Aplikasi di sekelilingnya mesti menolak senarai kosong, mengesahkan URL dan menggunakan import biasa net/http, net/url dan sync. Senarai itu hendaklah kekal tidak berubah semasa pemilih ini menggunakannya, atau diganti melalui reka bentuk yang disegerakkan secara berasingan.
Lampirkan fungsi yang dikembalikan kepada satu http.Transport yang dikekalkan. Mutex melindungi urutan pemilihan merentas panggilan balik serentak. Ia tidak memerlukan penguncian dipegang semasa permintaan rangkaian yang perlahan diselesaikan.
Jangan habiskan laluan semata-mata untuk mencetaknya
Memanggil pemilih lagi untuk mesej diagnostik memajukan pembilang sekali lagi. Output itu mungkin menerangkan calon seterusnya dan bukannya calon yang digunakan oleh permintaan yang anda siasat. Rekodkan pemilihan di dalam panggilan balik sebenar dengan pengecam titik akhir yang selamat.
Seruan panggilan balik bukan bukti bahawa permintaan berjaya dihantar. Ubah hala atau cubaan pengangkutan tambahan boleh merumitkan andaian mudah “satu panggilan aplikasi, satu pilihan”. Jika aliran kerja mesti mengekalkan satu laluan sepanjang beberapa operasi, pilih laluan itu pada sempadan aliran kerja dan bukannya menggunakan panggilan balik berputar global.
Round-robin juga tidak menjanjikan keluaran awam yang berbeza. Ia menjadualkan titik akhir. Identiti akhir kekal sebagai sifat laluan yang dibekalkan oleh setiap titik akhir.