Saat ini saya menggunakan round robin DNS untuk load balancing, yang bekerja sangat baik. Catatan terlihat seperti ini (Saya punya TTL 120 detik)
;; ANSWER SECTION:
orion.2x.to. 116 IN A 80.237.201.41
orion.2x.to. 116 IN A 87.230.54.12
orion.2x.to. 116 IN A 87.230.100.10
orion.2x.to. 116 IN A 87.230.51.65
Saya belajar bahwa tidak setiap ISP / perangkat memperlakukan respons seperti itu dengan cara yang sama. Misalnya beberapa server DNS memutar alamat secara acak atau selalu memutarnya. Beberapa hanya menyebarkan entri pertama, yang lain mencoba untuk menentukan mana yang terbaik (dekat secara regional) dengan melihat alamat IP.
Namun jika basis pengguna cukup besar (tersebar di beberapa ISP, dll.) Keseimbangannya cukup baik. Perbedaan dari server bermuatan tertinggi ke terendah hampir tidak setiap melebihi 15%.
Namun sekarang saya memiliki masalah bahwa saya memperkenalkan lebih banyak server ke dalam sistem, dan tidak semua memiliki kapasitas yang sama.
Saat ini saya hanya memiliki 1 server Gbps, tetapi saya ingin bekerja dengan 100 Mbps dan juga server 10 Gbps.
Jadi yang saya inginkan adalah saya ingin memperkenalkan server dengan 10 Gbps dengan berat 100, server 1 Gbps dengan berat 10 dan server 100 Mbps dengan bobot 1.
Saya sebelumnya menambahkan server dua kali untuk membawa lebih banyak lalu lintas ke mereka (yang bekerja dengan baik — bandwidth hampir dua kali lipat). Tetapi menambahkan server 10 Gbps 100 kali ke DNS agak konyol.
Jadi saya berpikir untuk menggunakan TTL.
Jika saya memberikan server A 240 detik TTL dan server B hanya 120 detik (yaitu sekitar minimum untuk digunakan untuk round robin, karena banyak server DNS diatur ke 120 jika TTL yang lebih rendah ditentukan (jadi saya dengar)). Saya pikir sesuatu seperti ini harus terjadi dalam skenario ideal:
First 120 seconds
50% of requests get server A -> keep it for 240 seconds.
50% of requests get server B -> keep it for 120 seconds
Second 120 seconds
50% of requests still have server A cached -> keep it for another 120 seconds.
25% of requests get server A -> keep it for 240 seconds
25% of requests get server B -> keep it for 120 seconds
Third 120 seconds
25% will get server A (from the 50% of Server A that now expired) -> cache 240 sec
25% will get server B (from the 50% of Server A that now expired) -> cache 120 sec
25% will have server A cached for another 120 seconds
12.5% will get server B (from the 25% of server B that now expired) -> cache 120sec
12.5% will get server A (from the 25% of server B that now expired) -> cache 240 sec
Fourth 120 seconds
25% will have server A cached -> cache for another 120 secs
12.5% will get server A (from the 25% of b that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of b that now expired) -> cache 120 secs
12.5% will get server A (from the 25% of a that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of a that now expired) -> cache 120 secs
6.25% will get server A (from the 12.5% of b that now expired) -> cache 240 secs
6.25% will get server B (from the 12.5% of b that now expired) -> cache 120 secs
12.5% will have server A cached -> cache another 120 secs
... I think I lost something at this point, but I think you get the idea...
Seperti yang Anda lihat ini menjadi sangat rumit untuk diprediksi dan pasti tidak akan berhasil seperti ini dalam praktiknya. Tapi itu pasti berpengaruh pada distribusi!
Saya tahu bahwa round robin tertimbang ada dan hanya dikendalikan oleh server root. Itu hanya siklus melalui catatan DNS ketika merespons dan mengembalikan catatan DNS dengan probabilitas yang ditetapkan sesuai dengan bobot. Server DNS saya tidak mendukung ini, dan persyaratan saya tidak tepat. Jika beratnya tidak sempurna, tidak apa-apa, tetapi harus mengarah ke arah yang benar.
Saya pikir menggunakan bidang TTL bisa menjadi solusi yang lebih elegan dan lebih mudah — dan itu tidak memerlukan server DNS yang mengontrol ini secara dinamis, yang menghemat sumber daya — yang menurut saya merupakan titik utama dari penyeimbangan beban DNS vs penyeimbang beban perangkat keras.
Pertanyaan saya sekarang adalah: Apakah ada praktik terbaik / metode / aturan praktis untuk distribusi round robin menggunakan atribut TTL dari catatan DNS?
Edit:
Sistem ini adalah sistem server proxy yang maju. Jumlah Bandwidth (bukan permintaan) melebihi apa yang bisa ditangani oleh satu server tunggal dengan Ethernet. Jadi saya butuh solusi penyeimbangan yang mendistribusikan bandwidth ke beberapa server. Apakah ada metode alternatif selain menggunakan DNS? Tentu saja saya bisa menggunakan penyeimbang beban dengan saluran serat dll, tetapi biayanya konyol dan juga hanya menambah lebar kemacetan dan tidak menghilangkannya. Satu-satunya hal yang dapat saya pikirkan adalah anycast (apakah anycast atau multicast?) Alamat IP, tetapi saya tidak memiliki sarana untuk mengatur sistem seperti itu.