J'ai un système où un client (appelons-le ClientA) peut publier des demandes sur un sujet MQTT particulier. Le courtier, si cela est important, est Amazon Web Services. Ensuite, j'ai un autre client (appelons-le MainSubscriber) qui est toujours abonné au même sujet afin qu'il puisse récupérer les demandes de ClientA et faire un travail qui, au final, se transforme en opération de base de données. La base de données, au cas où cela compte, est DynamoDB.
Étant donné que le MainSubscriber peut ne pas être toujours accessible / en ligne, il existe un souhait d'avoir un abonné de basculement pour être la sauvegarde de basculement de l'abonné principal. L'idée est que si l'abonné principal ne traite pas la demande en temps opportun, alors l'abonné de basculement se déclenche et effectue l'opération de travail / base de données équivalente. Le défi est que le «travail» et «l'opération de base de données» qui en résulte ne doivent pas être dupliqués par les abonnés principaux et de basculement.
Voici un schéma d'architecture de système logique pour ce système.
-----> MainSubscriber ----
/ \
ClientA --> Broker ---> Database
\ /
---> FailoverSubscriber --
De toute évidence, un tel système présente certains défis:
- Comment l'abonné principal indique-t-il à l'abonné de basculement qu'il travaille sur la demande?
- Comment l'abonné de basculement détecte-t-il que l'abonné principal n'a pas récupéré la demande et doit commencer à y travailler?
- Comment l'abonné de basculement retient-il ensuite l'abonné principal au cas où il reviendrait soudainement en ligne et reprendrait la demande?
- Comment gérer les problèmes de synchronisation entre les abonnés principaux et les basculements?
Je préférerais ne pas avoir à réinventer la roue si une solution existante existe déjà pour un tel schéma. Donc, ma première question est de savoir s'il y a déjà quelque chose là-bas?
Sinon, je pensais utiliser DynamoDB avec des lectures fortement cohérentes pour servir de médiateur entre l'abonné principal et le basculement. Donc, ma deuxième question est de savoir s'il existe des plans bien établis pour ce faire?