Eu tenho um sistema em que um cliente (vamos chamá-lo de ClientA) pode publicar solicitações para um tópico específico do MQTT. O corretor, caso isso importe, é o Amazon Web Services. Depois, tenho outro cliente (vamos chamá-lo de MainSubscriber), que sempre é inscrito no mesmo tópico, para que possa captar solicitações do ClientA e fazer algum trabalho que, no final, se transforma em uma operação de banco de dados. O banco de dados, caso isso importe, é o DynamoDB.
Como o MainSubscriber nem sempre pode ser acessível / on-line, há um desejo de que um assinante de failover seja o backup de failover do assinante principal. A idéia é que, se o assinante principal não manipular a solicitação em tempo hábil, o assinante de failover entrará em ação e fará a operação de trabalho / banco de dados equivalente. O desafio é que o "trabalho" e a "operação do banco de dados" resultante não devem ser duplicados pelos assinantes principal e de failover.
Aqui está um desenho lógico da arquitetura do sistema para este sistema.
-----> MainSubscriber ----
/ \
ClientA --> Broker ---> Database
\ /
---> FailoverSubscriber --
Claramente, existem alguns desafios com esse sistema:
- Como o assinante principal indica ao assinante de failover que está trabalhando na solicitação?
- Como o assinante de failover detecta que o assinante principal não atendeu à solicitação e precisa começar a trabalhar nela?
- Como o assinante de failover impede o assinante principal, caso ele repentinamente fique on-line e atenda à solicitação?
- Como lidar com problemas de sincronicidade entre assinantes principais e de failover?
Eu preferiria não ter que reinventar a roda se já existir uma solução para esse esquema. Então, minha primeira pergunta é se já existe algo lá fora?
Caso contrário, estava pensando em usar o DynamoDB com leituras fortemente consistentes para atuar como mediador entre o assinante principal e o failover. Então, minha segunda pergunta é se existe algum esquema bem estabelecido para fazer isso?