Tôi có một hệ thống trong đó một khách hàng (hãy gọi nó là ClientA) có thể xuất bản các yêu cầu đến một chủ đề MQTT cụ thể. Nhà môi giới, trong trường hợp có vấn đề, là Amazon Web Services. Sau đó, tôi có một khách hàng khác (hãy gọi nó là MainSubscacker) luôn đăng ký cùng một chủ đề để nó có thể nhận các yêu cầu từ ClientA và thực hiện một số công việc cuối cùng chuyển thành hoạt động cơ sở dữ liệu. Cơ sở dữ liệu, trong trường hợp có vấn đề, là DynamoDB.
Vì MainSubscacker có thể không phải lúc nào cũng có thể truy cập / trực tuyến, nên có mong muốn có một thuê bao chuyển đổi dự phòng để trở thành bản sao lưu dự phòng của thuê bao chính. Ý tưởng là nếu thuê bao chính không xử lý yêu cầu kịp thời, thì thuê bao chuyển đổi dự phòng sẽ khởi động và thực hiện thao tác cơ sở dữ liệu / công việc tương đương. Thách thức là "công việc" và "hoạt động cơ sở dữ liệu" kết quả không được trùng lặp bởi cả thuê bao chính và thuê bao chuyển đổi dự phòng.
Đây là bản vẽ kiến trúc hệ thống logic cho hệ thống này.
-----> MainSubscriber ----
/ \
ClientA --> Broker ---> Database
\ /
---> FailoverSubscriber --
Rõ ràng, có một số thách thức với một hệ thống như vậy:
- Làm thế nào để thuê bao chính chỉ ra cho thuê bao failover rằng nó đang làm việc theo yêu cầu?
- Làm thế nào để thuê bao failover phát hiện ra rằng thuê bao chính đã không nhận được yêu cầu và cần phải bắt đầu làm việc với nó?
- Làm thế nào để người đăng ký failover giữ người đăng ký chính trong trường hợp bất ngờ quay trở lại trực tuyến và nhận yêu cầu?
- Làm thế nào để đối phó với các vấn đề đồng bộ giữa các thuê bao chính và chuyển đổi dự phòng?
Tôi thà không phải phát minh lại bánh xe nếu một giải pháp hiện có đã tồn tại cho sơ đồ như vậy. Vì vậy, câu hỏi đầu tiên của tôi là liệu đã có một cái gì đó ngoài kia chưa?
Nếu không, thì tôi đã nghĩ đến việc sử dụng DynamoDB với các lần đọc mạnh mẽ nhất quán để đóng vai trò trung gian hòa giải giữa thuê bao chính và người chuyển đổi dự phòng. Vì vậy, câu hỏi thứ hai của tôi là liệu có bất kỳ kế hoạch được thiết lập tốt để làm điều này?