Cân bằng tải máy chủ UDP


10

Tôi có một máy chủ udp, nó là một phần trung tâm trong quy trình kinh doanh của tôi. để xử lý các tải mà tôi mong đợi trong môi trường sản xuất, có lẽ tôi sẽ cần 2 hoặc 3 phiên bản của máy chủ. Máy chủ gần như hoàn toàn không trạng thái, nó chủ yếu thu thập dữ liệu và lớp trên nó biết cách xử lý lượng dữ liệu cũ tối thiểu có thể phát sinh từ nhiều trường hợp máy chủ.

Câu hỏi của tôi là, làm thế nào tôi có thể thực hiện cân bằng tải giữa các máy chủ? Tôi muốn phân phối các yêu cầu càng đều càng tốt giữa các máy chủ. Tôi cũng muốn có một chút trung thực, ý tôi là nếu máy khách X được chuyển đến máy chủ y, thì tôi muốn tất cả các yêu cầu tiếp theo của X đến máy chủ Y, miễn là hợp lý và không quá tải Y.

Nhân tiện, đây là một hệ thống .NET ... bạn muốn giới thiệu cái gì?


trạng thái là nội bộ trong các máy chủ, không phải là một giao dịch nào đó. trạng thái là một số dữ liệu mà các máy chủ tổng hợp từ dữ liệu họ nhận được và có thể sử dụng được với một Dịch vụ Web WCF đơn giản. Ứng dụng này dựa trên UDP và mặc dù tôi không đồng ý với quyết định này, "Trên mức lương của tôi"

Tôi hiện đang dùng thử NLB của MS, nó hoạt động tốt, nó hoạt động tốt, nhưng nó tạo ra tiếng ồn trên toàn bộ mạng ...

Cũng không có DNS ... Ồ và đó là một giao thức trang phục hoàn toàn.


Chỉ cần một lưu ý để tham khảo trong tương lai - các câu hỏi có thể được di chuyển giữa các trang web stackexchange trong nhiều trường hợp bởi người điều hành và người dùng có uy tín cao. Điều này giúp duy trì bất kỳ câu trả lời nào đã được đặt, vì vậy, nó thường tốt hơn là tự đăng lại (trừ khi không có câu trả lời, trong trường hợp đó hãy xóa câu hỏi cũ để không ai vô tình trả lời). Nếu bạn đồng ý với đề xuất di chuyển, chỉ cần thêm một nhận xét cho hiệu ứng đó và (nếu có thể) gắn cờ bài đăng của bạn để người điều hành chú ý và bài đăng sẽ kết thúc với bạn.
bdonlan

Câu trả lời:


4

Tôi có một máy chủ udp, [...] máy chủ gần như hoàn toàn không trạng thái [..] có một số độ trung thực, ý tôi là nếu máy khách X được chuyển đến máy chủ y, thì tôi muốn tất cả các yêu cầu tiếp theo của X đến máy chủ Y, như miễn là nó hợp lý và không quá tải Y.

Vì vậy, bạn đang sử dụng một giao thức ứng dụng không được tiết lộ để giữ một số trạng thái ứng dụng và chạy trên UDP? Bạn đang đi theo một hướng khó khăn. UDP không phải là phương tiện truyền dữ liệu đáng tin cậy, đó là toàn bộ vấn đề của nó - đối với việc truyền dữ liệu đáng tin cậy, hãy xem người bạn TCP phổ biến của nó. Cách duy nhất bạn có thể có được 'độ trung thực' của mình là có proxy cân bằng tải để hiểu giao thức lớp ứng dụng của bạn và biết trạng thái ứng dụng hiện tại của bạn là gì và có thể hành động tương ứng.

Tôi thấy 3 cách tiếp cận gần với việc cung cấp những gì bạn tìm kiếm:

  • Truyền bá tĩnh các kết nối đến trên 3 địa chỉ IP, dựa trên địa chỉ IP nguồn (người dùng cuối). Bằng cách này, một người dùng nhất định sẽ luôn được chuyển đến cùng một máy chủ. Hầu hết các tường lửa chuyên nghiệp có thể làm điều này cho bạn. Bạn có thể phải tự làm cho 3 máy chủ khả dụng, vì hầu hết các tường lửa sẽ không kiểm tra sức khỏe phụ trợ cho bạn.

  • Sử dụng DNS và sử dụng DNS Round Robin, như đã được đề xuất bởi Matt Simmons.

  • Sử dụng Cân bằng tải mạng tích hợp (NLB) của Windows . Thành thật mà nói, tôi không biết kịch bản chuyển đổi dự phòng sẽ diễn ra như thế nào với NLB và dịch vụ dựa trên UDP nửa trạng thái của bạn - bạn sẽ phải tự mình điều tra, dựa trên cách ứng dụng của bạn xử lý trạng thái. Về mặt tích cực, NLB rất dễ thiết lập, miễn phí với giấy phép Windows, trưởng thành và hoạt động tốt.


