Tôi đã cố gắng tìm hiểu về các khái niệm của Akka và các hệ thống dựa trên diễn viên gần đây. Mặc dù tôi có một sự hiểu biết khá tốt về các nguyên tắc cơ bản của Akka bây giờ tôi vẫn đang vật lộn với một vài điều khi nói đến các nhóm và các diễn viên từ xa.Khám phá các diễn viên Akka trong cụm
Tôi sẽ cố gắng minh họa sự cố bằng cách sử dụng WebSocket chat example that comes with Play Framework 2.0: Có một diễn viên chứa WebSockets và giữ danh sách người dùng hiện được kết nối. Các diễn viên về cơ bản đại diện cho phòng chat cả về mặt kỹ thuật và hợp lý. Điều này hoạt động hoàn toàn tốt miễn là có một phòng trò chuyện duy nhất chạy trên một máy chủ duy nhất.
Bây giờ tôi đang cố gắng hiểu làm thế nào ví dụ này sẽ phải được mở rộng khi chúng ta nói về nhiều phòng chat năng động (phòng mới có thể được mở/đóng bất cứ lúc nào) chạy trên một cụm máy chủ (với các nút đơn được thêm hoặc xóa theo nhu cầu hiện tại). Trong trường hợp người dùng A có thể kết nối với máy chủ 1 trong khi người dùng B kết nối với máy chủ 2. Cả hai có thể đang nói chuyện trên cùng một phòng trò chuyện. Trên mỗi máy chủ sẽ vẫn có một diễn viên (đối với mỗi phòng chat?) Giữ các cá thể WebSocket để nhận và xuất bản các sự kiện (tin nhắn) cho đúng người dùng. Nhưng về mặt logic, chỉ nên có một diễn viên phòng trò chuyện trên máy chủ 1 hoặc máy chủ 2 chứa danh sách người dùng hiện được kết nối (hoặc các tác vụ tương tự).
Làm thế nào bạn sẽ đạt được điều này, tốt nhất là trong "akka nguyên chất" và không thêm một hệ thống nhắn tin bổ sung như ZeroMQ hoặc RabbitMQ?
Đây là những gì tôi đã đưa ra cho đến nay, xin vui lòng cho tôi biết liệu điều này làm cho bất kỳ ý nghĩa:
- dùng A kết nối với máy chủ 1 và một diễn viên được phân bổ chứa WebSocket của mình.
- Tác nhân kiểm tra (sử dụng Bộ định tuyến? EventBus? Cái gì khác?) Cho dù "diễn viên phòng trò chuyện" cho phòng trò chuyện hiện hoạt có tồn tại trên bất kỳ nút cụm được kết nối nào không. Vì nó không phải là nó sẽ yêu cầu tạo ra một diễn viên phòng chat mới bằng cách nào đó và sẽ gửi và nhận tin nhắn trò chuyện trong tương lai đến/từ diễn viên này.
- Người dùng B kết nối trên máy chủ 2 và một diễn viên được phân bổ cho WebSocket của mình.
- Nó cũng kiểm tra xem một diễn viên cho phòng trò chuyện được yêu cầu tồn tại ở đâu đó và tìm thấy nó trên máy chủ 1.
- Diễn viên phòng trò chuyện trên máy chủ 1 hiện hoạt động như trung tâm của phòng trò chuyện đã gửi, gửi tin nhắn cho tất cả ” "Diễn viên thành viên trò chuyện và phân phối những người đến.
Nếu máy chủ 2 ngừng hoạt động, diễn viên phòng trò chuyện sẽ phải được tạo lại/chuyển đến máy chủ 2 bằng cách nào đó, mặc dù đây không phải là mối quan tâm chính của tôi ngay bây giờ. Tôi tự hỏi nhất về cách phát hiện năng động này của các diễn viên lan truyền về các máy khác nhau, về cơ bản độc lập có thể được thực hiện bằng cách sử dụng bộ công cụ của Akka.
Tôi đã xem tài liệu của Akka trong một thời gian ngắn, vì vậy có thể tôi đang thiếu điều hiển nhiên ở đây. Nếu vậy, xin vui lòng khai sáng cho tôi :-)
tôi phải đồng ý với câu trả lời Freed và tôi có thể vừa di dời các vấn đề của một điểm duy nhất của thất bại về phía lưu trữ. Tất nhiên một cache được phân phối là một sự cải tiến nhưng như Freed nói không hoàn hảo. Thực ra tôi đang truy cập redis thông qua một 'Storage'-Actor được triển khai hiện đang xử lý các yêu cầu dữ liệu (như nhận danh sách các thành viên hiện tại). Nếu tôi hiểu đúng, để thực hiện điều này, đây sẽ là nơi để tránh một nút cổ chai với việc thực hiện cụm Akka trong tương lai. – th3hamm0r
bạn không cần phải đợi các tiện ích mở rộng phân nhóm của Akka, hãy xem các bài đăng trên blog được liên kết trong câu trả lời của tôi. Akka là một chặng đường dài để hỗ trợ phân cụm hoàn toàn. – SoftMemes
Danh sách thành viên của phòng chat có thể được tổ chức trong hai diễn viên trên hai máy chủ để chịu lỗi với các bản cập nhật được gửi tới cả hai. Xem bài báo này mô tả cách làm điều này với paxos và băm mod của id phòng chat để phân bổ máy chủ chính/phụ cho phòng chat. Sau đó, mỗi websocket khách hàng tính hai máy chủ chính nó để biết chính để truy vấn khác rơi trở lại thứ cấp nếu máy chủ đó đi xuống https://www.dropbox.com/s/iihpq9bjcfver07/VLDB-Paper.pdf (rõ ràng là tốt hơn để mua rằng bộ nhớ cache của phiên làm việc ngay bây giờ được gọi là không gian vũ trụ hơn là tự viết nó nhưng thuật toán và thiết kế của chúng rất thông tin). – simbo1905