Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Architettura dei Sistemi
Software
Luca Cabibbo
Luca Cabibbo ASWLuca Cabibbo ASW
Introduzione all’architettura del software
dispensa asw110
marzo 2020
Introduzione all'architettura del software1
Software systems are constructed to satisfy organizations’ business goals.
The architecture is a bridge between those business goals
and the final resulting systems.Len Bass, Paul Clements, and Rick Kazman
Luca Cabibbo ASW
- Fonti
Bass, L., Clements, P. and Kazman, R. Software Architecture in Practice, thirdedition. Addison Wesley, 2013. Citato nelle dispense come [SAP] Chapter 1, What Is Software Architecture?
Rozanski, N. and Woods, E. Software Systems Architecture: Working with Stakeholders Using Viewpoints and Perspectives, second edition. Addison Wesley, 2012. Citato nelle dispense come [SSA] Chapter 1, Introduction
Maier, M.W. and Rechtin, E. The Art of Systems Architecting, third edition. CRC Press, 2009.
Introduzione all'architettura del software2
Luca Cabibbo ASW
- Obiettivi e argomenti
Obiettivi
introdurre l’architettura del software e motivare la sua importanza
introdurre l’approccio dell’architettura del software
Argomenti
introduzione
sulla progettazione di sistemi complessi
introduzione all’architettura del software
approccio dell’architettura del software
architettura monolitica (e perché evitarla)
alcuni esempi
discussione
Introduzione all'architettura del software3
Luca Cabibbo ASW
* Introduzione
Il panorama dell’informatica e della tecnologia dell’informazione (IT, Information Technology) è cambiato in modo significativo nell’ultima decina di anni – e sta cambiando ancora
grazie ai computer e a Internet – e soprattutto al software che li fa funzionare – il mondo oggi è molto più connesso e l’IT sta assumendo un ruolo sempre più importante nella vita di molte persone e di molte organizzazioni
I grandi sistemi software di oggi sono tra le strutture più complesse mai costruite dagli uomini
sono composti da milioni di linee di codice, centinaia di componenti software, centinaia di tabelle nelle basi di dati, e sono eseguiti da dozzine di computer (fisici o virtuali)
sono sviluppati, amministrati e fatti evolvere da team grandi, che spesso sono anche distribuiti, e che operano su periodi di tempo estesi
Introduzione all'architettura del software4
Luca Cabibbo ASW
Esempio: Facebook
Alcuni numeri su Facebook (dati del 2019)
in Italia ha circa 32 milioni di utenti attivi mensilmente (almeno un collegamento al mese) – 25 milioni lo utilizzano ogni giorno – di cui oltre 24 milioni da dispositivi mobili
in tutto il mondo ha oltre 2.45 miliardi di utenti attivi mensilmente – 1.62 miliardi di utenti sono attivi giornalmente –di cui circa il 75% da dispositivi mobili – ogni minuto vengono inviati circa 290 mila messaggi, 510 mila commenti e vengono caricate circa 130 mila foto
Facebook si conferma ancora nel 2019 la piattaforma social più popolare
anche se le sue funzionalità sono piuttosto semplici, questi numeri (e l’obiettivo di farli crescere ancora) pongono una sfida molto difficile
Introduzione all'architettura del software5
Luca Cabibbo ASW
Esempio: Facebook
Alcuni numeri su Facebook (dati non ufficiali)
il sistema software è composto da oltre 60 milioni di linee di codice sorgente – scritto da oltre 1000 sviluppatori
lato server
il sistema è eseguito da circa 60000 nodi – di cui diverse migliaia per le basi di dati, usando una decina di DBMS (relazionali e non) diversi
il software viene aggiornato e rilasciato migliaia di volte al giorno
lato client
il sistema è acceduto dai dispositivi (fissi o mobili) degli utenti – tanti e di tanti tipi diversi: PC, tablet e smartphone –tramite uno dei tanti browser web o un client specifico
Introduzione all'architettura del software6
Luca Cabibbo ASW
Esempio: Facebook
Alcuni numeri su Facebook (dati non ufficiali)
il sistema software è composto da oltre 60 milioni di linee di codice sorgente – scritto da oltre 1000 sviluppatori
lato server
il sistema è eseguito da circa 60000 nodi – di cui diverse migliaia per le basi di dati, usando una decina di DBMS (relazionali e non) diversi
il software viene aggiornato e rilasciato migliaia di volte al giorno
lato client
il sistema è acceduto dai dispositivi (fissi o mobili) degli utenti – tanti e di tanti tipi diversi: PC, tablet e smartphone –tramite uno dei tanti browser web o un client specifico
Introduzione all'architettura del software7
Si tratta di un sistema estremamente complesso, in cui il software svolge un ruolo dominante
Luca Cabibbo ASW
Il software è molto complesso
I sistemi software di oggi sono molto complessi
perché essi devono soddisfare gli interessi di numerose parti interessate (tra cui cliente, utenti, sviluppatori)
le loro funzionalità devono essere ricche e complete
devono anche essere caratterizzati da buone qualità – come prestazioni, disponibilità, scalabilità, sicurezza, modificabilità, …
in particolare, le qualità del software costituiscono un fattore critico di successo per molti sistemi software
Inoltre, la complessità dei sistemi software è via via crescente
perché le persone, le organizzazioni e anche la società hanno aspettative sempre crescenti sul software
Introduzione all'architettura del software8
Luca Cabibbo ASW
Le sfide dello sviluppo del software
La complessità (elevata e sempre crescente) dei sistemi software presenta delle sfide formidabili a chi sviluppa il software – che riguardano tutto il ciclo di vita del software
se queste sfide non vengono affrontate in modo opportuno, i sistemi realizzati si rivelano dei fallimenti
ad es., sono caratterizzati da un livello di qualità inaccettabilmente povero, costano più del previsto, vengono consegnati in ritardo, sono difficili da far evolvere
come affrontare al meglio queste sfide?
per gestire questa complessità, molti riconoscono oggi l’importanza di un approccio sistematico alla progettazione del software, guidato dall’architettura del software
Introduzione all'architettura del software9
Luca Cabibbo ASW
Architettura del software
Che cos’è l’architettura del software?
l’architettura di un sistema software è costituita da un insieme di strutture – ciascuna delle quali comprende a sua volta un certo numero di elementi (software e non) – sono importanti anche le relazioni tra elementi (anche di strutture diverse)
esempi di strutture sono: la struttura statica del codice (moduli), la struttura dinamica (processi e thread), la struttura delle informazioni (dati e flussi di dati), l’ambiente di esecuzione (l’infrastruttura hardware e software), l’ambiente di sviluppo (i team di sviluppo)
esempi di relazioni sono: modulo-dipende-da-modulo, modulo-eseguito-da-processo, processo-eseguito-da-nodo, processo-comunica-con-processo, team-sviluppa-modulo
l’architettura del software riguarda dunque gli aspetti di strutturazione e organizzazione del software
Introduzione all'architettura del software10
Luca Cabibbo ASW
Architettura del software
Perché l’architettura del software è importante?
l’esperienza ha mostrato che l’architettura di un sistema software è il vettore principale delle qualità di quel sistema software – come prestazioni, disponibilità, scalabilità, sicurezza, modificabilità, … – che sono un interesse fondamentale per il successo di molti sistemi software
ovvero, la strutturazione e l’organizzazione “interna” di un sistema software determinano le qualità “esterne” del sistema
Introduzione all'architettura del software11
Luca Cabibbo ASW
Architettura del software
La disciplina dell’architettura del software è interessata ai sistemi software complessi
agli interessi – sia funzionali che, soprattutto, di qualità – delle diverse parti interessate allo sviluppo di un sistema
alla strutturazione fondamentale interna di un sistema
quali elementi? con che responsabilità? quali collaborazioni?
sia da un punto di vista metodologico che tecnologico
soprattutto, è interessata a comprendere le relazioni tra la struttura interna di un sistema e le sue qualità esterne
questa conoscenza è fondamentale ai fini della progettazione dei sistemi software complessi
la progettazione di un sistema software può infatti essere guidata dalle qualità fondamentali che esso deve esibire –procedendo mediante l’applicazione di principi, linee guida e soluzioni derivanti da questa conoscenza
Introduzione all'architettura del software12
Luca Cabibbo ASW
Importanza dell’architettura del software
Perché è importante comprendere le relazioni tra la struttura interna di un sistema e le sue qualità esterne?
la strutturazione e la forma interna di un sistema è una delle prime decisioni da prendere
queste decisioni sono anche le più difficili e costose da modificare più tardi
è un’ironia terribile che queste decisioni importanti e irrevocabili debbano essere prese proprio all’inizio della progettazione
per scegliere il progetto più adeguato, il progettista (l’architetto) deve essere in grado di capire come si comporterà effettivamente il sistema se viene strutturato in un certo modo
per questo, è importante conoscere le possibili decisioni di progetto alternative, nonché l’effetto di ciascuna decisione di progetto sulle caratteristiche e sulle qualità esterne del sistema
Introduzione all'architettura del software13
Luca Cabibbo ASW
* Sulla progettazione di sistemi complessi
Abbiamo detto che siamo interessati ai sistemi (software) complessi
un sistema complesso è un sistema che deve soddisfare numerosi interessi, di diverse parti interessate – interessi funzionali, sociali e ambientali, funzionamento in condizioni specifiche, sicurezza delle persone, ... – nonché altri interessi pragmatici – tempi, costi, ...
ma come progettare e realizzare un sistema complesso?
Introduzione all'architettura del software14
Luca Cabibbo ASW
Sistemi e complessità
Innanzitutto, che cos’è un “sistema” “complesso”?
Sistema
un insieme di elementi distinti
che sono connessi o correlati
e lavorano assieme per realizzare una combinazione significativa di funzionalità e qualità
questa combinazione di funzionalità e qualità non può essere realizzata individualmente dai singoli elementi
Complesso
composto di parti interconnesse o intrecciate
Si noti come entrambe le definizioni parlano di elementi o parti, nonché di relazioni e interconnessioni tra le parti
Introduzione all'architettura del software15
Luca Cabibbo ASW
Affrontare la complessità con le strutture
In che modo è possibile affrontare problemi/progettare sistemi caratterizzati da un alto livello di complessità?
partizionare (ovvero, decomporre) il problema/sistema via via in unità/parti più piccole e più semplici
Affinché sia possibile gestire la complessità di un sistema, è sufficiente che le varie parti siano “semplici”?
no, è necessario che anche le interconnessioni siano “semplici”!
ovvero, vanno utilizzati criteri di partizionamento/ decomposizione che, per il problema/sistema in esame, siano in grado di ridurre opportunamente anche la complessità delle interconnessioni tra le parti
La scelta delle parti e delle interconnessioni tra di esse definisce la “struttura” di un sistema
Introduzione all'architettura del software16
Luca Cabibbo ASW
Interessi e utilità
Nella progettazione di un sistema complesso, la struttura del sistema è importante – ma l’utilità del sistema è più importante
per determinare l’utilità di un sistema, bisogna certamente comprendere quali sono gli obiettivi desiderati – ovvero, il problema o i motivi per cui il sistema viene costruito
per questo, la progettazione del sistema deve basarsi sulle parti interessate al sistema e sui loro interessi (soprattutto di qualità)
inoltre, bisogna comprendere le relazioni tra struttura e qualità
per valutare se il sistema progettato può raggiungere effettivamente gli obiettivi desiderati
spesso, inoltre, la caratterizzazione del problema da affrontare non è fissata o ben definita fin dall’inizio
bisogna allora identificare una coppia problema-soluzione per massimizzare la soddisfazione delle parti interessate
Introduzione all'architettura del software17
Luca Cabibbo ASW
- Architettura e ingegneria
Dopo aver introdotto alcuni aspetti importanti nella progettazione di sistemi complessi, possiamo discutere le due discipline che si occupano appunto della progettazione e costruzione di sistemi complessi – l’architettura e l’ingegneria
in pratica, l’architettura e l’ingegneria rappresentano due ruoli estremi – in uno spettro continuo – della pratica della progettazione di sistemi complessi
la progettazione di sistemi complessi richiede spesso un approccio in parte ingegneristico e in parte architetturale – in parte scienza, in parte arte
Introduzione all'architettura del software18
Luca Cabibbo ASW
Che cosa è l’ingegneria
Engineering [Wikipedia, 2016] is the application of mathematics, empirical evidence and scientific, economic, social, and practical knowledge in order to invent, innovate, design, build, maintain, research, and improve structures, machines, tools, systems, components, materials, and processes.
A possible definition of “engineering” is:
The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation or safety to life and property.
Engineering is a broad discipline which is often broken down into several sub-disciplines. These disciplines concern themselves with differing areas of engineering work.
Introduzione all'architettura del software19
Luca Cabibbo ASW
Che cosa è l’architettura
Architecture [Wikipedia, 2016] is both the process and product of planning, designing and constructing buildings and other physical structures. Architectural works, in the material form of buildings, are often perceived as cultural symbols and as works of art. Historical civilizations are often identified with their surviving architectural achievements.
“Architecture” can mean:
A general term to describe buildings and other physical structures.
The art and science of design buildings and some (nonbuilding) structures.
The style of design and method of construction of buildings and other physical structures.
The knowledge of art, science & technology and humanity.
The practice of an architect, ...
The design activity of the architect, from the macro-level (urban design, landscape architecture) to the micro-level (construction details and furniture).
Architecture has to do with planning and designing form, space and ambience to reflect functional, technical, social, environmental and aesthetic considerations. It requires the creative manipulation and coordination of materials and technology, and of light and shadow. Often, conflicting requirements must be resolved. The practice of Architecture also encompasses the pragmatic aspects of realizing buildings and structures, including scheduling, cost estimation and construction administration. Documentation produced by architects, typically drawings, plans and technical specifications, defines the structure and/or behavior of a building or other kind of system that is to be or has been constructed.
The word “architecture” has also been adopted to describe other designed systems, especially in information technology.
Introduzione all'architettura del software20
Luca Cabibbo ASW
Ingegneria e architettura a confronto
Ingegneria
riguarda principalmente quantità misurabili
uso di strumenti analitici, derivati da matematica e fisica
processo deduttivo – procede da postulati e principi primi verso determinazioni più particolari
il contesto/problema è compreso
ambisce all’ottimizzazione tecnica
interessata a costi quantificabili
più scienza
Architettura
riguarda principalmente qualità non misurabili
uso di strumenti e linee guida, basati su esperienze apprese in pratica
processo induttivo – procede dall’esperienza, per elaborare leggi astratte e universali
il contesto/problema è inizialmente mal strutturato
ambisce alla soddisfazione del cliente
interessata al valore qualitativo
più arte
Introduzione all'architettura del software21
Luca Cabibbo ASW
Progettazione di sistemi complessi
Metodologie/approcci ingegneristico/architetturali
normativo (scienza)
basato su soluzioni pre-esistenti – “deve essere così”
ad es., realizzare un’ulteriore semplice applicazione web
razionale (scienza)
basato su principi – consente di produrre soluzioni “innovative”
ad es., accoppiamento e coesione
partecipativo (arte)
riconosce la complessità dovuta alla presenza di una molteplicità di parti interessate – l’obiettivo è il consenso – spesso sono necessari compromessi
ad es., modello a tre picchi
euristico (arte)
basato su euristiche che codificano del “buon senso comune” motivato da esperienza collettiva
ad es., pattern, architetture di riferimento, tattiche, … Introduzione all'architettura del software22
Luca Cabibbo ASW
- Perché un corso di architettura del software?
Perché un corso di Architettura del software – anziché un corso di Ingegneria del software?
come avremo modo di vedere, questo corso enfatizza più gli aspetti “architetturali” che quelli “ingegneristici”
ad esempio
è interessato alle qualità del software
poiché alcune qualità sono contrastanti tra di loro, sono in genere necessari dei compromessi tra qualità – che richiedono una negoziazione degli interessi delle parti interessate
la progettazione è basata su principi, linee guida e soluzioni derivanti da buone esperienze passate apprese in pratica
in ogni caso, la disciplina dell’Architettura del software è considerata oggi una branca della disciplina più ampia dell’Ingegneria del software
Introduzione all'architettura del software23
Luca Cabibbo ASW
* Introduzione all’architettura del software
I grandi sistemi software di oggi sono tra le strutture più complesse mai costruite dagli uomini – e la loro complessità è via via crescente
per gestire questa complessità, molti riconoscono oggi l’importanza di un approccio sistematico alla progettazione del software, guidato dall’architettura del software
Introduzione all'architettura del software24
Luca Cabibbo ASW
Funzionalità e qualità del software
Gli interessi (ovvero, le caratteristiche desiderate) per i sistemi software riguardano sia le funzionalità che altre importanti proprietà che ne riflettono la qualità – ad esempio
affidabilità – il software deve effettivamente fornire le funzionalità richieste
disponibilità – il software deve essere funzionante in modo continuato nel tempo
prestazioni e scalabilità – il software deve rispettare dei vincoli temporali – anche a fronte di un incremento del carico di lavoro
sicurezza – il software deve resistere ad usi non autorizzati –ma al tempo stesso deve fornire servizi ai suoi utenti legittimi
modificabilità – il software deve essere flessibile a fronte di cambiamenti inevitabili dopo il suo rilascio
usabilità, verificabilità, interoperabilità, economicità, risparmio energetico, ...
Introduzione all'architettura del software25
Luca Cabibbo ASW
Qualità del software
List of system quality attributes [Wikipedia, 2020]
Introduzione all'architettura del software26
accessibility accountability accuracy adaptability administrability affordability agility auditability autonomy availability compatibility composability configurability correctness credibility customizability debugability degradability determinability demonstrability dependability deployability
discoverability distributability durability effectiveness efficiency evolvability extensibility failure transparency fault-tolerance fidelity flexibility inspectability installability integrity interchangeability interoperability learnability localizability maintainability manageability mobility modifiability
modularity observability operability orthogonality portability precision predictability process capabilities producibility provability recoverability relevance reliability repeatability reproducibility resilience responsiveness reusability robustness safety scalability seamlessness
self-sustainability serviceability (a.k.a.
supportability) securability simplicity stability standards compliance survivability sustainability tailorability testability timeliness traceability transparency ubiquity understandability upgradability (non) vulnerability usability
Luca Cabibbo ASW
Importanza delle qualità del software
In generale, un fattore critico per il successo di un’organizzazione è la costruzione di sistemi software in grado di soddisfare i requisiti – non solo funzionali, ma anche di qualità – non solo correnti, ma anche futuri – di quell’organizzazione
oggi molte organizzazioni stanno usando la tecnologia dell’informazione (IT) non più solo per automatizzare il proprio funzionamento interno, ma anche per alimentare un’innovazione continua e ottenere un vantaggio competitivo
infatti, molte organizzazioni di successo sono oggi anche “organizzazioni basate sul software”, anche se operano in domini applicativi diversi dall’IT – come Ford, FedEx, DreamWorks, …
per non parlare, ovviamente, delle organizzazioni di successo strettamente legate all’IT, il cui business è centrato sui propri sistemi software – come Amazon, Google e Facebook, ma anche Netflix, Spotify e Uber
Introduzione all'architettura del software27
Luca Cabibbo ASW
Importanza delle qualità del software
In generale, un fattore critico per il successo di un’organizzazione è la costruzione di sistemi software in grado di soddisfare i requisiti – non solo funzionali, ma anche di qualità – non solo correnti, ma anche futuri – di quell’organizzazione
in particolare, i requisiti di qualità rivestono un ruolo fondamentale nel successo di questi sistemi
il mancato raggiungimento di alcuni livelli richiesti minimi di qualità può rendere un sistema inaccettabile e dunque inutilizzabile – anche se le funzionalità sono realizzate in modo impeccabile
Introduzione all'architettura del software28
Luca Cabibbo ASW
Che cos’è l’architettura del software?
Ecco alcune possibili definizioni di “architettura del software”
l’architettura software di un sistema è l’insieme delle strutture del sistema, necessarie per ragionare su di esso, che comprendono elementi software, le relazioni tra di essi, e le loro proprietà [SAP]
l’architettura software è il fulcro per i sistemi altamente complessi, su scala grandissima e altamente interoperabili, di cui abbiamo bisogno ora e nel futuro [Rolf Siegers]
Qual è la relazione tra queste due definizioni – che sono apparentemente molto lontane tra di loro?
l’architettura del software si occupa della struttura interna di un sistema software – perché questa struttura interna ha un’influenza significativa sulle qualità del sistema
Introduzione all'architettura del software29
Luca Cabibbo ASW
Benefici dell’architettura del software
L’architettura del software è importante per molteplici ragioni
l’architettura è il vettore principale delle qualità di un sistema software – come prestazioni, modificabilità e sicurezza –nessuna delle quali può essere ottenuta senza una visione architetturale unificante [http://www.sei.cmu.edu/architecture/]
nelle fasi iniziali di un progetto, l’analisi dell’architettura consente di garantire che l’approccio di progettazione prescelto conduca a un sistema accettabile
l’architettura serve da progetto sia per il sistema che per il piano/progetto relativo al suo sviluppo, e definisce le assegnazioni di lavoro per i team di sviluppo
l’architettura ha un ruolo chiave anche per le attività di manutenzione successive al rilascio del sistema
in breve, l’architettura è il collante concettuale che tiene assieme ogni fase del progetto, per ciascuna delle sue numerose parti interessate
Introduzione all'architettura del software30
Luca Cabibbo ASW
Benefici dell’architettura del software
L’architettura del software è importante per molteplici ragioni un’architettura inibirà o abiliterà il controllo degli attributi di qualità di un sistema
l’architettura è un vettore delle decisioni più importanti e più difficili da cambiare
l’analisi di un’architettura abilita una valutazione precoce delle qualità di un sistema
le decisioni prese in un’architettura permettono di ragionare sui cambiamenti e di gestirli, mentre il sistema evolve
un’architettura documentata migliora la comunicazione tra le parti interessate
un’architettura definisce un insieme di vincoli sulla successiva implementazione
l’architettura influenza la struttura di un’organizzazione, e viceversa
un’architettura può definire le basi per una prototipazione evoluzionaria
un’architettura è l’elaborato chiave che consente all’architetto e al project manager di ragionare su costi e tempi di sviluppo
è possibile creare un’architettura come un modello trasferibile e riutilizzabile che forma il cuore di una famiglia di prodotti
lo sviluppo basato sull’architettura focalizza l’attenzione sull’assemblaggio di componenti, piuttosto che semplicemente della loro creazione
riducendo le alternative di progettazione, l’architettura veicola la creatività degli sviluppatori, riducendo la complessità del progetto e del sistema
un’architettura può essere la base per formare un nuovo membro di un team
Introduzione all'architettura del software31
Luca Cabibbo ASW
* Approccio dell’architettura del software
L’approccio dell’architettura del software
riconosce l’importanza degli interessi – sia funzionali che, soprattutto, di qualità – di tutte le parti interessate allo sviluppo di un sistema software
come prestazioni, sicurezza, verificabilità, modificabilità, ...
si occupa della strutturazione fondamentale del sistema –ovvero, della decomposizione del sistema in elementi e delle loro inter-relazioni
quali elementi? con che responsabilità? quali relazioni e collaborazioni?
come disciplina, si occupa della comprensione delle relazioni tra la struttura interna del sistema e le sue qualità esterne
affinché la conoscenza distillata dalle esperienze passate possa essere sfruttata per progettare e sviluppare sistemi che possiedono le qualità richieste
Introduzione all'architettura del software32
Luca Cabibbo ASW
Approccio dell’architettura del software
Ecco alcune buone “esperienze passate” che è possibile applicare nell’architettura software
viste e punti di vista architetturali
un sistema è composto da più strutture o viste – indipendenti ma correlate
in genere, ciascuna struttura sostiene interessi principali diversi (principio di separazione degli interessi)
pattern architetturali e architetture di riferimento
esperienze significative nella progettazione e realizzazione di architetture software, che possono essere facilmente riusate
tattiche architetturali e prospettive architetturali
altre opzioni di progettazione, affinché il sistema possa sostenere delle specifiche qualità
Introduzione all'architettura del software33
Luca Cabibbo ASW
Viste e punti di vista architetturali
L’architettura di un sistema software è costituita da più strutture (o viste architetturali) – indipendenti ma correlate
ad es., la struttura del codice, la struttura dei processi, la struttura dei dati, l’ambiente di esecuzione e quello di sviluppo
ciascuna vista è relativa a un diverso punto di vista e si occupa di un insieme distinto di interessi (principio di separazione degli interessi)
ad es., la modificabilità dipende soprattutto dalla struttura del codice, le prestazioni dalla struttura dei processi, la disponibilità e la scalabilità dall’ambiente di esecuzione, …
Introduzione all'architettura del software34
Luca Cabibbo ASW
Pattern architetturali
I pattern sono una modalità diffusa di condivisione di esperienze progettuali, in varie discipline
in generale, un pattern software ha lo scopo di condividere una soluzione provata ed ampiamente applicabile ad un particolare problema di progettazione, descritta in una forma standard che possa essere facilmente riusata
un pattern architetturale [POSA] codifica un’esperienza significativa nella realizzazione di un’architettura software
affronta un problema – un tipo di sistema, con una certa combinazione di requisiti (soprattutto di qualità) da raggiungere
propone una soluzione – in termini di tipologie di elementi, relazioni tra elementi e criteri di decomposizione – da usare in genere nell’ambito di una singola vista
discute la soluzione – in termini delle diverse qualità su cui la soluzione ha impatto
Introduzione all'architettura del software35
Luca Cabibbo ASW
Tattiche e prospettive architetturali
I pattern architetturali vengono di solito applicati per identificare una decomposizione iniziale del sistema che soddisfa alcunequalità fondamentali
il progetto iniziale deve poi essere raffinato, affinché il sistema esibisca tutte le qualità richieste
inoltre, la progettazione per alcune qualità richiede spesso considerazioni specializzate, che possono anche riguardare più viste
A tal fine esistono delle ulteriori guide e opzioni per la progettazione per qualità specifiche di un sistema – tra cui
una tattica architetturale [SAP] è una decisione di progetto che influenza il controllo di un attributo di qualità
una prospettiva architetturale [SSA] è una collezione di attività, tattiche e linee guida per far sì che un sistema esibisca un insieme di proprietà di qualità correlate
Introduzione all'architettura del software36
Luca Cabibbo ASW
* Architettura monolitica (e perché evitarla)
Per avere un’intuizione del perché l’architettura (ovvero, la strutturazione interna) di un sistema software può avere un impatto sulle qualità esterne del sistema, è utile pensare ai sistemi “monolitici” (che non hanno una strutturazione interna)
Un sistema software è monolitico – ovvero, ha un’architettura monolitica – se tutti i suoi aspetti funzionali (come la logica applicativa, l’interfaccia utente, la gestione dei dati) sono intrecciati e gestiti mediante un singolo elemento – anziché mediante più elementi architetturali distinti
questa monoliticità può riguardare una o più viste/strutture architetturali
un sistema completamente monolitico è composto da un solo modulo di codice (e da una singola unità di rilascio) –eseguito in un singolo processo – su un singolo nodo –sviluppato e mantenuto da un singolo team di sviluppo
Introduzione all'architettura del software37
Luca Cabibbo ASW
Architettura monolitica – vantaggi
Un sistema monolitico può presentare dei vantaggi
nel caso di semplici applicazioni, può infatti essere semplice da sviluppare e rilasciare
in ogni caso, molte applicazioni vengono inizialmente realizzate in modo monolitico (rispetto a una o più strutture architetturali)
Introduzione all'architettura del software38
Luca Cabibbo ASW
Architettura monolitica – svantaggi
Tuttavia, l’architettura (completamente) monolitica non è adatta a sistemi complessi – poiché può essere difficile o impossibile garantire alcune qualità – ad esempio
prestazioni – non è prevista nessuna forma di concorrenza
disponibilità – non è tollerante al guasto dell’unico nodo o al fallimento dell’unico processo
scalabilità – non è predisposta per la replicazione su più nodi
modificabilità – le modifiche sono difficili e costose, poiché
ogni modifica può potenzialmente impattare qualunque parte dell’unico modulo da cui è composta
l’unico team di sviluppo deve avere una conoscenza complessiva di questo unico modulo
dopo una modifica, il sistema deve essere verificato e poi rilasciato nella sua interezza
…Introduzione all'architettura del software39
Luca Cabibbo ASW
L’architettura monolitica è un anti-pattern
Per questo, l’architettura monolitica è considerata un anti-pattern –chiamato Big Ball of Mud (“Grossa Palla di Fango”) una “Grossa Palla di Fango” è una giungla di “spaghetti code”,
strutturata a caso, scomposta, sciatta, che si tiene insieme con nastro isolante e filo da imballo questi sistemi mostrano segni inequivocabili di crescita irregolare e di
riparazioni ripetute e basate su espedienti le informazioni sono condivise in modo promiscuo tra elementi distanti
del sistema, spesso ad un punto tale che quasi tutte le informazioni importanti sono globali o duplicate la struttura complessiva del sistema potrebbe non essere mai stata
ben definita – se lo fosse, essa potrebbe essere corrosa e non più riconoscibile i programmatori con un briciolo di sensibilità architetturale fuggono da
questi acquitrini: solo coloro che sono indifferenti all’architettura e, forse, si sentono a proprio agio con l’inerzia del compito quotidiano di rattoppare i buchi in queste dighe fallite, si accontentano di lavorare su tali sistemi
Introduzione all'architettura del software40
Luca Cabibbo ASW
Scappare dall’inferno del monolito
Come evitare questi problemi – e perseguire un insieme di qualità desiderate?
bisogna adottare un’architettura non monolitica, ovvero usare un sistema con un’opportuna strutturazione interna
ecco alcuni esempi di modalità di organizzazione interna del software, basate su diverse tipologie di elementi software
architettura a strati per il codice – favorisce lo sviluppo e l’evoluzione del codice
architettura a plug-in (ad es., per i browser web e gli IDE) –consente di definire facilmente funzionalità aggiuntive
architettura a componenti (per applicazioni di tipo enterprise) – le tecnologie sottostanti sostengono molte qualità
architettura a microservizi (per applicazioni su scala globale) – sostiene livelli elevati di scalabilità, disponibilità e modificabilità
Introduzione all'architettura del software41
Luca Cabibbo ASW
* Alcuni esempi
Seguono alcuni esempi di architettura di sistemi software
l’enfasi è sulle qualità, gli elementi architetturali e le loro relazioni
alcuni di questi casi (ma non tutti) saranno analizzati meglio nel seguito del corso
Introduzione all'architettura del software42
Luca Cabibbo ASW
- Esempio – Piattaforma Eclipse (v3)
Introduzione all'architettura del software43
http://www.eclipse.org/articles/Whitepaper-Platform-3.1/eclipse-platform-whitepaper.pdf(2006)
Luca Cabibbo ASW
Piattaforma Eclipse – obiettivi
The Eclipse Platform is designed and built to meet the following requirements:
Support the construction of a variety of tools for application development.
Support an unrestricted set of tool providers, including independent software vendors (ISVs).
Support tools to manipulate arbitrary content types (e.g., HTML, Java, C, JSP, EJB, XML, and GIF).
Facilitate seamless integration of tools within and across different content types and tool providers.
Support both GUI and non-GUI-based application development environments.
Run on a wide range of operating systems, including Windows®, LinuxTM, Mac OS X, Solaris, AIX, and HP-UX.
Capitalize on the popularity of the Java programming language for writing tools.
The Eclipse Platform’s principal role is to provide tool providers with mechanisms to use, and rules to follow, that lead to seamlessly-integrated tools. These mechanisms are exposed via well-defined API interfaces, classes, and methods. The Platform also provides useful building blocks and frameworks that facilitate developing new tools.
Introduzione all'architettura del software44
Luca Cabibbo ASW
Piattaforma Eclipse – obiettivi
The Eclipse Platform is designed and built to meet the following requirements:
Support the construction of a variety of tools for application development.
Support an unrestricted set of tool providers, including independent software vendors (ISVs).
Support tools to manipulate arbitrary content types (e.g., HTML, Java, C, JSP, EJB, XML, and GIF).
Facilitate seamless integration of tools within and across different content types and tool providers.
Support both GUI and non-GUI-based application development environments.
Run on a wide range of operating systems, including Windows®, LinuxTM, Mac OS X, Solaris, AIX, and HP-UX.
Capitalize on the popularity of the Java programming language for writing tools.
The Eclipse Platform’s principal role is to provide tool providers with mechanisms to use, and rules to follow, that lead to seamlessly-integrated tools. These mechanisms are exposed via well-defined API interfaces, classes, and methods. The Platform also provides useful building blocks and frameworks that facilitate developing new tools.
Introduzione all'architettura del software45
È la descrizione degli obiettivi della piattaforma Eclipse.
Si noti che si tratta principalmente di requisiti di qualità.
Questi obiettivi possono essere raggiunti con un’architettura (completamente) monolitica?
Luca Cabibbo ASW
Piattaforma Eclipse – architettura a plug-in
A plug-in is the smallest unit of Eclipse Platform function that can be developed and delivered separately. Usually a small tool is written as a single plug-in, whereas a complex tool has its functionality split across several plug-ins. Except for a small kernel known as the Platform Runtime, all of the Eclipse Platform's functionality is located in plug-ins.
Plug-ins are coded in Java. A typical plug-in consists of Java code in a Java Archive (JAR) library, some read-only files, and other resources such as images, web templates, message catalogs, native code libraries, etc. ...
Each plug-in has a plug-in manifest declaring its interconnections to other plug-ins. The interconnection model is simple: ...
On start-up, the Platform Runtime discovers the set of available plug-ins, reads their manifests, and builds an in-memory plug-in registry. ...
A plug-in is activated when its code actually needs to be run. Once activated, ...
By determining the set of available plug-ins up front, and by supporting a significant exchange of information between plug-ins without having to activate any of them, the Platform can provide each plug-in with a rich source of pertinent information about the context in which it is operating. ...
Introduzione all'architettura del software46
Luca Cabibbo ASW
Piattaforma Eclipse – architettura a plug-in
A plug-in is the smallest unit of Eclipse Platform function that can be developed and delivered separately. Usually a small tool is written as a single plug-in, whereas a complex tool has its functionality split across several plug-ins. Except for a small kernel known as the Platform Runtime, all of the Eclipse Platform's functionality is located in plug-ins.
Plug-ins are coded in Java. A typical plug-in consists of Java code in a Java Archive (JAR) library, some read-only files, and other resources such as images, web templates, message catalogs, native code libraries, etc. ...
Each plug-in has a plug-in manifest declaring its interconnections to other plug-ins. The interconnection model is simple: ...
On start-up, the Platform Runtime discovers the set of available plug-ins, reads their manifests, and builds an in-memory plug-in registry. ...
A plug-in is activated when its code actually needs to be run. Once activated, ...
By determining the set of available plug-ins up front, and by supporting a significant exchange of information between plug-ins without having to activate any of them, the Platform can provide each plug-in with a rich source of pertinent information about the context in which it is operating. ...
Introduzione all'architettura del software47
Questo è la descrizione di un’architettura in cui c’è un elemento software chiamato Platform Runtime (“un piccolo kernel”), nonché altri elementi chiamati plug-in.
Descrive le caratteristiche esterne che deve fornire un plug-in, nonché le modalità
di comunicazione tra ciascun plug-in e il Platform Runtime.
Descrive il raggiungimento degli obiettivi di qualità sulla base di questa
organizzazione.
Luca Cabibbo ASW
- Esempio – Java Enterprise Edition
Da Java EE Tutorial – docs.oracle.com/javaee/7/tutorial/doc/ Developers today increasingly recognize the need for distributed,
transactional, and portable applications that leverage the speed, security, and reliability of server-side technology. Enterprise applications provide the business logic for an enterprise. They are centrally managed and often interact with other enterprise software. In the world of information technology, enterprise applications must be designed, built, and produced for less money, with greater speed, and with fewer resources.
With the Java Platform, Enterprise Edition (Java EE), development of Java enterprise applications has never been easier or faster. The aim of the Java EE platform is to provide developers a powerful set of APIs while shortening development time, reducing application complexity, and improving application performance.
...
Introduzione all'architettura del software48
Luca Cabibbo ASW
- Esempio – Java Enterprise Edition
Da Java EE Tutorial – docs.oracle.com/javaee/7/tutorial/doc/ Developers today increasingly recognize the need for distributed,
transactional, and portable applications that leverage the speed, security, and reliability of server-side technology. Enterprise applications provide the business logic for an enterprise. They are centrally managed and often interact with other enterprise software. In the world of information technology, enterprise applications must be designed, built, and produced for less money, with greater speed, and with fewer resources.
With the Java Platform, Enterprise Edition (Java EE), development of Java enterprise applications has never been easier or faster. The aim of the Java EE platform is to provide developers a powerful set of APIs while shortening development time, reducing application complexity, and improving application performance.
...
Introduzione all'architettura del software49
Si noti l’enfasi della piattaforma Java Enterprise Edition su alcuni
requisiti di qualità.
Luca Cabibbo ASW
Modello applicativo per Java EE
Introduzione all'architettura del software50
Luca Cabibbo ASW
Modello applicativo per Java EE
Introduzione all'architettura del software51
È una descrizione dell’architettura delle applicazioni che possono eseguite in un
application server Java EE.
Ma come effettuare la decomposizione architetturale di un’applicazione se la
tecnologia target è Java EE?
Quali qualità possiedono le applicazioni per la piattaforma Java EE?
Come sono assicurate queste qualità?
Luca Cabibbo ASW
Container Java EE
Introduzione all'architettura del software52
Luca Cabibbo ASW
Container Java EE
Introduzione all'architettura del software53
Un application server Java EE funge da container per i componenti applicativi.
Container è un pattern architetturale –che affronta il problema di fornire alcune
qualità ai componenti che gestisce.
Luca Cabibbo ASW
- Esempio – Architetture a strati
Molte architetture sono basate su un’organizzazione a strati (Layers)
Introduzione all'architettura del software54
Architettura standard (ANSI/SPARC)a tre livelli per DBMS
BD
Schema logico
Schemaesterno
Schema interno
Schemaesterno
Schemaesterno
utenteutente
utenteutente utente
UI(AKA Presentation, View)
Application(AKA Workflow, Process,Mediation, App Controller)
Domain(AKA Business,
Application Logic, Model)
Technical Services(AKA Technical Infrastructure, High-level Technical Services)
Foundation(AKA Core Services, Base Services,
Low-level Technical Services/Infrastructure)
width implies range of applicability
GUI windowsreportsspeech interfaceHTML, XML, XSLT, JSP, Javascript, ...
handles presentation layer requestsworkflowsession statewindow/page transitionsconsolidation/transformation of disparate data for presentation
handles application layer requestsimplementation of domain rulesdomain services (POS, Inventory)- services may be used by just one application, but there is also the possibility of multi-application services
(relatively) high-level technical services and frameworks Persistence, Security
low-level technical services, utilities, and frameworksdata structures, threads, math, file, DB, and network I/O
moreapp
specific
Business Infrastructure(AKA Low-level Business Services)
very general low-level business services used in many business domainsCurrencyConverter
Quali vantaggi ci sono ad adottare un’architettura a strati?
Perché? Ci sono anche degli svantaggi?
Inoltre, come progettare un’architettura a strati?
Luca Cabibbo ASW
- Esempio – architettura di Google
Introduzione all'architettura del software55
http://infolab.stanford.edu/~backrub/google.html
Luca Cabibbo ASW
Architettura di Google
In Google, the web crawling (downloading of web pages) is done by several distributed crawlers. There is a URLserver that sends lists of URLs to be fetched to the crawlers. The web pages that are fetched are then sent to the storeserver. The storeserver then compresses and stores the web pages into a repository. Every web page has an associated ID number called a docID which is assigned whenever a new URL is parsed out of a web page. The indexing function is performed by the indexer and the sorter. The indexer performs a number of functions. It reads the repository, uncompresses the documents, and parses them. Each document is converted into a set of word occurrences called hits. The hits record the word, position in document, an approximation of font size, and capitalization. The indexer distributes these hits into a set of "barrels", creating a partially sorted forward index. The indexer performs another important function. It parses out all the links in every web page and stores important information about them in an anchors file. This file contains enough information to determine where each link points from and to, and the text of the link.
The URLresolver reads the anchors file and converts relative URLs into absolute URLs and in turn into docIDs. It puts the anchor text into the forward index, associated with the docID that the anchor points to. It also generates a database of links which are pairs of docIDs. The links database is used to compute PageRanks for all the documents.
The sorter takes the barrels, which are sorted by docID (this is a simplification, see Section 4.2.5), and resorts them by wordID to generate the inverted index. This is done in place so that little temporary space is needed for this operation. The sorter also produces a list of wordIDs and offsets into the inverted index. A program called DumpLexicon takes this list together with the lexicon produced by the indexer and generates a new lexicon to be used by the searcher. The searcher is run by a web server and uses the lexicon built by DumpLexicon together with the inverted index and the PageRanks to answer queries.
Introduzione all'architettura del software56
Luca Cabibbo ASW
Architettura di Google
In Google, the web crawling (downloading of web pages) is done by several distributed crawlers. There is a URLserver that sends lists of URLs to be fetched to the crawlers. The web pages that are fetched are then sent to the storeserver. The storeserver then compresses and stores the web pages into a repository. Every web page has an associated ID number called a docID which is assigned whenever a new URL is parsed out of a web page. The indexing function is performed by the indexer and the sorter. The indexer performs a number of functions. It reads the repository, uncompresses the documents, and parses them. Each document is converted into a set of word occurrences called hits. The hits record the word, position in document, an approximation of font size, and capitalization. The indexer distributes these hits into a set of "barrels", creating a partially sorted forward index. The indexer performs another important function. It parses out all the links in every web page and stores important information about them in an anchors file. This file contains enough information to determine where each link points from and to, and the text of the link.
The URLresolver reads the anchors file and converts relative URLs into absolute URLs and in turn into docIDs. It puts the anchor text into the forward index, associated with the docID that the anchor points to. It also generates a database of links which are pairs of docIDs. The links database is used to compute PageRanks for all the documents.
The sorter takes the barrels, which are sorted by docID (this is a simplification, see Section 4.2.5), and resorts them by wordID to generate the inverted index. This is done in place so that little temporary space is needed for this operation. The sorter also produces a list of wordIDs and offsets into the inverted index. A program called DumpLexicon takes this list together with the lexicon produced by the indexer and generates a new lexicon to be used by the searcher. The searcher is run by a web server and uses the lexicon built by DumpLexicon together with the inverted index and the PageRanks to answer queries.
Introduzione all'architettura del software57
È una vista funzionale, che descrive la decomposizione di Google in termini di
elementi funzionali, relativamente all’implementazione dell’algoritmo
PageRank.
Ma come fa Google a soddisfare i requisiti relativi a prestazioni e
scalabilità? Com’è fatta la vista di deployment? Come sono gestiti i dati?
Luca Cabibbo ASW
- Esempio – MapReduce
PageRank è un algoritmo per l’indicizzazione di pagine web – che opera su pagine che sono state scaricate e memorizzate localmente in un grande cluster di computer
ma come sfruttare questo cluster per eseguire questo algoritmo in modo efficiente, scalabile e affidabile?
e questa capacità può essere utilizzata anche per eseguire altri algoritmi?
Introduzione all'architettura del software58
Luca Cabibbo ASW
MapReduce
MapReduce is a programming model and an associated implementation for processing and generating large data sets. Users specify a map function that processes a key/value pair to generate a set of intermediate key/value pairs, and a reduce function that merges all intermediate values associated with the same intermediate key. Many real world tasks are expressible in this model.
Programs written in this functional style are automatically parallelized and executed on a large cluster of commodity machines. The run-time system takes care of the details of partitioning the input data, scheduling the program's execution across a set of machines, handling machine failures, and managing the required inter-machine communication. This allows programmers without any experience with parallel and distributed systems to easily utilize the resources of a large distributed system.
Our implementation of MapReduce runs on a large cluster of commodity machines and is highly scalable: a typical MapReduce computation processes many terabytes of data on thousands of machines. Programmers find the system easy to use: hundreds of MapReduceprograms have been implemented and upwards of one thousand MapReduce jobs are executed on Google's clusters every day.
Introduzione all'architettura del software59
Luca Cabibbo ASW
MapReduce
Introduzione all'architettura del software60
Luca Cabibbo ASW
- Esempio – Cloud computing
Oggi diverse organizzazioni – come Google, Amazon e Microsoft, ma non solo – forniscono dei servizi di cloud computing
ovvero l’acceso in rete a delle risorse di calcolo – come CPU, storage, reti, sistemi operativi, piattaforme applicative, servizi e/o applicazioni
il cloud è una piattaforma di rilascio delle applicazioni sempre più diffusa
Introduzione all'architettura del software61
Ma come vengono forniti questi servizi?
E come sviluppare applicazioni da rilasciare sul cloud?
Luca Cabibbo ASW
- Esempio – Amazon Elastic Beanstalk
Java EE è una piattaforma per applicazioni enterprise nata, originariamente, per eseguire applicazioni su un proprio cluster di computer (“on promise”)
quali sono le piattaforme applicative per il cloud? quali qualità sostengono? consentono di ottenere le stesse qualità di applicazioni eseguite on premise?
Introduzione all'architettura del software62
Luca Cabibbo ASW
Amazon Elastic Beanstalk
AWS Elastic Beanstalk – http://aws.amazon.com/elasticbeanstalk/ AWS Elastic Beanstalk is an even easier way for you to quickly deploy
and manage applications in the AWS cloud. You simply upload your application, and Elastic Beanstalk automatically handles the deployment details of capacity provisioning, load balancing, auto-scaling, and application health monitoring. At the same time, with Elastic Beanstalk, you retain full control over the AWS resources powering your application and can access the underlying resources at any time. Elastic Beanstalk leverages AWS services such as Amazon Elastic Cloud Compute (Amazon EC2), Amazon Simple Storage Service (Amazon S3), Amazon Simple Notification Service (Amazon SNS), Elastic Load Balancing, and Auto Scaling to deliver the same highly reliable, scalable, and cost-effective infrastructure that hundreds of thousands of businesses depend on today. AWS Elastic Beanstalk is easy to begin and impossible to outgrow.
Introduzione all'architettura del software63
Come fa Amazon AWS a garantire queste qualità?
Luca Cabibbo ASW
Amazon Elastic Beanstalk
AWS Elastic Beanstalk – http://aws.amazon.com/elasticbeanstalk/
Introduzione all'architettura del software64
Luca Cabibbo ASW
- Esempio – Netflix
Netflix è una società operante nella distribuzione via Internet di film, serie televisive e altri contenuti d'intrattenimento
Netflix ha oltre 163 milioni di abbonati in tutto il mondo (2019) –oltre il 50% di questi abbonati sono al di fuori degli USA – negli USA, Netflix detiene oltre il 50% degli abbonati a servizi di streaming
questo richiede dei livelli elevati di scalabilità e disponibilità –si pensi che nel 2016 gli abbonati erano circa 75 milioni
l’architettura software di Netflix è
basata su microservizi
rilasciata in contenitori
sul cloud di Amazon AWS
“at Netflix we pioneer new cloud architectures and technologies to operate at massive scale”
Introduzione all'architettura del software65
Luca Cabibbo ASW
* Discussione
Nella progettazione dei sistemi software complessi
i sistemi devono esibire una certa combinazione di qualità
la struttura interna di un sistema ha un’influenza significativa sulle qualità del sistema
la disciplina dell’architettura del software studia le relazioni tra la struttura interna dei sistemi software e le loro qualità esterne
questa conoscenza è una guida utile alla progettazione dei sistemi software complessi
Introduzione all'architettura del software66