Có những loại thuật toán cân bằng tải nào


32

Tôi đã nghiên cứu các thuật toán cân bằng tải khác nhau cho HTTP và tôi chỉ tìm thấy 3. Robin ngẫu nhiên, Robin tròn và Robin tròn có trọng số. Có sự lựa chọn nào khác không?

Cảm ơn Paul

Câu trả lời:


33

Các thuật toán cân bằng tải phổ biến nhất cho các bộ cân bằng tải HTTP là IMHO:

  • Round Robin (đôi khi được gọi là "Next in Loop").

  • Robin có trọng số - như Round Robin, nhưng một số máy chủ có được phần lớn lưu lượng tổng thể.

  • Ngẫu nhiên .

  • Nguồn băm IP . Các kết nối được phân phối đến các máy chủ phụ trợ dựa trên địa chỉ IP nguồn. Nếu một mã web bị lỗi và được đưa ra khỏi dịch vụ, phân phối sẽ thay đổi. Miễn là tất cả các máy chủ đang chạy một địa chỉ IP máy khách nhất định sẽ luôn đi đến cùng một máy chủ web.

  • Băm URL . Giống như băm IP nguồn, ngoại trừ băm được thực hiện trên URL của yêu cầu. Hữu ích khi cân bằng tải trước bộ đệm proxy, vì các yêu cầu cho một đối tượng nhất định sẽ luôn chuyển đến chỉ một bộ đệm phụ trợ. Điều này tránh sự trùng lặp bộ đệm, có cùng một đối tượng được lưu trữ trong một vài / tất cả bộ đệm và tăng khả năng hiệu quả của bộ đệm phụ trợ.

  • Kết nối ít nhất, kết nối ít nhất. Bộ cân bằng tải giám sát số lượng kết nối mở cho mỗi máy chủ và gửi đến máy chủ ít bận rộn nhất.

  • Lưu lượng ít nhất, lưu lượng truy cập ít nhất. Bộ cân bằng tải giám sát tốc độ bit từ mỗi máy chủ và gửi đến máy chủ có lưu lượng đi ít nhất.

  • Độ trễ thấp nhất . Perlbal đưa ra yêu cầu HTTP TÙY CHỌN nhanh chóng đến các máy chủ phụ trợ và gửi yêu cầu đến máy chủ đầu tiên để trả lời.

Có thể cho rằng các thuật toán trên không theo nghĩa khoa học máy tính nghiêm ngặt, chúng là những mô tả chung hơn về các phương pháp phổ biến. Đây là một bài báo nhỏ của Cisco mô tả một số thuật toán họ sử dụng chi tiết hơn . Triển khai từ các nhà cung cấp khác sẽ hơi khác nhau.

Có những trường hợp cạnh trong đó các thuật toán kỳ lạ hơn là hữu ích - ví dụ như truyền phát video có thể tự cho vay tốt để "lưu lượng truy cập ít nhất". Nhưng nói chung, đối với hầu hết các ứng dụng web và trang web, giải pháp tối ưu là:

  • Một hệ thống phiên được chia sẻ / phân phối , sao cho bất kỳ mã web nào cũng có thể trả lời bất kỳ yêu cầu nào của người dùng (tức là dữ liệu phiên của người dùng như cookie phiên có sẵn cho tất cả các máy chủ).

  • Cân bằng tải bằng cách sử dụng Round Robin ( Robin vòng tùy chọn có trọng số) hoặc phân phối ngẫu nhiên . Round Robin và Random là các thuật toán đơn giản và linh hoạt mà không có bất kỳ vấn đề 'điểm nóng' nào, tức là phân phối tải cho phụ trợ vẫn công bằng trong mọi tình huống.


5

Câu hỏi chưa đầy đủ:

Cân bằng tải GÌ?

CPU có thể mất bão hòa; viễn cảnh thông thường là ngược - đẩy vào một tài nguyên thay vì kéo theo nó.

Đĩa có nhiều loại tải khác nhau để cân bằng, chẳng hạn như không gian, tốc độ đọc, tốc độ ghi, thông lượng, v.v.

Mạng có thể được cân bằng tải dựa trên độ trễ hoặc tổng thông lượng ...

Mọi người có thể được cân bằng tải dựa trên năng lực cá nhân; một số đa tác vụ tốt, một số khác thì không và sau đó có chất lượng so với số lượng. Bạn có thể tối ưu hóa nguồn nhân lực của mình dựa trên nhiều yếu tố và với các trọng số khác nhau được đưa ra cho các thuộc tính khác nhau.

Trên đây là xa đầy đủ; điểm quan trọng là các tài nguyên khác nhau có các loại cân bằng tải hoàn toàn khác nhau. Trong số các thuộc tính và khả năng sẵn có của chúng, bạn phải nêu rõ MỌI quan tâm đến việc cân bằng.

Những gì bạn đang cố gắng cân bằng là tiêu chí đầu tiên để tạo ra một thuật toán cân bằng tốt. Và gợi ý rằng chỉ có ba là ... không được làm sáng tỏ. Sẽ là xứng đáng của một tiến sĩ để làm một công việc thích hợp cố gắng phân định tất cả các cách "tải được cân bằng."

RT


2
bạn đang thiếu câu hỏi Richard, thuật toán là cơ sở của bất kỳ phương pháp hoặc cách thực hiện nào.
monomyth

2
Xin lỗi monomyth, tôi đã không bỏ lỡ một điều nguyền rủa. Hãy mở mang đầu óc.
Richard T

@monomyth, @Richard là đúng - Sự lựa chọn thuật toán phụ thuộc vào những gì bạn đang cân bằng tải. Bạn có thể phát triển một thuật toán để tải mức sử dụng không gian đĩa cân bằng và điều đó hoàn toàn không thể áp dụng cho một thứ khác, như các yêu cầu HTTP.
Josh

@Josh, @ Richard, các khái niệm về cân bằng tải là như nhau mặc dù. Bạn vẫn có thể sử dụng Round Robin để cân bằng việc sử dụng đĩa, iSCSI, HTTP, CPU, bất cứ thứ gì.
Mark Henderson

@Fudeeker Tôi đồng ý, Round Robin khá phổ biến. Nhưng không có một số thuật toán cân bằng tải dành riêng cho nhiệm vụ?
Josh

0

Không phải là một câu trả lời trực tiếp cho câu hỏi của bạn, mà là một giải pháp thực tế mà chúng tôi thấy hữu ích. Sử dụng LVS và trình nền xung, cân bằng tải HTTP của chúng tôi được định cấu hình để gọi một tập lệnh bash tùy chỉnh xác định tải trên "máy chủ thực" thông qua kết nối SSH đơn giản và cuộc gọi đến thời gian hoạt động .

Sau đó, dựa trên mức trung bình tải của các máy chủ, trọng số được đặt cho mỗi máy chủ. Không phải là cách tiếp cận khoa học nhất, vì trung bình tải không nhất thiết chỉ ra các kết nối HTTP hoặc tải CPU gây ra bởi các kết nối đó. Tuy nhiên, chúng tôi đã có kết quả hiệu quả đáng ngạc nhiên.

2c của tôi. YMMV.

PS: hãy xem dự án LVS - bạn chắc chắn sẽ tìm thấy thông tin về việc triển khai lập lịch cân bằng tải.

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.