Esempi applicativi pattern
architetturali
Corso di Ingegneria del Software Avanzata
a.a. 2014-2015
Docente:
Marina Mongiello
Sommario
•
•
•
•
Architectural Pattern
Pattern for cloud environment
Pattern for big data management
Architetural decision problems:
– Software gestione punti vendita di una catena di libri.
– Context-aware system: Sistema adattativo: SIEM
(Security Information and Event Monitoring)
sottosistema adaptive authentication
• Trasposizione in contesto cloud
Architettura software
Definizione
L'architettura di un sistema software è
l'insieme delle principali decisioni di progetto
relative al sistema. Le decisioni progettuali
contemplano ogni aspetto del sistema quali
la struttura, il comportamento, l'interazione
e le proprietà non funzionali
Pattern
• Un pattern documenta una soluzione ad
un problema ricorrente in un dato
contesto.
• È molto di più del solo problema di
progetto o della struttura della soluzione:
– include sia il problema che la soluzione, uniti
alla logica che li lega.
Pattern architetturali
Definizione:
• Un pattern architetturale descrive lo
schema organizzativo della struttura che
caratterizza un sistema software.
– Individua le parti del sistema a cui sono
associate responsabilità omogenee e le
relazioni che esistono tra i diversi sottoinsiemi.
Pattern broker
• Area problematica: gestione della comunicazione
Il pattern Broker:
• Viene utilizzato per la strutturazione di sistemi software
distribuiti
con
componenti
indipendenti
che
interagiscono attraverso invocazione di servizi remoti.
• È responsabile:
1.
2.
della coordinazione delle comunicazioni, come
l'inoltro delle richieste
della trasmissione dei risultati e delle eccezioni.
Broker e requisiti non funzionali
•
•
•
Costruire un sistema complesso costituito da un insieme di componenti
indipendenti ed inter operanti, piuttosto che un'applicazione monolitica, produce
maggiore flessibilità, manutenibilità e predisposizione al cambiamento.
Un sistema in cui si partizionano le funzionalità in singole componenti debolmente
accoppiate risulta potenzialmente distribuibile e scalabile. Tuttavia, quando i
componenti distribuiti devono comunicare tra loro, è necessario un inter-processo
per la gestione della comunicazione.
Se le componenti gestissero in autonomia le loro comunicazioni, il sistema
risultante riscontrerebbe diverse dipendenze e limitazioni. Ad esempio:
– il sistema diventerebbe dipendente dal meccanismo di comunicazione utilizzato,
– i client dovrebbero conoscere la posizione dei server e,
– in molti casi, le soluzioni sarebbero vincolate al linguaggio di programmazione utilizzato.
•
L'introduzione di un Broker riduce la complessità dello sviluppo di applicazioni
distribuite poiché rende la distribuzione trasparente al programmatore.
Vantaggio derivante dall’uso del broker
• L'utilizzo dell'architettura Broker permette di
bilanciare le seguenti forze in gioco:
1. Ogni componente ha accesso ai servizi degli altri
componenti attraverso un'invocazione remota e
location-transparent, ovvero indipendente dalla
posizione del componente.
2. I componenti possono essere scambiati, aggiunti o
rimossi a run-time.
3. L'architettura nasconde i dettagli implementativi
delle singole componenti e del sistema su cui i servizi
si trovano ad operare.
Schema funzionale
• I fornitori di servizio si registrano presso il
broker, rendendo così disponibili i loro servizi
ai consumatori tramite delle interfacce.
• Chi necessita di quel determinato servizio:
1. invia una richiesta attraverso il broker
2. Il broker individua il fornitore, inoltra la richiesta e
ritrasmette il risultato al richiedente o,
eventualmente, l'eccezione generata.
Broker
Architettura del broker
•
Il pattern Broker prevede la partecipazione di sei diverse componenti:
1.
2.
3.
4.
5.
6.
•
•
Client
Server
Broker
Bridge
Client-side proxy
Server -side proxy.
Un server implementa dei servizi che espongono le loro funzionalità attraverso delle
interfacce che sono costituite da operazioni e attributi. Tali interfacce sono rese disponibili
attraverso un IDL (Interface Definition Language). Ci sono server che offrono servizi comuni a
molti domini di applicazione mentre altri che forniscono funzionalità specifiche per un
determinato contesto o task.
Un client è un'applicazione che accede ai servizi di almeno un server. Per richiamare un
servizio remoto, i client si avvalgono del broker.
–
–
Dopo che un'operazione è stata eseguita, ricevono il responso o l'eccezione dal broker. L'interazione tra client e server
è basata su un modello dinamico, ovvero un modello in cui il server può anche comportarsi da client.
Il client, quindi, non ha necessitò di conoscere la posizione del server, poiché è il Broker a preoccuparsi di questo
aspetto e ad aggiungere eventualmente nuovi servizi mentre il sistema è in esecuzione.
Architettura del broker
• Il broker è un il messaggero responsabile della trasmissione delle
richieste dai client ai server e dell'invio delle risposte o delle
eccezioni al client:
– deve individuare il ricevente di una determinata richiesta attraverso un
identificatore univoco all'interno del sistema.
– offre delle API (Application Programming Interfaces) ai client e server
che includono operazioni di registrazione ed invocazione dei servizi.
1.
Quando una richiesta arriva al broker locale, esso la passa
direttamente al server interessato.
a.
2.
3.
Se il server risulta inattivo, il broker lo attiva.
Tutte le eccezioni relative all'esecuzione di un servizio sono
inoltrate dal broker al client che ha inviato la richiesta.
Se il server specificato è registrato presso un broker remoto, il
broker locale cerca una strada per raggiungere broker remoto ed
inoltra la richiesta a quest'ultimo.
Architettura del broker
• Il client-proxy rappresenta un layer tra client e broker
• il server-proxy rappresenta un layer tra server e broker.
– Questo layer aggiuntivo fornisce trasparenza e permette
ad un oggetto remoto di essere visualizzato come
componente locale.
• Il bridge è un componente opzionale usato per
nascondere i dettagli di implementazione quando due
broker diversi devono interoperare. Ad esempio:
– se due broker sono localizzati su due sistemi di rete
eterogenei o su due sistemi operativi diversi, il bridge
permette di garantire ugualmente la comunicazione tra
loro
Publish/subscribe
Publish/subscribe
•
Il pattern Publisher/Subscriber definisce una infrastruttura per la propagazione del
cambiamento in un'applicazione distribuita che permette ai componenti
identificati come "publisher" di diffondere degli eventi che trasmettono
informazioni che potrebbero interessare ad altri componenti.
– L'infrastruttura notifica a queste entità interessate, chiamate "subscriber", i cambiamenti che
si verificano.
•
I componenti nelle applicazioni distribuite sono solitamente debolmente
accoppiati ed operano indipendentemente.
– Alcune applicazioni hanno, però, necessità di propagare talune informazioni ad alcuni o a tutti
i componenti che la compongono. A tal fine, è necessario utilizzare un meccanismo che
permetta di informare questi componenti che le informazioni di cui hanno bisogno sono a
disposizione.
•
•
Il pattern Publisher/Subscriber assolve proprio a tale compito, evitando allo stesso
tempo che venga meno il basso accoppiamento e l'indipendenza tra i componenti.
Gestisce anche la modalità in cui far giungere a destinazione i vari messaggi
tenendo traccia della posizione nel sistema di tutte le componenti.
Uso del Publish/subscribe
– Ogni publisher si registra all'infrastruttura per la propagazione del
cambiamento per informarla sul tipo di eventi che vuole pubblicare.
– Similmente, ogni subscriber si registra presso l'infrastruttura per informarla
degli eventi a cui è interessato.
• L'infrastruttura utilizza queste informazioni di registrazione per instradare
gli eventi dal publisher al subscriber.
• I subscriber che ricevono determinati eventi dall'infrastruttura, possono
utilizzare le informazioni in essi contenute per coordinare il proprio lavoro.
• L'infrastruttura è la sola a conoscere i componenti collegati, dove solo
localizzati e come gli eventi sono trasmessi attraverso il sistema.
Svantaggio:
• Un inconveniente di questa "comunicazione anonima" è l'eccessivo
overhead che viene a crearsi in quelle situazioni in cui i subscriber
ricevono eventi di un certo publisher il cui contenuto non soddisfa
determinati criteri, con conseguente eliminazione delle informazioni
inviate.
Proxy
Container
Container
• Il pattern Container definisce un contenitore che fornisce
l'ambiente di esecuzione per un componente che supporta
la necessaria infrastruttura tecnica per integrare i
componenti nei possibili scenari di utilizzo
dell'applicazione, mantenendo accoppiamento lasco tra
loro.
• I componenti implementano una propria logica di business
o infrastrutturale che è utile ai fini della composizione di
un'applicazione.
• Poiché tali componenti possono essere rilasciati su diversi
applicativi o piattaforme, essi non possono implementare
scenari di esecuzione o caratteristiche tecniche specifiche
di un certo ambiente.
Container diagramma delle classi
Applicabilità del container
• Il pattern Container permette di integrare i vari
componenti in diversi scenari di deployment e di
eseguirli su diverse piattaforme senza l'esplicito
intervento del programmatore.
• Il contenitore:
– permette di inizializzare e fornire il contesto a run-time per
ogni componente che integra al suo interno
– definisce le operazioni che consentono ai componenti di
accedere ad altri componenti o a servizi esterni forniti da
un middleware.
• Il programmatore, quindi, può focalizzarsi sulla logica di
base dei propri componenti piuttosto che gestire
manualmente gli aspetti ambientali.
Observer
Struttura dell’Observer
• Pattern Observer: definisce una dipendenza uno a molti tra oggetti
diversi, in modo tale che quando uno di questo cambia il suo stato
tutti gli oggetti ad esso dipendenti ricevono una notifica di tale
cambiamento.
• Il pattern Observer descrive in che modo è possibile stabilire le
relazioni tra i vari componenti. I componenti chiave sono subject e
observer. Il subject può avere un qualsiasi numero di dipendenze di
observer. Tutti questi observer vengono interpellati nel momento in
cui il subject subisce un cambiamento di stato.
• Un effetto indesiderato comune dovuto al partizionamento del
sistema in diversi oggetti cooperanti è la necessità di mantenere la
loro consistenza nonostante la loro natura di componenti
debolmente legati.
Observer
Partecipanti dell’observer
• Nel dettaglio, i componenti totali coinvolti sono subject,
observer, concretesubject e concreteobserver.
• Il subject conosce i proprio observer e fornisce una
interfaccia per agganciare e sganciare un observer.
• L'observer definisce una interfaccia di aggiornamento per la
notifica agli oggetti collegati del cambio di stato del subject.
• Il concretesubject memorizza informazioni di stato utili al
concreteobserver e contatta l'observer quando cambia il
suo stato.
• Il concreteobserver mantiene il riferimento ad un
concretesubject ed implementa l'observer aggiornando le
proprie interfacce per essere consistente con il subject.
Model view control
Model View Control
• Il pattern Model-View-Controller (MVC) divide
un'applicazione in tre componenti:
• La componente model contiene le funzionalità di base e i dati,
• la componente view mostra le informazioni all'utente
• la componente controller gestisce l'input dell'utilizzatore.
– View e controller rappresentano l'interfaccia utente.
– Un meccanismo di propagazione dei cambiamenti garantisce la
consistenza tra la user interface e il model.
• Il pattern MVC suddivide l'applicazione interattiva in tre
aree: processing, input e output.
• Nell'ambito di applicazioni interattive, costruire un sistema
flessibile è molto costoso e può portare ad errori se
l'interfaccia utente è strettamente legata alle funzionalità di
base.
Struttura del MVC
Uso del pattern MVC
•
•
La separazione del model dalla view a dal controller permette di associare più view allo stesso
model. Se l'utente modifica i dati contenuti nel model attraverso il controller di una determinata
view, tutte le altre view ricollegate a quel model riflettono la variazione.
Oltre ai componenti model, view e controller il pattern prevede un componente che si occupa del
meccanismo di propagazione dei cambiamenti. Tale componente è solitamente rappresentato dal
pattern Observer. Questo mantiene un registro con tutti i componenti collegati ad un determinato
model. Tutte le viste e i controller si registrano presso l'Observer per restare informati su eventuali
cambiamenti. Il meccanismo di propagazione dei cambiamenti è l'unico collegamento tra il model
ed le altre componenti.
Vantaggi derivanti dall'applicazione del pattern Model-View-Controller:
1.
Più viste possono essere ricollegare allo stesso model.
2.
Le viste sono sempre aggiornate.
3.
Le viste e i controller si possono facilmente sostituire con altri anche a run-time.
4.
Essendo i tre componenti indipendenti, possono essere riutilizzati in altre applicazioni.
Svantaggi:
• incremento della complessità generale dell'applicazione
• necessità di buona potenza di calcolo quando si verificano molti aggiornamenti di stato
Database Access Layer
DAL
•
•
•
Il pattern Database Access Layer introduce un strato tra l'applicazione e i database relazionali che
fornisce una interfaccia orientata agli oggetti stabile per l'applicazione, basata su
un'implementazione vicina al modello relazionale.
I sistemi object-oriented spesso utilizzano i database relazionali per garantire la persistenza dei
propri dati. C'è, però, una debole interconnessione tra i due tipi di approcci che rende difficoltoso
implementare le relazioni tra gli oggetti e le tabelle appartenenti ai database.
Le applicazioni possono memorizzare e recuperare i loro dati chiamando un metodo dedicato
messo a disposizione dal pattern. Tale stato ha, quindi, il compito di provvedere alla mappatura tra
le strutture dati dell'applicazione e il formato dati richiesto dal modello logico del database.
Vantaggi dal punti di vista dei requisiti:
Il pattern Database Access Layer:
1.
riduce l'accoppiamento delle applicazioni object-oriented dai dettagli interni del database. Tutte
le mappature concrete sono incapsulate nello strato, pertanto l'applicazione avrà l'impressione di
memorizzare e recuperare un oggetto piuttosto che una tabella di un database.
2.
eventuali modifiche allo strato messo a disposizione dal Database Access Layer non influiscono
sugli altri componenti dell'applicazione.
3.
ha il compito di notificare all'applicazione eventuali modifiche effettuate al database da parte di
altre applicazioni. Senza questo tipo di meccanismo, i dati recuperati dall'applicazione
risulterebbero obsoleti e potrebbero portare a comportamenti imprevisti.
Pattern per cloud
Hypervisor
Watchdog
Strict consistency
Strict Consistency
•
•
•
•
•
•
•
•
Il pattern Strict Consistency permette di replicare i dati in diverse località al fine di aumentare la
disponibilità del sistema, migliorare i tempi di risposta ed evitare la perdita dei dati dovuta a
malfunzionamenti, il tutto mantenendo i dati consistenti.
Per garantire una buona tolleranza agli errori (fault tolerance), una unità di storage deve replicare i propri
dati su diversi supporti. Queste repliche memorizzano gli stessi dati, perciò nel caso in cui una di queste
repliche vada perduta è sempre possibile eseguire il ripristino delle informazioni da altri supporti.
Affinché tale processo sia praticabile, è necessario garantire la consistenza dei dati replicati in ogni istante.
Ciò può essere garantito se ogni replica viene aggiornata ogni qualvolta i dati vengono modificati.
Questo, però, può portare al decadimento delle prestazioni complessive del sistema poiché, vista la
necessità di eseguire scritture su tutti i dati replicati, se una delle repliche diventa non disponibile o se la
rete in cui risiede presenta problemi, l'intero sistema ne viene influenzato.
Il pattern Strict Consistency permette di ottenere la consistenza sui dati senza sacrificare in modo
eccessivo le prestazioni complessive del sistema.
Questo grazie alla suddivisione dei dati in sottoinsiemi, i quali permettono di accedere solo a determinate
repliche che contengono i dati interessati invece che a tutte le repliche. In questo modo, non è necessario
che siano disponibili tutte le repliche, ma solo quelle contenenti i dati di nostro interesse.
Con questo meccanismo ci si assicura che almeno una replica tra quelle create conterrà il dato più
aggiornato.
Tutte le operazioni di scrittura e lettura sulle repliche vengono eseguite come un'unica transazione, al fine
di garantire le proprietà ACID.
Stateless component
Stateless component
•
•
•
•
•
•
Il pattern Stateless Component permette di incrementare l'elasticità e la robustezza di
un'applicazione fornendo un componente esterno all'applicazione che si occupadi gestire lo stato
dei servizi utilizzati in essa ed in particolare dello scaling-out. Inoltre viene migliorata la faulttolerance complessiva.
I componenti di un'applicazione distribuita vengono rilasciati su diverse risorse dell'ambiente Cloud
per eneficiare delle sue proprietà intrinseche.
Tale struttura implica che se si verifica un guasto di uno dei componenti, la disponibilità
complessiva dell'applicazione dipende da quella delle altre risorse disponibili.
In queste situazioni, il fattore che complica maggiormente l'aggiunta o la rimozione di un
componente è il suo stato, il quale è mantenuto all'interno dell'applicazione. In caso di guasto, le
informazioni di stato vanno perse e l'istanza di un servizio deve necessariamente essere avviata con
le informazioni iniziali.
Con il pattern Stateless Component, le informazioni di stato non sono salvate internamente
all'applicazione ma sono memorizzate in uno storage esterno gestito da un componente esterno
all'applicazione, il quale riconosce ogni componente attraverso un identificativo (ID).
Si creano, quindi, diverse sessioni di stato, una per ogni istanza di un certo servizio. Quando si
verifica un guasto, il componente esterno può recuperare le informazioni di tale sessione e
ripristinare il servizio senza problemi.
Private cloud
Pattern per big data
Esempio n.1
Si vuole progettare un sistema per gestione dei punti vendita
di una catena di negozi di libri. Il cliente ha necessità di gestire
tutti i suoi punti vendita dislocati in locazioni geograficamente
diverse. Ogni punto vendita deve poter interagire con gli altri.
E' necessario che il sistema software risulti manutenibile e
flessibile al fine di garantire in futuro la possibilità di
modifiche dovuto ad un cambio di infrastruttura della catena
di negozi. E', inoltre, indispensabile garantire la sicurezza dei
dati interscambiati tra i vari punti vendita nonché la loro
consistenza e portabilità. Infine, tutte le funzionalità devono
essere fornite tramite un software usabile che garantisca un
accoppiamento basso tra le varie componenti.
Progettazione sistema per gestione punti vendita di una
catena di libri.
Requisiti non funzionali richiesti:
Manutenibilità, Flessibilità, Sicurezza, Portabilità, Low
coupling, Usabilità
Soluzione
Utilizzo modello ad oggetti distribuiti con implementazione
di meccanismo client-server.
Modello three-tier: presentazione, business logic, dati.
Interfaccia di login, ricerca libri, vendita libri, report clienti
e fornitori.

