Saya memiliki sistem di mana klien (sebut saja ClientA) dapat mempublikasikan permintaan ke topik MQTT tertentu. Pialang, jika penting, adalah Amazon Web Services. Lalu saya punya klien lain (sebut saja MainSubscriber) yang selalu berlangganan ke topik yang sama sehingga bisa mengambil permintaan dari ClientA dan melakukan beberapa pekerjaan yang, pada akhirnya, berubah menjadi operasi basis data. Basis data, jika penting, adalah DynamoDB.
Karena MainSubscriber mungkin tidak selalu dapat diakses / online, ada keinginan untuk memiliki pelanggan failover untuk menjadi cadangan failover dari pelanggan utama. Idenya adalah bahwa jika pelanggan utama tidak menangani permintaan pada waktu yang tepat, maka pelanggan failover akan memulai dan melakukan operasi pekerjaan / basis data yang setara. Tantangannya adalah bahwa "pekerjaan" dan "operasi basis data" yang dihasilkan tidak boleh diduplikasi oleh pelanggan utama dan pelanggan yang gagal.
Berikut ini adalah gambar arsitektur sistem logis untuk sistem ini.
-----> MainSubscriber ----
/ \
ClientA --> Broker ---> Database
\ /
---> FailoverSubscriber --
Jelas, ada beberapa tantangan dengan sistem seperti itu:
- Bagaimana pelanggan utama menunjukkan kepada pelanggan failover bahwa itu berfungsi atas permintaan?
- Bagaimana pelanggan failover mendeteksi bahwa pelanggan utama belum mengambil permintaan dan perlu mulai mengerjakannya?
- Bagaimana cara pelanggan failover menahan pelanggan utama jika tiba-tiba kembali online dan menerima permintaan?
- Bagaimana cara menangani masalah sinkronisasi antara pelanggan utama dan pelanggan yang gagal?
Saya lebih suka tidak perlu menemukan kembali roda jika solusi yang ada sudah ada untuk skema seperti itu. Jadi, pertanyaan pertama saya adalah apakah sudah ada sesuatu di luar sana?
Jika tidak, maka saya berpikir untuk menggunakan DynamoDB dengan membaca Sangat Konsisten untuk bertindak sebagai mediator antara pelanggan Utama dan Failover. Jadi, pertanyaan kedua saya adalah apakah ada skema mapan untuk melakukan ini?