Bir istemci (diyelim ki ClientA diyelim) belirli bir MQTT konusuna isteklerini yayınlayabileceği bir sistemim var. Aracı, önemli olması durumunda Amazon Web Services'dir. Daha sonra her zaman aynı konuya abone olan başka bir istemcim (buna MainSubscriber diyelim) var, böylece ClientA'dan gelen istekleri alabilir ve sonunda bir veritabanı işlemine dönüşen bazı işler yapabilir. Veritabanı, önemli olması halinde, DynamoDB'dir.
MainSubscriber her zaman erişilebilir / çevrimiçi olmayabileceğinden, ana abonenin yük devretme yedeği olmak için yük devretme abonesine sahip olma isteği vardır. Fikir, ana abone talebi zamanında ele almazsa, yük devretme abonesi devreye girecek ve eşdeğer iş / veritabanı işlemini yapacaktı. Buradaki zorluk, "iş" ve sonuçta ortaya çıkan "veritabanı işleminin" hem ana hem de yük devretme aboneleri tarafından çoğaltılmaması gerektiğidir.
İşte bu sistem için mantıksal bir sistem mimarisi çizimi.
-----> MainSubscriber ----
/ \
ClientA --> Broker ---> Database
\ /
---> FailoverSubscriber --
Açıkçası, böyle bir sistemle ilgili bazı zorluklar vardır:
- Ana abone, yük devretme abonesine istek üzerinde çalıştığını nasıl gösteriyor?
- Yük devretme abonesi, ana abonenin isteği almadığını ve üzerinde çalışmaya başlaması gerektiğini nasıl algılar?
- Yük devretme abonesi, aniden tekrar çevrimiçi olması ve isteği alması durumunda ana aboneyi nasıl durdurur?
- Ana ve yük devretme aboneleri arasındaki eşzamanlılık sorunlarıyla nasıl başa çıkılır?
Böyle bir şema için mevcut bir çözüm zaten mevcutsa, tekerleği yeniden icat etmek istemem. Yani, ilk sorum zaten orada bir şey olup olmadığı?
Değilse, o zaman Ana ve Yük Devretme abonesi arasında arabulucu olarak hareket etmek için DynamoDB'yi Kesinlikle Tutarlı okumalarla kullanmayı düşünüyordum. Yani, ikinci sorum bunu yapmak için iyi kurulmuş bir program olup olmadığıdır.