Ich habe ein System, in dem ein Client (nennen wir es ClientA) Anforderungen zu einem bestimmten MQTT-Thema veröffentlichen kann. Der Broker ist, falls es darauf ankommt, Amazon Web Services. Dann habe ich einen anderen Client (nennen wir ihn MainSubscriber), der immer das gleiche Thema abonniert hat, damit er Anforderungen von ClientA abholen und einige Arbeiten ausführen kann, die sich letztendlich in eine Datenbankoperation verwandeln. Die Datenbank ist, falls es darauf ankommt, DynamoDB.
Da der MainSubscriber möglicherweise nicht immer erreichbar / online ist, besteht der Wunsch, dass ein Failover-Abonnent die Failover-Sicherung des Hauptteilnehmers ist. Die Idee ist, dass, wenn der Hauptteilnehmer die Anforderung nicht rechtzeitig bearbeitet, der Failover-Teilnehmer einschalten und die entsprechende Arbeits- / Datenbankoperation ausführen würde. Die Herausforderung besteht darin, dass die "Arbeit" und die daraus resultierende "Datenbankoperation" nicht sowohl von Haupt- als auch von Failover-Abonnenten dupliziert werden dürfen.
Hier ist eine logische Systemarchitekturzeichnung für dieses System.
-----> MainSubscriber ----
/ \
ClientA --> Broker ---> Database
\ /
---> FailoverSubscriber --
Natürlich gibt es bei einem solchen System einige Herausforderungen:
- Wie zeigt der Hauptteilnehmer dem Failover-Teilnehmer an, dass er an der Anforderung arbeitet?
- Wie erkennt der Failover-Abonnent, dass der Hauptteilnehmer die Anforderung nicht angenommen hat und mit der Arbeit beginnen muss?
- Wie hält der Failover-Abonnent dann den Hauptteilnehmer zurück, falls er plötzlich wieder online geht und die Anfrage entgegennimmt?
- Wie gehe ich mit Synchronitätsproblemen zwischen Haupt- und Failover-Abonnenten um?
Ich würde das Rad lieber nicht neu erfinden müssen, wenn es für ein solches Schema bereits eine bestehende Lösung gibt. Meine erste Frage ist also, ob es da draußen schon etwas gibt.
Wenn nicht, habe ich darüber nachgedacht, DynamoDB mit stark konsistenten Lesevorgängen als Vermittler zwischen dem Haupt- und dem Failover-Abonnenten zu verwenden. Meine zweite Frage ist also, ob es dafür gut etablierte Systeme gibt.