Tôi hiện đang sử dụng vòng tròn DNS để cân bằng tải, hoạt động rất tốt. Các bản ghi trông như thế này (Tôi có thời lượng là 120 giây)
;; 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
Tôi đã học được rằng không phải mọi ISP / thiết bị đều xử lý một phản ứng như vậy theo cùng một cách. Ví dụ: một số máy chủ DNS xoay địa chỉ ngẫu nhiên hoặc luôn chuyển chúng qua. Một số chỉ tuyên truyền mục đầu tiên, những người khác cố gắng xác định mục nào là tốt nhất (gần khu vực) bằng cách xem địa chỉ IP.
Tuy nhiên, nếu cơ sở người dùng đủ lớn (trải rộng trên nhiều ISP, v.v.) thì nó sẽ cân bằng khá tốt. Sự khác biệt từ máy chủ được tải cao nhất đến thấp nhất hầu như không vượt quá 15%.
Tuy nhiên, bây giờ tôi có một vấn đề là tôi đang giới thiệu nhiều máy chủ hơn vào các hệ thống và không phải tất cả đều có cùng năng lực.
Tôi hiện chỉ có máy chủ 1 Gbps, nhưng tôi muốn làm việc với 100 Mbps và cả máy chủ 10 Gbps nữa.
Vì vậy, điều tôi muốn là tôi muốn giới thiệu một máy chủ có tốc độ 10 Gbps với trọng lượng 100, máy chủ 1 Gbps có trọng lượng 10 và máy chủ 100 Mbps với trọng lượng 1.
Trước đây tôi đã thêm máy chủ hai lần để mang lại nhiều lưu lượng truy cập hơn cho chúng (hoạt động rất tốt, băng thông tăng gần gấp đôi). Nhưng việc thêm máy chủ 10 Gbps 100 lần vào DNS thì hơi vô lý.
Vì vậy, tôi nghĩ về việc sử dụng TTL.
Nếu tôi cung cấp cho máy chủ A 240 giây TTL và máy chủ B chỉ 120 giây (tức là khoảng tối thiểu để sử dụng cho vòng tròn, vì rất nhiều máy chủ DNS được đặt thành 120 nếu chỉ định TTL thấp hơn (vì vậy tôi đã nghe thấy)). Tôi nghĩ điều gì đó như thế này sẽ xảy ra trong một kịch bản lý tưởng:
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...
Như bạn có thể thấy điều này trở nên khá phức tạp để dự đoán và chắc chắn nó sẽ không diễn ra như thế này trong thực tế. Nhưng nó chắc chắn sẽ có ảnh hưởng đến việc phân phối!
Tôi biết rằng robin tròn có trọng số tồn tại và chỉ được kiểm soát bởi máy chủ gốc. Nó chỉ quay vòng qua các bản ghi DNS khi phản hồi và trả về các bản ghi DNS với xác suất được đặt tương ứng với trọng số. Máy chủ DNS của tôi không hỗ trợ điều này và yêu cầu của tôi không chính xác. Nếu nó không có trọng lượng hoàn toàn thì không sao, nhưng nó nên đi đúng hướng.
Tôi nghĩ rằng việc sử dụng trường TTL có thể là một giải pháp đơn giản và dễ dàng hơn và nó không yêu cầu máy chủ DNS điều khiển động này, giúp tiết kiệm tài nguyên, theo quan điểm của tôi về toàn bộ cân bằng tải DNS so với cân bằng tải phần cứng.
Câu hỏi của tôi bây giờ là: Có bất kỳ thực tiễn / phương pháp / quy tắc tốt nhất nào để phân phối vòng tròn trọng lượng bằng cách sử dụng thuộc tính TTL của bản ghi DNS không?
Biên tập:
Hệ thống này là một hệ thống máy chủ proxy chuyển tiếp. Lượng Băng thông (không yêu cầu) vượt quá những gì một máy chủ duy nhất có Ethernet có thể xử lý. Vì vậy, tôi cần một giải pháp cân bằng phân phối băng thông cho một số máy chủ. Có phương pháp nào khác hơn là sử dụng DNS không? Tất nhiên tôi có thể sử dụng bộ cân bằng tải với kênh sợi, v.v., nhưng chi phí thì vô lý và nó cũng chỉ tăng chiều rộng của nút cổ chai và không loại bỏ được. Điều duy nhất tôi có thể nghĩ đến là địa chỉ IP anycast (là anycast hay multicast?), Nhưng tôi không có phương tiện để thiết lập một hệ thống như vậy.