2009-03-19 23 views
6

Tôi đã nhìn vào các mô-đun nô lệ/hồ bơi và nó có vẻ tương tự như những gì tôi muốn, nhưng nó cũng có vẻ như tôi có một điểm thất bại trong ứng dụng của tôi (nếu nút chính đi xuống).Sử dụng Erlang, tôi nên phân phối tải như thế nào trong một cụm?

Khách hàng có danh sách cổng (vì mục đích dự phòng - tất cả đều làm điều tương tự) chấp nhận kết nối và một được chọn từ ngẫu nhiên của khách hàng. Khi khách hàng kết nối tất cả các nút được kiểm tra xem có tải ít nhất và sau đó IP của máy chủ được tải ít nhất được chuyển tiếp lại cho máy khách. Khách hàng sau đó kết nối với máy chủ này và mọi thứ được thực hiện tại đó.

Tóm lại, tôi muốn tất cả các nút hoạt động như cả hai cổng và thực tế là yêu cầu của khách hàng quá trình . Cân bằng tải chỉ được thực hiện khi máy khách kết nối ban đầu - tất cả các gói dữ liệu thực tế và được xử lý trên nút "home" của máy khách.

Tôi làm như thế nào?

Trả lời

6

Tôi không biết liệu mô-đun này đã được triển khai chưa nhưng những gì tôi có thể nói, cân bằng tải được ghi đè. Những gì tôi có thể tranh luận là, đặt ngẫu nhiên các công việc là đặt cược tốt nhất trừ khi bạn biết nhiều thông tin hơn như thế nào tải sẽ đến trong tương lai và trong hầu hết các trường hợp bạn thực sự không. Những gì bạn đã viết:

Khi khách hàng kết nối tất cả các nút được kiểm tra xem có tải ít nhất thì IP của máy chủ được tải ít nhất sẽ được chuyển tiếp trở lại máy khách.

Làm thế nào bạn biết rằng tất cả những nút được tải ít nhất sẽ không được tải cao nhất chỉ trong vài giây tiếp theo? Làm thế nào bạn biết rằng tất cả những nút được nạp cao mà bạn sẽ không bao gồm trong danh sách sẽ không giảm tải chỉ trong ms tiếp theo? Bạn thực sự không thể biết nó trừ khi bạn có trường hợp rất hiếm.

Chỉ cần đo (hoặc tính toán) hiệu suất của nút và xác suất của nút thiết lập được chọn tùy thuộc vào nó. Chọn nút ngẫu nhiên bất kể tải hiện tại. Sử dụng phương pháp này như cách tiếp cận ban đầu. Khi bạn thiết lập nó, bạn có thể thử tạo một số thuật toán phức tạp hơn. Tôi cá là sẽ rất khó để đánh bại cách tiếp cận ban đầu này. Tin tôi đi, rất chăm chỉ.

Chỉnh sửa: Để rõ ràng hơn trong một chi tiết tinh tế, tôi mạnh mẽ cho rằng bạn không thể dự đoán tải trong tương lai từ tải hiện tại và lịch sử nhưng bạn nên sử dụng kiến ​​thức về xác suất thời lượng nhiệm vụ và phân đoạn hiện tại của nhiệm vụ. Công việc này rất khó để đạt được.

1

Mục đích của cây giám sát là quản lý các quy trình không nhất thiết phải chuyển tiếp các yêu cầu. Không có lý do gì bạn không thể sử dụng mã khác để gửi yêu cầu trực tiếp đến các thành viên của danh sách các quy trình có sẵn. Xem hồ bơi: get_nodes hoặc pool: get_node() cho một cách để lấy các danh sách đó.

Bạn có thể cho phép mô-đun nhóm xử lý việc quản lý các quy trình (khởi động lại, theo dõi và xử lý tiêu diệt) và sử dụng một số mô-đun khác để chuyển hướng rõ ràng các yêu cầu đến nhóm quy trình. Có lẽ bạn đang tìm kiếm các hồ bơi phân phối mặc dù? Sẽ rất khó để thoát khỏi quá trình tổng thể trong khi không có các nút phân tán. Toàn bộ hệ thống chạy là khá nhiều cây giám sát lớn.

0

Gần đây tôi đã nhớ mô-đun pg cho phép bạn thiết lập các nhóm quá trình. các tin nhắn được gửi tới nhóm sẽ đi tới mọi quá trình trong nhóm.Nó có thể giúp bạn có được một phần hướng tới những gì bạn muốn. bạn sẽ phải viết mã để quyết định quá trình nào xử lý yêu cầu cho thực nhưng bạn sẽ nhận được một hồ bơi mà không có một bậc thầy sử dụng nó.

Các vấn đề liên quan