PROGETTO DI ARCHITETTURA DEL SOFTWARE E DEI DATI APPELLO: 20/07/2016 STUDENTE: NICOLÒ RONCONI MATRICOLA: 771287 PROGETTO Un’azienda si occupa della progettazione e installazione di centraline di distribuzione dell’energia elettrica. Le centraline sono sparse sul territorio e sono dotate di sensori per la misura istantanea della potenza erogata. Si deve progettare un sistema di gestione operativa (SGO) che: 1. acquisisce “in tempo reale” i dati dalle singole centraline. Il dato rilevabile dai sensori è la potenza istantanea erogata (in kw); 2. verifica se si verificano situazioni anomale (picchi di potenza anomali rispetto ai limiti previsti per la centralina), 3. nel caso di situazioni anomale, disattiva la centralina e notifica l’anomalia al servizio tecnico centrale; 4. supporta le decisioni del servizio tecnico centrale per identificare l’operatore più adatto (per disponibilità, vicinanza geografica, competenze tecniche relative al tipo di centralina) a riparare il guasto; 5. notifica all’operatore l’intervento da effettuare; 6. consente all’operatore di comunicare al servizio tecnico l’avvio dell’intervento e il suo completamento. REQUISITI FUNZIONALI Acquisire i dati dalle varie centraline sparse sul territorio Verificare situazioni anomale nelle centraline Disattivare le centraline guaste Notificare anomalie al STC Supportare STC per identificare operatore adatto a sistemare il guasto Notificare all’operatore l’intervento da svolgere Consentire all’operatore di comunicare lo stato dei lavori al STC AMBIGUITÀ Interazione con il Sistema Tecnico Centrale Interazione con Operatore Tecnico Disattivazione Centraline Supporto dell’SGO per l’identificazione dell’operatore più adatto ASSUNZIONI – INTERAZIONE CON STC Il Sistema Tecnico Centrale è un ente che comunica con l’SGO attraverso una web app. E’ un ente composto da persone che si assicurano che i guasti alle centraline vengano risolti. ASSUNZIONI – INTERAZIONE CON OPERATORE L’operatore tecnico si occupa di gestire e risolvere i guasti relativi alle centraline sparse sul territorio. L’operatore risiede nella sede/dipartimento di appartenenza in attesa di un guasto. Quando riceve una notifica dall’SGO per un guasto (può essere ideata una app/web app che riceve notifiche push oppure semplicemente con una mail o un SMS) ed è disponibile, si reca verso la centralina guasta e comunica all’SGO (che a sua volta rigira la notifica al STC) l’inizio dei lavori. Quando l’operatore ha terminato il lavoro, lo notifica all’SGO. ASSUNZIONI- DISATTIVAZIONE CENTRALINE l’SGO (grazie ai dati ricevuti dalle centraline) verifica se le centraline funzionano correttamente. In caso contrario deve disattivare la centralina. Questo può venire in via remota (disattivando automaticamente la centralina) oppure si può incaricare ad un operatore di disattivare in loco la centralina. Per la modellazione del nostro sistema utilizzeremo la disattivazione automatica in remoto. ASSUNZIONI – IDENTIFICAZIONE OPERATORE L’SGO deve supportare STC per l’identificazione di un operatore per sistemare il guasto di una centralina. L’identificazione viene fatta in primis controllando la disponibilità dell’operatore e le competenze richieste per quel tipo di guasto e per quel tipo di centralina. Infine viene scelto l’operatore più vicino geograficamente alla centralina in questione. L’SGO si prende carico di identificare l’operatore prendendo in considerazione la disponibilità e le competenze tecniche richieste. Dopodiché notifica al STC tutti gli operatori in grado di sistemare il guasto. Il STC sceglie l’operatore in base alla vicinanza geografica e lo comunica all’SGO che notifica l’intervento da svolgere all’operatore scelto. ARCHITETTURA DEL PROBLEMA Casi d’uso Data Model Diagrammi delle attività CASI D’USO DATA MODEL ACQUISIZIONE DATI CENTRALINA GESTIONI SITUAZIONI ANOMALE IDENTIFICAZIONE OPERATORE COMUNICAZIONE OPERATORE / STC ARCHITETTURA LOGICA Partizionamento Verticale Partizionamento Orizzontale PARTIZIONAMENTO ORIZZONTALE Unico componente per ricevere i dati dalle centraline, analizzarli e gestire le anomaline. Dopo aver generato un’anomalia viene gestista dal componente stesso, cosi come l’identificazione dell’operatore e la comunicazione con il STC. Molteplicità {1...N} per ogni centralina PARTIZIONAMENTO ORIZZONTALE - FOOTPRINT Astrazione 100 Sharing 80 Complessità 60 40 20 IntraFlow Frequenza 0 ExtraFlow Delay Localizzazione PARTIZIONAMENTO VERTICALE Componente per la ricezione dei dati con molteplicità {1...N} per ogni centralina Componente per il controllo dei dati e la gestione delle anomalie con molteplicità {1...N} per ogni centralina Componente per supportare il STC nell’identificare l’operatore con molteplicità {1...N} per ogni anomalia generata Componente per gestire la comunicazione tra l’operatore e il STC con moleplicità {1...N} per ogni Intervento assegnato a un Operatore PARTIZIONAMENTO VERTICALE - FOOTPRINT Astrazione 100 Sharing 80 Complessità 60 40 20 IntraFlow Frequenza 0 ExtraFlow Delay Localizzazione ARCHITETTURA LOGICA – SOLUZIONE SCELTA La soluzione sceltà è la seconda, in quanto i valori sono più bassi. In particolare il livello di astrazione è migliore in quanto ogni componente si occupa di un solo livello di astrazione. La complessità la frequenza e il ritardo si riducono. L’extra-flow si riduce in quanto i componenti interagiscono con uno o due attori. L’intra-flow è basso in quanto i componenti non si scambiano informazioni tra di loro. I componenti sono compatti (ossia lo spread dei componenti sulle dimensioni è minimo), cioè omogenei e facilmente integrati tra di loro E isolati cioè hanno poche intersezioni e dipendenze tra di loro. Un componente isolato è la chiave di un sistema scalabile in quanto indipendente ai cambiamenti di altri componenti. ARCHITETTURA CONCRETA Diagrammi di sequenza DIAGRAMMI DI SEQUENZA – ACQUISIZIONE DATI DIAGRAMMI DI SEQUENZA – GESTIONE ANOMALIA DIAGRAMMI DI SEQUENZA – IDENTIFICAZIONE OPERATORE DIAGRAMMI DI SEQUENZA – COMUNICAZIONE STC/OPERATORE DEPLOYMENT ARCHITECTURE Components diagram DEPLOYMENT – SOLUZIONE 1 Unico Componente. Tutti i componenti logici all’interno di una sola macchina. L’STC e gli operatori tecnici comunicano con il server SGO attraverso una web app. Quindi sono dotati di dispositivi con una connessione internet per scambiarsi informazioni attraverso protocollo HTTP DEPLOYMENT – SOLUZIONE 2 3 componenti fondamentali: Server Ricezione Dati: un server per l’acquisizione dati dalle centraline(attraverso i sensori) e l’update del DB Server SGO: un server centrale che si occupa di controllare i dati, di segnalare anomalie al STC e di gestire la comunicazione tra operatore e STC. Database server L’STC e gli operatori tecnici comunicano con il server SGO attraverso una web app. Quindi sono dotati di dispositivi con una connessione internet per scambiarsi informazioni attraverso protocollo HTTP DEPLOYMENT – SOLUZIONE 3 3 componenti fondamentali: Server di ricezione dati che: riceve i dati dalle centraline, elabora i dati e aggiorna il DB e se si verifica una anomalia notifica l’STC. Database Server Server SGO: gestisce la comunicazione tra STC e Operatori e supporta l’identificazione degli operatori. L’STC e gli operatori tecnici comunicano con il server SGO attraverso una web app. Quindi sono dotati di dispositivi con una connessione internet per scambiarsi informazioni attraverso protocollo HTTP DEPLOYMENT – ARCHITETTURA SCELTA L’architettura di deployment scelta è la terza in quanto il componente «Gestore Anomalia» deve controllare che la potenza erogata non supera il limite di potenza della centralina. Mettere questo componente su due nodi distinti vuol dire duplicare il carico di lavoro in quanto deve continuamente controllare lo stato del DB. Se lo si unisce al nodo che riceve i dati può automaticamente controllare il dato e successivamente inserirlo nel database. Inoltre i server di ricezione dati sono multipli(n server) in quanto le centraline inviano dati ogni secondo. In questo caso la scalabilità del sistema è ottimale in quanto, utilizzando un load balancer, si riesce a distribuire il traffico senza sovraccaricare uno specifico server. Il server SGO possiede un web server per poter comunicare con STC e gli operatori (attraverso una web app) utilizzando un servizio REST. SCELTE TECNOLOGICHE Scelte Hardware Scelte Software Stima dei costi SCELTE TECNOLOGICHE – PROTOCOLLI E RETI DI COMUNICAZIONE Sensori di rilevazione della potenza collegati ad un microcontrollore che comunica tramite protocollo MQTT via Wi-Fi. MQTT è un protocollo posizionato in cima a TCP/IP ed è stato disegnato per le situazioni in cui è richiesto un basso impatto e dove la banda è limitata. Il ‘Server Ricezione Dati’ e il ‘Server SGO’ comunicano con il ‘DB Server’ attraverso protocollo TCP/IP via Ethernet. Il server SGO per gestire la comunicazione (tra operatore e STC) e per la scelta dell’operatore, utilizza il protocollo HTTP (Implementando un servizio REST) attraverso Ethernet. L’operatore comunica con SGO con HTTP attraverso 3G/4G/WiFi con un dispositivo smart. SCELTE ARCHITETTURALI 2 Soluzioni principali: Approccio IaaS Approccio PaaS APPROCCIO IAAS Con un approccio IaaS chiediamo ad un Service Provider di fornirci l’infrastruttura adatta per il nostro sistema AWS Server Ricezione Dati: 2 Server Banda di 100 Mbit/s 16 GB RAM Processore 8GHz Load Balancer per distribuire il carico di elaborazione Server SGO: 2 Server (di cui 1 di replica) 16 GB RAM Processore 8GHz DB Server: 2 Server(di cui 1 di replica) 32 GB RAM Processore 8GHz Storage 1 TB APPROCCIO PAAS Approccio PaaS: consente di accedere alle risorse necessarie al momento opportuno Microsoft Azure 1 Service MySQL (DB Server) 1 Service Application (Server SGO) 1 datahub / event hub (Server Ricezione Dati) ARCHITETTURA – SOLUZIONE SCELTA Si è scelto di utilizzare l’approccio IaaS con AWS in quanto il sistema scalerà solo per quanto riguarda i ‘Server Ricezione Dati’. In questo caso basta aggiungere più Server in parallelo gestiti da un Load Balancer. SCELTE SOFTWARE Server Ricezione Dati Linux Server (Ubuntu 14.04 LTS) C++ per ottimizzare il processo di ricezione dati e update del DB MySQL Server SGO Linux Server (Ubuntu 14.04 LTS) Node.js v4.4.7 LTS per implementazione di un web server e API REST DB Server MySQL Server STIMA DEI COSTI DI SVILUPPO Implementazione Back-end Implementazione Web App IMPLEMENTAZIONE BACK-END Implementazione Back-end 2 Sviluppatori full-time 1 System Administrator part-time (deployment, networking, gestione server) 1 Database Administrator full-time (gestione, ottimizzazione e deployment del database) 50 giorni lavorativi + 10 giorni di scarto per lo sviluppo, testing, analisi del problema, raccolta requisiti…. Prezzo del team: 220 euro/gg medio per persona (880€/giorno) Totale: circa 52,500 € Maintenance 1 Sviluppatore full-time 1 System Administrator part-time 1 Database Administrator part-time Circa 500€/giorno On demand IMPLEMENTAZIONE WEB APP Implementazione Web App 2 Sviluppatori Front-end 1 UX Designer 20 giorni lavorativi + 5 giorni di scarto Prezzo di Team medio: 200€/giorno per persona (600€) Totale Circa: 15.000 € Maintenance 1 Sviluppatore full-time 1 UX Designer part-time 250€/giorno On demand STIMA COSTI Costi HW: circa 6.000€/anno Costi Sviluppo: circa 70.000€ ARCHITETTURA DEI DATI Schemi concettuali Schemi logici Data Integration Query SCHEMA CONCETTUALE SGO SCHEMA LOGICO SGO Centralina(ID, Tipo, Stato, LimiteKw, Longitude, Latitude) DatoCentralina(ID, PotenzaErogata, Timestamp, CentralinaID) Anomalia(ID, Timestamp, CentralinaID) Intervento(ID, Stato, TimestampCreazione, TimestampInizio, TimestampFine, AnomaliaID, OperatoreID) Operatore(ID, IndirizzoSede, Disponibilità, RuoloTecnico, Nome, Cognome) Competenza(ID, Tipo, Descrizione) Competenza_Operatore(ID, CompetenzaID, OperatoreID) SCHEMA LOGICO SGP Dipendente(CF, Nome, Cognome, CittaNascita, Ruolo, IndirizzoDipartimento) Retribuzione(Ruolo, stipendio, Livello) Presenza(ID, DipendenteCF, data) SCHEMA CONCETTUALE SGP – REVERSE ENGINEERING Attraverso il reverse engineering traduciamo lo schema logico di SGP in un modello concettuale DATA INTEGRATION (SGO – SGP) Definiamo lo schema globale ottenuto per mezzo della integrazione dei due schemi concettuali I due schemi presentano delle eterogeneità e delle corrispondenze Integrazione con Virtual Data Integration: creazione di uno schema logico globale che fornisce una interfaccia unificata dei dati. DATA INTEGRATION – ETEROGENEITÀ E CORRISPONDENZE SGO SGP Tipo Note Operatore Dipendente Iperonimia (IS-A) Si utilizza Dipendente perchè è un concetto più generale Operatore.RuoloTecnico Dipendente.Ruolo Sinonimia Si utilizza Ruolo Operatore.IndirizzoSede Dipendente.IndirizzoDipartimento Sinonimia Si utilizza IndirizzoSede Operatore.ID Dipendente.CF Sinonimia Si utilizza CF = SCHEMA GLOBALE DATA INTEGRATION – MAPPING E MODALITA’ DI INTEGRAZIONE Client Mappatura tra lo schema globale e gli schemi locali (SGO - SGP) Client Descrive come ogni elemento nello schema locale si collega a quello globale I mapping vengono espressi per mezzo di viste L’informazione viene combinata logicamente «interrogata» attraverso una interfaccia comune Global Schema View cosi View Mediator viene Attraverso un mediatore viene creato un schema (virtuale) unificato e la query viene trasformata in sotto-query una per ogni schema locale coinvolto. I risultati vengono poi uniti. Il Wrapper traduce la richiesta che proviene dal mediatore nella rappresentazione logico/fisica dello schema locale Wrapper Wrapper LocalSchema LocalSchema DB SGO DB SGP Utilizzeremo l’approccio GAV (Global as View). Lo schema globale è espresso in termini degli schemi locali CREAZIONE VISTE – DIPENDENTE CREATE VIEW G_Dipendente(CF, Nome, Cognome, cittaNascita, indirizzoSede, Disponibilità, Ruolo) AS SELECT SGO.ID AS CF, SGO.Nome, SGO.Cognome,SGP.cittaNascita, SGO.indirizzoSede, SGO.Disponibilità, SGP.Ruolo FROM SGO.Operatore AS SGO JOIN SGP.Dipendente AS SGP ON SGO.ID = SGP.CF CREAZIONE VISTE – PRESENZA, RETRIBUZIONE CREATE VIEW G_Presenza(ID, Data, G_DipendenteCF) AS SELECT ID, Data, DipendenteCF as G_DipendenteCF FROM SGP.Presenza CREATE VIEW G_Retribuzione(Ruolo, Stipendio, Livello) AS SELECT Ruolo, Stipendio, Livello FROM SGP.Retribuzione CREAZIONE VISTE – COMPETENZA, COMPETENZA_OPERATORE CREATE VIEW G_Competenza(ID,Tipo,Descrizione) AS SELECT ID, Tipo, Descrizione FROM SGO.Competenza CREATE VIEW G_Competenza_Operatore(ID,CompetenzaID,OperatoreID) AS SELECT ID,CompetenzaID,OperatoreID FROM SGO.Competenza CREAZIONE VISTE: ANOMALIA, INTERVENTO CREATE VIEW G_Intervento(ID, Stato, TimestampCreazione, AnomaliaID, OperatoreID, TimestampInizio,TimestampFine) AS SELECT ID, Stato, TimestampCreazione, AnomaliaID, OperatoreID, TimestampInizio, TimestampFine FROM SGO.Intervento CREATE VIEW G_Anomalia(ID, Timestamp, CentralinaID) AS SELECT ID, Timestamp, CentralinaID FROM SGO.Anomalia CREAZIONE VISTE: CENTRALINA, DATOCENTRALINA CREATE VIEW G_Centralina(ID, Tipo, Stato, LimiteKw, Latitude, Longitude) AS SELECT ID, Tipo, Stato, LimiteKw, Latitude, Longitude FROM SGO.Centralina CREATE VIEW G_DatoCentralina(ID, PotenzaErogata, Timestamp, CentralinaID) AS SELECT ID, PotenzaErogata, Timestamp, CentralinaID FROM SGO.DatoCentralina INTERROGAZIONI SULLO SCHEMA GLOBALE – QUERY 1 Selezionare il nome e il cognome degli operatori che hanno iniziato i lavori di manutenzione di una centralina in data = 10/05/2015 e con uno stipendio di 1.500 € SELECT Nome, Cognome FROM G_Dipendente as GD JOIN G_Intervento AS GI ON GD.CF = GI.OperatoreID JOIN G_Retribuzione AS GR ON GD.Ruolo = GR.Ruolo WHERE DATE(GI.TimestampInizio) = ’10/05/2015’ AND GR.Stipendio = ‘1500’ Unfolding SELECT OP.Nome, OP.Cognome FROM SGO.Operatore AS Op JOIN SGO.Intervento AS In ON Op.ID = In.OperatoreID JOIN SGP.Retribuzione AS Re ON Re.Ruolo = Op.RuoloTecnico WHERE DATE(In.TimestampInizio) = ’10/05/2015’ AND Re.Stipendio = ‘1500’ INTERROGAZIONI SULLO SCHEMA GLOBALE – QUERY 2 Selezionare il CF degli operatori che hanno finito i lavori di manutenzione su una centralina in data 02/02/10 e che hanno una presenza in data 01/02/03 SELECT CF FROM G_Dipendente as GD JOIN G_Intervento AS GI ON GD.CF = GI.OperatoreID JOIN G_Presenza AS GP ON GD.CF = GP.DipendenteCF WHERE DATE(GI.TimestampFine) = ’02/02/2010’ AND GP.Data = ’01/02/03’ Unfolding SELECT Op.ID FROM SGO.Operatore AS Op JOIN SGO.Intervento AS In ON Op.ID = In.OperatoreID JOIN SGP.Presenza AS Pr ON Pr..DipendenteCF = Op.ID WHERE DATE(In.TimestampFine) = ’02/02/2010’ AND Pr.Data = ’01/02/03’