Tìm hiểu về Round-Robin DNS
(blog.hyperknot.com)Tìm hiểu về Round-Robin DNS
-
Round-Robin DNS là gì?
- Thông thường khi triển khai website trên VPS, bạn sẽ thêm một bản ghi A duy nhất trong bảng điều khiển của nhà cung cấp DNS.
- Với Round-Robin DNS, có thể chỉ định nhiều máy chủ cho cùng một subdomain để phân tán tải sang nhiều máy chủ và tự động phát hiện máy chủ ngoại tuyến để chọn máy chủ đang trực tuyến.
- Giải pháp này đơn giản, gọn gàng, không cần dùng load balancer và không tốn chi phí.
-
Về mặt lý thuyết, nó hoạt động như thế nào?
- Theo RFC 8305 "Happy Eyeballs", client nên sắp xếp các địa chỉ trước khi kết nối.
- Client kiểm tra máy chủ đang trực tuyến hay ngoại tuyến và sắp xếp các máy chủ đang trực tuyến theo thời gian ping.
-
Trên thực tế, nó hoạt động như thế nào?
- Tạo 3 VPS tại Mỹ, châu Âu và Singapore, rồi tạo 3 bản ghi A có proxy và không proxy trên Cloudflare.
- Mỗi máy chủ cung cấp một hình ảnh màu sắc và hostname.
Hành vi chọn máy chủ của client
-
Chrome
- Chọn ngẫu nhiên ở mọi vị trí, nhưng sau khi chọn thì sẽ cố định.
- Đánh giá lại sau vài giờ.
-
Firefox
- Tương tự Chrome, chọn ngẫu nhiên và sau đó cố định.
-
Safari
- Luôn chọn đúng máy chủ gần nhất.
-
curl
- Ban đầu có thể chưa đúng, nhưng ở lần chạy thứ hai sẽ điều chỉnh sang máy chủ gần nhất.
-
Cloudflare
- Chọn ngẫu nhiên một vị trí dựa trên IP của client và sau đó cố định.
Hành vi của client khi có máy chủ ngoại tuyến một phần
- Tất cả client đều phát hiện máy chủ ngoại tuyến và chọn máy chủ thay thế.
- Cloudflare không phát hiện được máy chủ ngoại tuyến, và nếu máy chủ đã chọn bị ngoại tuyến thì sẽ trả về trạng thái ngoại tuyến.
Các điểm cần cải thiện của Cloudflare
- Cần phát hiện máy chủ ngoại tuyến.
- Cần có khả năng chọn máy chủ có độ trễ thấp nhất.
Tổng kết của GN⁺
- Round-Robin DNS là một cách để phân tán tải sang nhiều máy chủ và có thể triển khai đơn giản mà không cần dùng load balancer.
- Cách trình duyệt và client chọn máy chủ là khác nhau; đặc biệt Safari chọn máy chủ gần nhất khá tốt.
- Với Cloudflare, có vấn đề là không phát hiện được máy chủ ngoại tuyến, và đây là điểm cần được cải thiện.
- Bài viết này hữu ích để hiểu cách Round-Robin DNS hoạt động, đồng thời cũng thú vị khi khám phá sự khác biệt giữa các thuật toán chọn máy chủ.
1 bình luận
Ý kiến Hacker News
Đã yêu cầu nhóm DNS giải thích về tình hình hiện tại và sẽ chia sẻ khi nhận được phản hồi. Mã nguồn thay đổi thường xuyên nên khó nắm chính xác trạng thái hiện tại. Việc duy trì kết nối giữa IP client và máy chủ backend có thể là nguyên nhân của vấn đề.
Cân bằng tải DNS có thể gây ra các vấn đề phức tạp. Client HTTP2 của golang có thể gặp sự cố khi dùng RR DNS. Có trường hợp client không phát hiện được máy chủ mới.
MAX_CONNECTION_AGEđể ngắt kết nối client theo chu kỳ.Thiếu một giải pháp tiêu chuẩn cho service discovery. Cách tốt nhất có thể là triển khai bộ cân bằng tải dựa trên request và dùng virtual IP để bộ cân bằng tải thực hiện health check.
Bản ghi DNS SRV từng là giải pháp ban đầu cho phép gán mức ưu tiên cho mọi dịch vụ, nhưng vì lý do chính trị nên không được dùng trong HTTP client. Các bản ghi DNS HTTPS và SVCB mới đang được đề xuất như một giải pháp mới cho cân bằng tải.
Khi máy chủ offline, nếu kết nối bị từ chối thì client sẽ chuyển sang IP tiếp theo. Tuy nhiên trên thực tế, máy chủ có thể không phản hồi hoặc im lặng sau khi kết nối. Khi đó phải phụ thuộc vào timeout của client.
Độ tin cậy được quyết định ở phía client. Một số hệ thống luôn trả về địa chỉ IP thấp nhất nên có thể gây ra vấn đề. DNS-RR không phải là bộ cân bằng tải, và bộ cân bằng tải là giải pháp tốt hơn.
Đã viết một bộ giải mã bằng Perl và cho rằng mọi thứ đều nên được làm bằng Perl.
RR-DNS chỉ hữu ích cho cân bằng tải và không tự động phát hiện khả dụng của máy chủ. Cần bổ sung chức năng thông minh ở phía client.
Khi máy chủ bị sập, việc có các địa chỉ IP phân tán trên toàn cầu cho phép mọi người vẫn tiếp tục truy cập.
Vào những năm 2000, Amazon đã dùng DNS round robin cho các host onsite. Khi đó đây là cách cân bằng tải nhanh nhất. Tuy nhiên, Wi‑Fi mới là nút thắt cổ chai lớn nhất.
Có nhắc đến Cloudflare Load Balancing nhưng chưa thử nghiệm thực tế. Cloudflare có thể tự động phát hiện máy chủ offline và chuyển sang máy chủ khác.