tôi đã chỉnh sửa câu hỏi của mình
Hellfrost

6

Linux Virtual Server là một máy chủ có khả năng mở rộng cao và khả dụng cao được xây dựng trên một cụm các máy chủ thực sự. LVS hỗ trợ giao thức UDP và thuật toán băm nguồn (điều này được sử dụng khi bạn muốn máy khách luôn xuất hiện trên cùng một máy chủ thực).

Tôi sử dụng LVM để cân bằng DNS (rr), SIP (sh).


4

Hấp dẫn. Hầu hết các phần mềm proxy mà tôi thấy đều được thừa nhận dựa trên TCP.

Hầu hết các cân bằng tải dành riêng cho UDP mà tôi đã thấy trong trải nghiệm ít ỏi của mình là dựa trên DNS (ví dụ: máy chủ thời gian, máy chủ DNS, v.v.). Có cách nào để cung cấp nhiều hồ sơ A không? Nếu điều đó sẽ hoạt động, Robin Round DNS bình thường sẽ đảm bảo phân phối các yêu cầu hợp lý (dù sao cũng đủ công bằng) và bộ nhớ đệm của khách hàng sẽ đảm bảo rằng độ trung thực được giữ lại (giả sử bạn đang sử dụng nền tảng dựa trên bộ đệm ở đầu máy khách).


không có DNS nào cả.
Hellfrost

2

Bạn có thể sử dụng bất kỳ loại cân bằng tải nào để thực hiện việc này, dù là phần cứng hay phần mềm, bạn có thể chọn từ các bộ cân bằng tải khác nhau dựa trên những gì bạn cần.

Bộ cân bằng tải cấp 3: Sẽ chỉ cân bằng tải bằng cách xem IP đến và IP phụ trợ có sẵn, loại cân bằng tải này sẽ đảm bảo độ dính bằng cách luôn gửi cùng một địa chỉ IP đến cùng một phụ trợ, mặc dù loại chiến lược này có thể làm quá tải một trong số các phụ trợ nếu nhiều khách hàng đến từ cùng một IP (có thể là proxy hoặc cổng công ty)

Bộ cân bằng tải cấp 7 : Bộ cân bằng tải cấp 7 sẽ không chỉ cân bằng như bộ cân bằng cấp 3 mà còn xem xét nội dung của gói, giúp bạn linh hoạt hơn rất nhiều cho các chính sách cân bằng của mình.

Xem xét rằng bạn đang sử dụng UDP, cả hai bộ cân bằng sẽ cho hiệu năng tốt, việc kiểm tra gói sâu trong UDP bị hạn chế hơn một chút so với TCP (chỉ vì lý do giao thức).

Tùy thuộc vào ngân sách của bạn, bạn có thể bắt đầu bằng cách sử dụng bộ cân bằng tải phần mềm (ví dụ linux + IPVS) và sau đó bắt đầu chuyển sang bộ cân bằng tải phần cứng như các bộ cân bằng do Cisco hoặc Netapp cung cấp


-1 cho phần L7. Bộ cân bằng tải Lớp / Cấp 7 hoạt động ở lớp ứng dụng - nhưng vì OP đang sử dụng UDP, nên anh ta không sử dụng HTTP cũ đơn giản và anh ta đã không tiết lộ mình đang sử dụng ứng dụng nào. Chúng ta không thể biết rằng bộ cân bằng tải L7 tồn tại cho giao thức OP đang sử dụng.
Jesper M

1
Tôi chỉ nhận xét các tùy chọn của anh ấy trong bộ cân bằng tải và chúng tôi không biết anh ấy đang sử dụng cái gì qua UDP, tôi nghĩ rằng bạn đang cắt cái này quá chặt;)
lynxman

Có một cái gì đó giữa NLB / linux và Cisco / netapp: bộ cân bằng tải KEMP. Bạn có thể nhận được một phiên bản ảo của nó mà không tốn nhiều tiền, chúng tôi đang sử dụng nó và chúng tôi rất hạnh phúc.
pauseka

2

NGINX mã nguồn mở và nền tảng phân phối ứng dụng, NGINX Plus hiện hỗ trợ cân bằng tải UDP. Khả năng mới này dựa trên các khả năng TCP và HTTP hiện có của chúng tôi, biến NGINX trở thành một lối vào mạnh mẽ, dễ sử dụng và nhất quán cho một loạt các ứng dụng và thiết bị Internet rộng hơn.

Có sẵn trong bản phát hành nginx-1.9.13

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.