클라이언트 (ClientA라고 함)가 특정 MQTT 주제에 요청을 공개 할 수있는 시스템이 있습니다. 중요한 경우 브로커는 Amazon Web Services입니다. 그런 다음 ClientA에서 요청을 가져 와서 결국 데이터베이스 작업으로 전환하는 작업을 수행 할 수 있도록 항상 동일한 주제를 구독하는 다른 클라이언트 (MainSubscriber라고 함)가 있습니다. 중요한 경우 데이터베이스는 DynamoDB입니다.
MainSubscriber에 항상 액세스 할 수있는 것은 아니므로 장애 조치 구독자가 주 구독자의 장애 조치 백업이 되길 원합니다. 주 가입자가 요청을 적시에 처리하지 않으면 장애 조치 가입자는 동일한 작업 / 데이터베이스 작업을 시작합니다. 문제는 "작업"과 결과 "데이터베이스 작업"이 주 가입자와 장애 조치 가입자에 의해 복제되어서는 안된다는 것입니다.
다음은이 시스템에 대한 논리적 시스템 아키텍처 도면입니다.
-----> MainSubscriber ----
/ \
ClientA --> Broker ---> Database
\ /
---> FailoverSubscriber --
분명히 그러한 시스템에는 몇 가지 문제가 있습니다.
- 주 가입자는 장애 조치 가입자에게 요청에 대해 작업하고 있음을 어떻게 표시합니까?
- 장애 조치 구독자는 주 구독자가 요청을 선택하지 않았으며 작업을 시작해야 함을 어떻게 감지합니까?
- 장애 조치 가입자는 갑자기 갑자기 온라인 상태로 돌아와서 요청을받을 경우를 대비하여 주 가입자를 어떻게 보류합니까?
- 주 가입자와 장애 조치 가입자 간의 동기화 문제를 처리하는 방법은 무엇입니까?
기존 솔루션이 이미 존재하는 경우 휠을 재발 명 할 필요가 없습니다. 그래서 첫 번째 질문은 이미 무언가가 있습니까?
그렇지 않다면 Main과 Failover 가입자 사이의 중재자 역할을하기 위해 Strongly Consistent 읽기와 함께 DynamoDB를 사용할 생각이었습니다. 그래서 두 번째 질문은 이것을하기위한 잘 확립 된 계획이 있는지 여부입니다.