Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf ·...

33
Architettura dei Sistemi Software Luca Cabibbo Luca Cabibbo ASW Luca Cabibbo ASW Introduzione all’architettura del software dispensa asw110 marzo 2020 Introduzione all'architettura del software 1 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, third edition. 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 software 2

Transcript of Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf ·...

Page 1: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 2: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 3: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 4: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 5: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 6: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 7: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 8: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 9: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 10: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 11: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 12: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 13: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 14: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 15: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 16: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 17: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 18: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 19: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 20: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 21: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 22: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 23: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 24: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 25: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 26: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 27: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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?

Page 28: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 29: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 30: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 31: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 32: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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

Page 33: Introduzione all’architettura del softwarecabibbo.dia.uniroma3.it/asw/pdf/...del-software.pdf · sistema software determinano le qualità “esterne” del sistema 11 Introduzione

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