Interfaccia di controllo domotico The One: griglia dei dispositivi connessi — luci, telecamere, sensori, controlli accessi — con indicatori di stato WebSocket e dashboard di monitoraggio del sistema
Ottimizzazione Performance

The One

Re-architettura Domotica

0
Corruzioni ID post-fix
WebSocket
Protocollo Adottato
3+
Parser Protocollo
Local-first
Architettura

Panoramica

Il Problema

Un sistema domotico esistente controllava luci, telecamere, sensori e accessi in una struttura con centinaia di dispositivi. Funzionava, ma intorno ai 100 dispositivi iniziava a collassare: latenza in salita, crash frequenti, server sotto sforzo costante. Il cliente aveva bisogno di arrivare a 1000+ dispositivi, ma con l'architettura esistente era impossibile.

L'analisi del codice ha rivelato la radice del problema: ogni dispositivo faceva polling HTTP ogni secondo per chiedere se c'erano aggiornamenti, anche quando non cambiava nulla. Con 200 dispositivi, questo significava 200 richieste al secondo in idle. Con 1000 sarebbero state 1000 richieste al secondo solo per stare fermi. Il server non reggeva.

La Soluzione

Ho re-architettato il sistema partendo dal layer di comunicazione. Ho sostituito il polling HTTP con WebSocket persistenti: i dispositivi aprono una connessione e ricevono notifiche solo quando c'è qualcosa da comunicare. Il carico in idle è sceso quasi a zero. Per ridurre ulteriormente il traffico ho introdotto serializzazione binaria custom al posto del JSON: i messaggi di stato dei dispositivi si comprimono dell'80%.

Ogni produttore di dispositivi IoT usa protocolli proprietari diversi. Ho scritto parser custom per ogni protocollo presente nella struttura, con un layer di astrazione che li espone tutti con la stessa interfaccia verso il frontend. Redux Toolkit gestisce lo stato globale di ogni dispositivo in modo prevedibile, con differenze incrementali invece di sostituzioni complete.

L'architettura è ibrida per garantire continuità: Redis locale gestisce lo stato in tempo reale e i comandi immediati (se internet cade, la struttura funziona ancora), MongoDB cloud sincronizza log e configurazioni e gestisce l'accesso remoto. Un sistema di health monitoring con auto-recovery rileva dispositivi offline o in errore e tenta il ripristino automatico prima di allertare il team.

Il Risultato

Il bug di sincronizzazione identità è stato risolto: zero corruzioni di ID nei test di validazione dopo il fix. Il crash da burst di riconnessioni è stato eliminato con backoff esponenziale sul client Socket.IO. Tre parser di protocollo sono stati scritti e integrati. La nuova architettura WebSocket, Redis e MongoDB è stata implementata e validata completamente, il rollout definitivo è stato poi rimandato per un cambio di priorità del cliente.

Funzionalità Chiave

  • Bug identità risolto: eliminato il problema di corruzione ID che affliggeva il sistema in produzione
  • Crash burst riconnessioni eliminato: backoff esponenziale sul client Socket.IO
  • 3+ parser protocolli custom scritti per integrare dispositivi di produttori diversi
  • Re-architettura WebSocket + Redis locale + MongoDB cloud: implementata, sospesa prima del rollout completo

Tecnologie Utilizzate

WebSocketRedisMongoDBRedux Toolkit