The Challenge
Il cliente opera su infrastrutture miste (server Linux e client Windows su VM) e utilizza grandi quantità di dati provenienti da sensori durante la perforazione. Le criticità evidenziate sono:
- Necessità di unificare l’accesso ai dati, indipendentemente da dove e come vengono salvati (time series, allarmi, configurazioni, messaggi)
- Performance insufficienti nelle query storiche di InfluxDB su dataset voluminosi
- Mancanza di un’architettura modulare e scalabile per lo sviluppo di nuove applicazioni
- Necessità di integrazione con tecnologie già esistenti, evitando lock-in e favorendo il riuso
- Requisito di rendere fruibile il Data Layer anche da altri linguaggi e sistemi operativi
L’applicazione richiesta presenta esigenze di aggiornamento real-time, configurazioni dinamiche e interrogazione di grandi volumi dati.
Key Facts
- Milioni di rilevazioni ogni giorno
- Tipologie diverse di dati gestite in modo unificato: Storico, Realtime, Configurazioni, Allarmi, Warning
The solution
L’applicazione da noi proposta risolve le problematiche tecniche e funzionali in modo strutturato:
Architettura modulare
- Separazione tra Shell, plugin applicativi e Data Layer
- Uso di pattern Factory e interfacce agnostiche per supportare più tecnologie (InfluxDB, MQTT, Redis, ecc.)
Performance e ottimizzazione dati
- Implementazione di un client personalizzato per InfluxDB basato su MessagePack
- Parsing veloce e serializzazione custom per ridurre overhead e tempi di risposta
Scalabilità e riuso
- Componenti di UI e logica raccolti in librerie condivise
- Architettura adatta ad aggiungere nuove applicazioni oltre DataPlot
Compatibilità cross-platform
- Sviluppo del Data Layer con .NET Core in ottica di portabilità Linux
- Possibilità di esporre API via HTTP/WebSocket per linguaggi diversi
Gestione configurazioni e interazione realtime
- Connessioni tramite Data Layer per dati storici, allarmi, messaggi e configurazioni
- Supporto a login, sessioni condivise e notifiche in tempo reale
Approccio pragmatico e incrementale
- Uso di WPF per ridurre curva di apprendimento
- Estendibilità futura senza reingegnerizzazione completa