Ho uno scenario in cui migliaia di dispositivi IoT, ciascuno dotato di una scheda SIM, sono distribuiti geograficamente e devono essere controllati individualmente.
Pertanto, ogni dispositivo IoT ha un client WebSocket con cui può connettersi a un sistema centrale. Poiché potrebbero esserci molte comunicazioni, i dispositivi IoT si connettono a un componente server WebSocket di back-end ( Gateway ) scalabile orizzontalmente e dietro un sistema di bilanciamento del carico.
Nel backend landscape ci sono altri componenti ( Master ) che vogliono inviare comandi o query ai dispositivi IoT in base al loro UID. Pertanto un Master deve trovare il Gateway corretto che abbia una connessione WebSocket aperta con quel dispositivo IoT specifico.
La mia idea iniziale ora è di introdurre un broker di messaggi (Kafka ?!) tra tutti i componenti Master e Gateway. Ogni messaggio Comando o Query insieme all'UID mirato viene lanciato sul broker dei messaggi e in un argomento / coda / flusso della richiesta.
Ogni gateway legge tutti i messaggi di richiesta e se un gateway ha una sessione WebSocket attiva sul dispositivo IoT con l'UID specificato, il comando o la query viene inviato al dispositivo IoT.
Sarei felice di una recensione del mio design descritto! Ci sono alcune euristiche o algoritmi comuni (progettazione di sistemi distribuiti) su cui posso contare?
Non desidero un servizio di registrazione perché introdurrebbe una chiamata in più o ciascun master creerebbe il proprio registro e se un gateway arresta il registro, è necessario un aggiornamento.