Gli aspetti non funzionali sono soddisfatti tramite l'utilizzo
dei pattern seguenti:
Pattern adottati:
Broker per Menutenibilità, Flessibilità
Proxy per Sicurezza
Database access layer per Portabilità
Model-view-controller per Low coupling, Usabilità
Soluzione proposta
• L'architettura immaginata si basa sul modello ad
oggetti distribuiti in cui viene implementato per
ogni punto vendita un sistema di tipo clientserver.
• Il client è di tipo “thin”, ovvero che presenta solo
funzionalità legate all'interfaccia per l'accesso alle
informazioni.
• Il modello client-server di ogni punto vendita è a
tre livelli (Three-tier ): presentazione (client),
business logic (application server), dati (server
dati).
Model view control
• Usabilità, Low coupling – Ogni client installa
un SW che permette di accedere al sistema
attraverso una interfaccia user-friendly.
• L'utilizzo di una visione modulare del sistema
permette di avere un basso livello di
accoppiamento tra le varie componenti.
• Questo consente modifiche sostanziali senza
influenzare le altre componenti.
Dettaglio oggetti distribuiti
Dettaglio livello di presentazione
Application server
DAL
• I dati recuperati da i DB sono rielaborati
attraverso un layer che struttura i dati in modo
tale che possano essere trasferiti nel sistema
senza problemi.
• Tale layer, inoltre, rende trasparente il sistema
alla tecnologia del RDMBS.
Dettaglio
Livello dati:
Server dati
Broker
• Broker per Manutenibilità, Flessibilità– E'
presente un Broker per la comunicazione tra i
vari sistemi remoti.
• Questo garantisce una possibile variazione del
sistema con l'aggiunta di nuovi punti vendita
(flessibilità) e la funzionalità degli altri punti
vendita quando uno è in manutenzione
(manutenibilità)
Diagramma delle classi:
pattern broker
Proxy
Sicurezza:
• L'accesso al sistema è possibile solo tramite riconoscimento dell'utente. La
comunicazione attraverso gli altri sistemi avviene con un Proxy che
comunica con il Broker utilizzando un algoritmo crittografico.
• Il Proxy si occupa di crittografare e decodificare i dati inviati ed è l'unico in
grado di contattare il Broker.
Consistenza, Persistenza dati:
• Sono presenti due server di backup: uno locale ed uno remoto condiviso
da tutti i punti vendita. Questi garantiscono persistenza e consistenza. Lo
scheduler è sempre locale e si occupa di contattare il server remoto per il
retrieval dei dati.
• Il server dati remoto deve prevedere un DB per ogni sistema. Quando
viene aggiunto un nuovo punto vendita viene creato anche un nuovo DB
remoto.
• Il DB dei fornitori è mantenuto integro e consistente con un sistema di
Backup manuale (un addetto effettua una copia manualmente).
Diagramma delle classi:
pattern proxy
Esempio n.2
Si consideri un dominio context aware nell'ambito di sistemi di
gestione di eventi.
Nello specifico, si vuole progettare un sistema/sottosistema
per adaptive authentication che, nel momento in cui un
generico l'utente ha intenzione di autenticarsi, prenda in
considerazione alcuni parametri di contesto (IP, luogo, data
ora, ecc.) e decida se consentire all'utente di autenticarsi e
con quale meccanismo farlo in base al livello di sicurezza
necessario.
Come requisito non funzionale è richiesta l'adattabilità ma allo
stesso tempo è necessario garantire un'accettabile
percentuale di falsi positivi/negativi (reliability), e la
availability.
Discussione
• Problema: progetto di un sistema context-aware:
• Sistema adattativo: SIEM (Security Information and Event Monitoring).
– Topic: 'context-aware' security: il sistema valuta eventi e policy di sicurezza in
base al contesto - quindi si adatta al contesto.
– Sistema di 'adaptive authentication', quando l'utente si autentica, il sistema
prende in considerazione una serie di parametri di contesto (IP e luogo, ora e
giorno, etc.) e decide se autenticare o meno l'utente e con quale meccanismo
(piu o meno sicuro).
• Requisiti: qui dovrebbero essere chiaramente l'adattabilità, attendibilità e
la stabilità o disponibilità: visto che se il sistema e' giù nessuno entra o
magari entrano tutti...
Applicabile anche al cloud: se una azienda sposta una applicazione nel
cloud probabilmente vuole proteggerla meglio visto che e' accessibile da
tutti via internet.
Soluzione
1. L'architettura-soluzione è immaginata come un sotto-componente di un sistema
più grande, che utilizza le funzionalità messe a disposizione da tale architettura.
Ogni utente interagisce con il sistema con delle proprietà che variano di volta in volta. A seconda del tipo
di status, l'utilizzatore è indirizzato su uno dei sistemi di sicurezza disponibili.
2. L'architettura complessiva, quindi, prevede i pattern Container, Adapter,
Publisher/Subscriber, Observer che contribuiscono tutti al miglioramento di
adattabilità, disponibilità e reliability.
I sistemi di sicurezza sono gestiti all'interno di un contenitore allo scopo di renderli
trasparenti al sistema sottostante ed al middleware.
Il contenitore ha la capacità di riconoscere un nuovo contesto e di registrarlo presso il
contenitore.
Per realizzare l'adattabilità, gli stili da utilizzare sono in genere quelli che supportano
l'interazione event-based come publish-subscribe, mentre devono essere evitati stili
che richiedono dipendenze dirette tra le componenti come le macchine virtuali o gli
oggetti distribuiti perché possono ostacolare l'adattabilità.
Bilanciamento tra parametri
L'adattamento dinamico che caratterizza la problematica può compromettere
sia l'affidabilità che la stabilità e, quindi, il modello architetturale risolutivo
deve essere il risultato del migliore bilanciamento tra tali parametri.
Nello scenario descritto è necessario integrare i componenti in diversi scenari
di deployment di applicazioni ed eseguirle su varie piattaforme di sistema
senza l'intervento esplicito del programmatore.
Inoltre vi è anche l'esigenza di avere diverse modalità di accesso alle risorse di
sistema e diverse politiche di sicurezza. Quindi è necessario inizializzare e
fornire un contesto a run-time per il componente. Questo è uno scenario
tipico per l'applicazione del Container.
Ad ulteriore garanzia di adattabilità, si utilizza il pattern Adapter il quale
permette ad ogni componente registrato a run-time di fornire al container
un'interfaccia che si adatta al contesto.
Spostamento nel cloud
•
•
•
L 'utilizzo di un Observer ha la funzione di individuare un nuovo contesto e
registrarlo presso il Container, nonché pubblicare presso il Publish/subscribe il
nuovo meccanismo di sicurezza registrato.
Vista la sua natura di sotto-componente, l'architettura progettata può essere
spostata in un contesto Cloud in cui essa diviene un singolo nodo di cui possono
usufruire più applicazioni o sistemi che desiderano integrare quella particolare
funzionalità al loro interno.
Lo spostamento permette di sfruttare le caratteristiche del modello Cloud al fine di
soddisfare alcuni requisiti non funzionali che talvolta è difficile esplicitare
all'interno della singola architettura.
– Ad esempio, si può pensare di garantire la scalabilità del sistema complessivo. Per far ciò si
può pensare di progettare un'architettura multicloud i cui servizi sono duplicati sulle varie
Cloud. In questa situazione, quando il carico su una singola cloud diviene insostenibile, questo
ha la possibilità di migrare verso una cloud vicina.
– La gestione del carico, delle istanze dei singoli servizi e delle varie Cloud avviene attraverso lo
Scalability Manager che include al suo interno diversi moduli, ognuno dei quali svolge uno
specifico compito.
– Le varie componenti dell'architettura si interfacciano attraverso un middleware. La struttura
appena descritta coincide con il pattern per il Cloud Stateless Component.
Architettura generale
Proposed solution
•
•
•
•
Publish/subscribe
Container
Observer
Adapter
Publish/subscribe
1. La classe “ConcreteContext” rappresenta il publisher.
2. Tramite il metodo “publish” contatta il P/S il quale a
seconda del tipo di contesto richiama tramite il metodo
“Callback” l'interfaccia messa a disposizione dal container,
passando contestualmente l'ID del componente da
richiamare.
3. E' il container, quindi, che si occupa di avviare il
componente corrispondete all'ID passato dal P/S.
4. Nel caso specifico, il componente è il metodo di sicurezza
da applicare al contesto.
5. L'observer, invece, interagisce con il P/S che si preoccupa
si sottoscrivere presso il P/S un nuovo subscriber
(rappresentato dal singolo metodo di sicurezza).
Container ed observer
1.
2.
3.
Il container si preoccupa di fornire l'interfaccia per gestire
dinamicamente i vari componenti al suo interno.
Il P/S richiama il container per utilizzare un componente (il
metodo di sicurezza rappresentato dal subscriber) passando come
parametro l'ID del subscriber.
L'observer si occupa di registrare presso il container un nuovo
metodo di sicurezza tramite il metodo “registernewsecurity”.
–
4.
In entrambi i casi, il container utilizza una classe “SecurityMethod”
che rappresenta il metodo di sicurezza vero e proprio.
Ogni singolo metodo di sicurezza può interagire anch'esso con il
container per accedere alle funzionalità del middleware.
Container Class diagram
Publish/subscribe class diagram
Observer class diagram
Adapter class diagram
Architettura in contesto cloud
Dettaglio architettura in contesto cloud
Esempio n.3
•
•
•
•
•
•
•
Si ha necessità di un sistema in ambiente Cloud che deve garantire dependability
(availability, fault tolerance, reliability) per la gestione Big Data prelevando le
informazioni utili da OpenStreetMap.
La piattaforma Big Data, utilizzata per gestire grandi quantità di dati dislocati in
diversi server, deve fornire un servizio orientato alla disponibilità, senza alcun
point of failure.
I requisiti sono quindi essenzialmente di dependability.
I dati devono essere replicati automaticamente su più nodi.
La replica deve avvenire mediante diversi datacenter e la sostituzione dei nodi
deve essere effettuata senza alcun downtime, in modo da garantire la continuità
del servizio.
Sono richieste, inoltre, consistenza dei dati ed elasticità, ovvero il throughput di
lettura o scrittura deve scalare linearmente con l'aggiunta di nuove macchine
(nodi), senza downtime e senza interruzione di alcun applicativo.
E' necessario, pertanto, un certo grado di ridondanza, in modo da assicurare
l'eliminazione di point of failure, che in caso di anomalia causi disfunzione
all’intero sistema.
Soluzione
• L'applicazione permette di estrapolare generiche informazioni da
Openstreetmap in previsione di successive elaborazioni ed analisi su
questi dati. L'architettura prevede quattro nodi principali:
• 1. Openstreetmap: E' il nodo rappresentante le API messe a disposizione
da OpenStreetMap con cui gli altri nodi dell'architettura Cloud devono
interfacciarsi per reperire dati.
• 2. Data Access: E' un nodo che permette a tutti gli altri nodi di accedere ai
dati presenti nei vari datacenter
• 3. Big Data Analysis: Offre servizi relativi al processing dei dati presenti
nella infrastruttura di storage dell'applicazione. Il nodo comunica con il
Data Access per reperire le informazioni dai vari datacenter e provvede poi
ad analizzare i dati.
• 4. Data Retrieval: Offre servizi con i quali il consumer può effettuare delle
query atte a reperire dei dati da OpenStreetMap. Sfrutta i servizi offerti
dal Data Access per immagazzinare i dati ottenuti da OSM nello storage
dell'applicazione.
Pattern utilizzati
• STRICT CONSISTENCY
• STATELESS COMPONENT
STRICT CONSISTENCY
• I dati sono replicati su diversi nodi per migliorare i tempi di risposta
(performance) e per evitare perdite di dati in caso di fault (faulttolerance) il tutto mentre i dati sui nodi replicati vengono
mantenuti consistenti (consistency). Si ottiene, quindi, buona
dependability.
• La consistenza è garantita perché ogni operazione di scrittura viene
effettuata in un unica transazione la quale, una volta terminata,
garantisce che tutti i nodi replicati siano allineati. In fase di lettura,
invece, è sufficiente leggere da uno solo dei nodi replicati.
• Sono previsti più datacenter, ognuno dei quali è identico agli altri
ma è collocato su una rete separata ed indipendente dalle altre. Al
suo interno, ogni datacenter dispone di più cluster, tutti con dati
diversi tra loro. Ogni cluster, invece, prevede la duplicazione di ogni
singolo database contenente una parte delle informazioni
complessive.
Diagramma generale Cloud
STATELESS COMPONENT
• Lo stato dei vari nodi è gestito da componenti esterne che
gestiscono lo scaling-out dei singoli nodi e rendere così il
sistema adattabile alle varie condizioni di lavoro (elasticità).
• L'applicazione complessiva soffre di meno dei failure dei
componenti (point of failure, fault-tolerance, Availability).
• Lo scaling-out è gestibile grazie alla presenza di più nodi
identici, i quali vengono chiamati in causa al momento
opportuno dal componente esterno (Elasticity Controller),
ovvero quando quel singolo nodo non è più in grado di
soddisfare il carico attuale o quando non è disponibile a
causa di un failure.
Dettaglio Stateless
Component
Dettaglio Strict
Consistency
Esempio n.4
• Si vuole progettare un'applicazione Cloud che
integri al suo interno i servizi offerti da
Dropbox. Si deve garantire dependability
(availability, reliability, fault tolerance) per
consentire a più utenti di utilizzare il servizio
anche in caso di fault. A livello di architettura
di servizio, il modello deve essere basato su
macchina virtuale.
Esempio n. 5
• Si vuole sviluppare un’applicazione Cloud che
permetta di effettuare acquisti utilizzando la
moneta virtuale Bitcoin. Il consumer deve
avere la possibilità di visualizzare i negozi che
accettano questo metodo di pagamento ed
accedere al proprio account Bitcoin per
confermare i pagamenti che si vogliono
effettuare. I requisiti non funzionali da
soddisfare riguardano principalmente security
e availability.
Esempio n. 6
• Si vuole progettare un'applicazione di sentiment
analysis che, attingendo alle informazioni degli
utenti disponibili su Facebook che permetta di
individuare qual è il più gradito tra due generi
musicali. Utilizzando i servizi offerti da Facebook,
l'applicazione permette di verificare se un certo
genere musicale è gradito più di un altro tra un
numero limitato di utenti. In questo scenario, si
vuole utilizzare un pattern per Big Data per
l'analisi dei dati recuperati. I requisiti non
funzionali da soddisfare risultano performance,
elasticità e consistenza dei dati.