Interfaccia di controllo domotica The One che mostra griglia dispositivi real-time con 1000+ luci smart connesse, telecamere, sensori e controlli accessi, indicatori stato WebSocket, e dashboard monitoraggio salute sistema con metriche latenza <50ms
Ottimizzazione Performance

The One

Re-architettura Domotica

0
Corruzioni ID/mese
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 con il limite dei 100 dispositivi iniziava a collassare: latenza che saliva, crash frequenti, e il server sotto sforzo costante. Il cliente aveva bisogno di espandere a 1000+ dispositivi, ma con l'architettura esistente era impossibile.

L'analisi del codice ha rivelato il problema radice: 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 sarebbe stato 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, configurazioni e 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: 0 corruzioni di ID da quando il fix è in produzione. 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 completamente, ma il progetto è stato sospeso per ragioni organizzative prima del rollout definitivo.

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