2011-06-10 34 views
10

Tôi muốn triển khai phần mềm tác nhân từ xa được tạo bằng akka trên một cụm. Hệ thống bao gồm một số nút công nhân và một nút chính. Vấn đề là tôi không thể biết trước địa chỉ IP của các nút cluster (nhưng tôi biết chúng là tất cả các phần của cùng một mạng con). Vì vậy, tôi cần một cách hay để khám phá địa chỉ IP của tất cả mọi người sau khi khởi động, để tạo ra các tham chiếu chính xác cho từng nút.Phát hiện máy chủ diễn viên từ xa Akka

Tôi đang tìm giải pháp ligtweight (Tôi chỉ cần nó cho thiết lập ban đầu) được phân phối theo bất kỳ giấy phép phần mềm tự do nào.

Trả lời

7

Một thời gian trước, tôi đã tạo một prototype nhằm mục đích giải quyết vấn đề của bạn (vui lòng sử dụng lại mã và/hoặc đóng góp).

Một vài từ về cách hoạt động của nó. Nó bắt đầu một diễn viên từ xa cho mỗi đăng ký diễn viên (= nút). RegistryActor giữ liên kết đến tất cả các sổ đăng ký khác đang chạy trong một thiết lập phân tán. Khi một nút mới được thêm vào hệ thống, nó cần phải biết về ít nhất một nút khác (ActorRegistry) và thông báo cho nó. ActorRegistry hơn cho phép tất cả các nút khác biết về cái mới (vì vậy, bất kỳ RegistryActor nào có liên kết đến tất cả các RegistryActor khác), và bắt đầu một quá trình trao đổi liên kết với các diễn viên - ở cuối nó, tất cả các đăng ký diễn viên có liên kết tới tất cả các diễn viên (hoặc cục bộ hoặc từ xa) đang chạy trong một hệ thống.

Để biết thêm chi tiết, vui lòng tham khảo blogpost này.

1

Trừ khi tất cả các nút chia sẻ một số kiến ​​thức phổ biến, tôi nghĩ giải pháp của bạn sẽ phải dựa vào phát sóng IP. Phát sóng được định nghĩa là gửi gói tới tất cả các nút mạng trên mạng con, vì vậy nếu nút chính của bạn thực hiện điều đó trong khi tất cả các nút công nhân lắng nghe, bạn sẽ có thể kết nối tất cả mà không biết địa chỉ IP là ưu tiên.

Tôi chưa mã hóa điều này trong Scala, nhưng đây là một ví dụ khá dễ đọc về cách phát sóng thư trong java: http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html. Nó sẽ được đơn giản để thích nghi nó với Scala bằng cách sử dụng các lớp học tương tự.

4

Hãy xem các nhóm.

http://jgroups.org/

Nó đáp ứng tất cả các tiêu chí của bạn - đó là trọng lượng nhẹ, mã nguồn mở và rất trưởng thành, sản phẩm ổn định.

Bạn có thể dễ dàng định cấu hình để quản lý và phát hiện nhóm tự động dựa trên yêu cầu của bạn - nó hỗ trợ hầu hết mọi cấu hình mạng - bạn có thể sử dụng multicast, tệp được chia sẻ hoặc unicast để khám phá thành viên nhóm.

+0

Câu trả lời hay quá. Tôi đã thử jgroups trong quá khứ và tôi đã được satified. – paradigmatic

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