SlideShare a Scribd company logo
1 of 50
AZURE WELL-
ARCHITECTED
FRAMEWORK
Sessione 6 di 6
ABOUT ME
➤ Rauno De Pasquale, Co-Founder and CTO at Newesis Srl,
constantly trying to reconcile his degree in Philosophy with
a passion for computer science. After almost 18 year at
Deltatre, at the beginning of 2019 he creates Newesis, with
the aim of simplifying the use of the most advanced
services of Cloud platforms even in fields other than sports.
➤ Newesis is a pure technology based, Cloud Native company,
having as a target to support and evolve adoption of
DevOps culture and practices, with particular focus on
Kubernetes as technological platform.
➤ Twitter: @RaunoDepa
➤ Twitter: @newesissrl
AZURE WELL-ARCHITECTED FRAMEWORK –
SESSIONE 6 DI 6 - AGENDA
➤ Posizione nel percorso complessivo
➤ Panoramica
➤ Principi
➤ Progettazione
➤ Test
➤ Monitoraggio
INTRODUZIONE
Posizione nel percorso
AZURE WELL-ARCHITECTED FRAMEWORK –
PERCORSO
➤ I Modulo: introduzione, principi e concetti base
➤ II Modulo: affidabilità
➤ III Modulo: sicurezza
➤ IV Modulo: ottimizzazione dei costi
➤ V Modulo: eccellenza operativa
➤ VI Modulo:efficienza delle prestazioni
EFFICIENZA DELLE
PRESTAZIONI
Panoramica
EFFICIENZA DELLE PRESTAZIONI - PANORAMICA
➤ L'efficienza delle prestazioni è la capacità di
ridimensionare il carico di lavoro soddisfare in
modo efficiente le richieste poste dagli utenti.
➤ Prima che il cloud diventasse popolare, per poter
gestire gli aumenti di carico, molte organizzazioni
effettuavano intenzionalmente il provisioning di
risorse dimensionate sempre per soddisfare il
massimo possibile in termini requisiti aziendali.
EFFICIENZA DELLE
PRESTAZIONI
Principi
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Comprendere le problematiche delle architetture distribuite
➤ La maggior parte delle soluzioni cloud si basa su architetture distribuite in cui i componenti
vengono distribuiti tra vari servizi.
➤ La risoluzione dei problemi delle applicazioni monolitiche richiede spesso solo uno o due
ambiti, ovvero l'applicazione e il database.
➤ Con le architetture distribuite, la risoluzione dei problemi è complessa a causa dei diversi
servizi e delle diverse risorse e delle loro dipendenze e relazioni.
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Eseguire test delle prestazioni nell'ambito dello sviluppo
➤ I test assicurano che qualsiasi modifica apportata alla soluzione non influisca negativamente
sulle prestazioni dell'applicazione.
➤ Stabilire una cadenza regolare per l'esecuzione dei test.
➤ Eseguire il test come parte di un momento pianificato o parte di una pipeline di compilazione
di integrazione continua.
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Stabilire linee di base delle prestazioni
➤ Determina l'efficienza corrente dell'applicazione e della relativa infrastruttura di supporto.
➤ La misurazione delle prestazioni rispetto alle baseline può offrire strategie per miglioramenti
e determinare se l'applicazione sta per raggiungere gli obiettivi aziendali.
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Avere un approccio basato sui dati
➤ Basare le decisioni sui dati acquisiti dai processi ripetibili.
➤ Archiviare i dati per monitorare le variazioni delle prestazioni nel tempo, non solo rispetto
all'ultima misurazione eseguita.
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Eseguire test di carico e stress e soak testing
➤ I test di carico misurano le prestazioni dell'applicazione in quantità predeterminate di carico.
➤ I test di stress misurano il carico massimo che l'applicazione e la relativa infrastruttura
possono supportare prima che l’utilizzo diventi non più possibile.
➤ I soak test comportano la sperimentazione di un sistema con un carico significativo esteso in
un periodo di tempo significativo, per scoprire come il sistema si comporta in un uso
prolungato.
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Identificare i colli di bottiglia
➤ I colli di bottiglia sono un'area all'interno dell'applicazione o dell’infrastruttura che può
ostacolare le prestazioni.
➤ Questi punti possono essere il risultato di un problema di codice o di una configurazione
errata di un servizio.
➤ In genere, un collo di bottiglia peggiora con l'aumentare del carico.
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Monitorare l'integrità dei carichi di lavoro correnti
➤ Nella strategia di monitoraggio considerare la scalabilità e la resilienza dell'infrastruttura,
dell'applicazione e dei servizi dipendenti.
➤ Per motivi di scalabilità, esaminare le metriche che consentono di effettuare il provisioning
dinamico delle risorse.
➤ Per l'affidabilità, cercare i segnali di avviso anticipati che potrebbero richiedere un
intervento proattivo.
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Definire budget e processi per risolvere i problemi di prestazioni
➤ I problemi di prestazioni possono verificarsi in qualunque momento dell ciclo di vita di una
soluzione e possono essere dovuti a molteplici fattori quali query di database, connettività
tra servizi, risorse con provisioning insufficiente o perdite di memoria nel codice.
➤ I dati di telemetria e la profilatura delle applicazioni possono essere strumenti utili per la
risoluzione dei problemi dell'applicazione.
➤ Occorre che un team cross-funzionale possa dedicare tempo e sforzi all’analisi e agli
interventi necessari in qualunque momento anche dopo la messa in produzione della
soluzione.
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Identificare le opportunità di miglioramento con la pianificazione della risoluzione
➤ Comprendere l'ambito della risoluzione pianificata e comunicare le modifiche a tutti gli
stakeholder necessari.
➤ Apportare miglioramenti al codice tramite una nuova compilazione.
➤ I miglioramenti all'infrastruttura possono coinvolgere molti team.
➤ Questa operazione potrebbe richiedere configurazioni aggiornate e deprecazioni a favore di
soluzioni più appropriate.
EFFICIENZA DELLE PRESTAZIONI - PRINCIPI
➤ Investire nella pianificazione della capacità
➤ Pianificare la fluttuazione del carico previsto che può verificarsi a causa di eventi diversi.
➤ Testare le variazioni del carico prima degli eventi, inclusi quelli imprevisti, per assicurarsi che
l'applicazione possa essere ridimensionata.
➤ Assicurarsi che tutte le aree possano essere ridimensionate in modo adeguato per supportare il carico
totale, in caso di errore di un'area.
➤ Prendere in considerazione:
➤ Tecnologia e limiti del servizio SKU.
➤ SLA delle nostre soluzioni verso i clienti e SLA delle risorse cloud e altri servizi da cui dipendiamo.
➤ Analisi dei costi per determinare il livello di miglioramento che verrà realizzato nell'applicazione se i
costi vengono aumentati. Valutare il costo dell'investimento.
EFFICIENZA DELLE
PRESTAZIONI
Progettazione
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Progettare per la scalabilità
➤ La scalabilità consente alle applicazioni di reagire a un carico variabile aumentando o
diminuendo il numero di istanze dei ruoli, delle code e di altri servizi usati.
➤ L'applicazione deve tuttavia essere progettata tenendo presente tale necessità. Durante le
operazioni di ridimensionamento, le istanze dell'applicazione e del servizio cambiano e per
questo devono essere libere dalla gestione di stato. In questo modo si impedisce che
l'aggiunta o la rimozione di istanze specifiche influisca negativamente sugli utenti correnti.
➤ È anche necessario implementare configurazione di rilevamento automatico o bilanciamento
del carico in modo che, quando i servizi vengono aggiunti o rimossi, l'applicazione possa
eseguire il routing necessario.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Identificare unità di scala
➤ Pianificare altre risorse per far fronte alla crescita.
➤ Per ogni risorsa verificare i limiti massimi di scalabilità e usare il partizionamento orizzontale
o la scomposizione per superare tali limiti. Determinare le unità di scala per il sistema in
termini di set di risorse ben definiti. Ciò semplifica l'applicazione delle operazioni di
scalabilità orizzontale. Ad esempio, se si aggiunge un numero x di ruoli Web e di lavoro,
potrebbero essere necessari y code aggiuntive e z account di archiviazione per gestire il
carico di lavoro aggiuntivo generato dai ruoli.
➤ Un'unità di scala può quindi essere costituita da x ruoli Web e di lavoro, y code e z account di
archiviazione.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Sfruttare le funzionalità di scalabilità automatica della piattaforma
➤ Preferire tipologie di risorse che supportino una funzionalità di scalabilità automatica.
➤ Ove possibile, usare regole di scalabilità pianificata per garantire la disponibilità delle risorse
senza ritardi di avvio, ma aggiungere alle regole una scalabilità automatica reattiva per
gestire variazioni impreviste della domanda.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Sfruttare le funzionalità di scalabilità automatizzabile della piattaforma
➤ Dove si utilizzino tipologie di risorse che non supportano una funzionalità di scalabilità
automatica ma che prevedono modalità di scaling (verticale o orizzontale), realizzare sistemi
di automazione per l’esecuzione programmatica, a evento o tramite invocazione specifica,
delle attività di scaling, evitando di operare manualmente sul portale.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Partizionare il carico di lavoro
➤ Progettare le diverse parti del processo in modo che siano discrete e scomponibili. Ridurre il
più possibile le dimensioni di ogni parte, attenendosi comunque alle solite regole di
separazione dei compiti e al principio di responsabilità singola.
➤ Questo consente di distribuire le parti in modo da ottimizzare l'uso di ogni unità di calcolo,
ad esempio server di database o ruoli. Facilita anche la scalabilità dell'applicazione con
l'aggiunta di altre istanze di risorse specifiche.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Evitare l'affinità client
➤ Se possibile, assicurarsi che l'applicazione non richieda l'affinità. In questo caso, le richieste
possono essere indirizzate a qualsiasi istanza e il numero di istanze è irrilevante.
➤ Questo inoltre evita il sovraccarico dovuto all'archiviazione, al recupero e alla gestione delle
informazioni sullo stato per ogni utente.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Eseguire offload di attività a elevato utilizzo di CPU e I/O in attività in background
➤ Se si prevede che una richiesta a un servizio comporti una lunga esecuzione o assorba una
quantità considerevole di risorse, eseguire l'offload dell'elaborazione relativa alla richiesta a
un'attività separata.
➤ Usare processi in background per eseguire queste attività. Questa strategia consente al
servizio di continuare a ricevere richieste e di rimanere reattivo.
➤ Se sono presenti numerose attività in background o se le attività richiedono una notevole
quantità di tempo o risorse, suddividere il lavoro tra più unità di calcolo.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Usare il partizionamento dei dati
➤ Suddividere i dati tra più database e server di database oppure progettare l'applicazione per
l'uso di servizi di archiviazione dati che forniscano tale partizionamento in modo trasparente,
ad esempio un database elastico per il database SQL di Azure e l'archivio tabelle di Azure.
➤ Questo approccio può contribuire a ottimizzare le prestazioni e consente di implementare
più facilmente la scalabilità. Sono disponibili diverse tecniche di partizionamento, ad
esempio orizzontale, verticale e funzionale.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Usare le code per livellare il carico per le operazioni di scrittura dati
➤ Una massiva attività di scrittura può sovraccaricare il servizio e causare una propagazione dei
problemi.
➤ Per evitare tali situazioni, considerare la possibilità di implementare il modello di
livellamento del carico basato sulle code. Usare una coda che funge da buffer tra un'attività
e un servizio richiamato. Questo può alleggerire i sovraccarichi a intermittenza che
diversamente potrebbero causare un errore del servizio o il timeout dell'attività.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Prendere in considerazione la denormalizzazione dei dati
➤ La normalizzazione dei dati consente di evitare la duplicazione e l'incoerenza. La gestione di
più indici, la verifica dell'integrità referenziale, l'esecuzione di più accessi a piccoli blocchi di
dati e l'unione di tabelle tramite join per riassemblare i dati sono tutte operazioni che
generano un sovraccarico che può influire negativamente sulle prestazioni.
➤ Valutare se una certa duplicazione e un volume di archiviazione aggiuntivo sono accettabili
per ridurre il carico dell'archivio dati.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Prendere in considerazione l'uso di tipi diversi di archivio dati per tipi diversi di dati
➤ Scegliere i tipi in base alla loro ottimizzazione per il tipo specifico di dati.
➤ Questo può includere l'uso dell'archivio tabelle, di un database di documenti o di un archivio
dati di tipo famiglia di colonne al posto o insieme a un database relazionale.
➤ Considerare sempre i vincoli di coerenza necessari per scegliere la soluzione migliore.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Perché usare un database relazionale?
➤ Usare un database relazionale quando sono importanti garanzie di coerenza forte, in cui tutte le
modifiche sono atomiche e le transazioni lasciano sempre i dati in uno stato coerente. Tuttavia, un
database relazionale in genere non può scalare orizzontalmente senza partizionare i dati in qualche
modo. L'implementazione del partizionamento orizzontale manuale può richiedere molto tempo.
Inoltre, i dati nel database relazionale devono essere normalizzati, che non è appropriato per ogni
set di dati.
➤ Se un database relazionale è considerato ottimale, Azure offre diverse opzioni PaaS che gestiscono
completamente l'hosting e le operazioni del database. database SQL di Azure possibile ospitare
database singoli o più database (database SQL di Azure Istanza gestita). La suite di offerte include
requisiti che superano le prestazioni, la scalabilità, le dimensioni, la resilienza, il ripristino di
emergenza e la compatibilità della migrazione.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Perché usare un database NoSQL?
➤ Usare un database NoSQL quando le prestazioni e la disponibilità delle applicazioni sono più
importanti della coerenza forte. I database NoSQL sono ideali per la gestione di dati di grandi
dimensioni, non correlati, indeterminati o in rapida evoluzione.
➤ Azure offre due servizi gestiti che ottimizzano per le soluzioni NoSQL: Azure Cosmos DB e
cache di Azure per Redis.
➤ Per i database di documenti e grafi, Cosmos db offre scalabilità e prestazioni estremamente
elevate.
➤ Inoltre si possono considerare le opzioni legate alle soluzioni storage come Azure Tables.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Usare la memorizzazione nella cache in modo aggressivo
➤ Usare la memorizzazione nella cache laddove possibile per ridurre il carico delle risorse e dei
servizi che generano o forniscono dati. La memorizzazione nella cache in genere è adatta per
i dati relativamente statici o da ottenere con una notevole elaborazione.
➤ La memorizzazione nella cache deve avvenire a tutti i livelli appropriati in ogni livello
dell'applicazione, tra cui l'accesso ai dati e la generazione dell'interfaccia utente.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Usare chiamate asincrone
➤ Quando possibile, usare codice asincrono per accedere a risorse o servizi che possono essere
limitati da larghezza di banda di rete o I/O oppure che hanno una latenza considerevole per
evitare di bloccare il thread chiamante.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Evitare di bloccare le risorse e usare invece un approccio ottimistico
➤ Non bloccare mai l'accesso alle risorse, ad esempio di archiviazione o altri servizi che
presentino una latenza notevole, perché è una delle cause principali della riduzione delle
prestazioni. Usare sempre approcci ottimistici per la gestione delle operazioni simultanee, ad
esempio la scrittura in un archivio. Usare le funzionalità del livello di archiviazione per gestire
i conflitti.
➤ Nelle applicazioni distribuite i dati possono essere coerenti solo alla fine (pattern «eventually
consistent»).
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Ridurre al minimo il numero di connessioni necessarie
➤ Le connessioni ai servizi assorbono risorse. Limitare il numero di connessioni necessarie e
assicurarsi che le connessioni esistenti vengano riutilizzate quando possibile. Mantenere le
connessioni e le risorse soltanto per il tempo necessario a usarle. Ad esempio, aprire le
connessioni solo all'ultimo momento e restituirle al pool di connessioni appena possibile.
Acquisire le risorse il più tardi possibile ed eliminarle il prima possibile. Questo consente un
uso ottimale del pool di connessioni mediante il riutilizzo delle stesse.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Scegliere le dimensioni della macchina virtuale più giuste
➤ La scelta delle dimensioni errate della macchina virtuale può causare problemi di capacità
quando le macchine virtuali si avvicinano ai limiti. Può anche comportare costi non necessari.
Per scegliere le dimensioni della macchina virtuale giuste, prendere in considerazione i
carichi di lavoro, il numero di CPU, la capacità della RAM, le dimensioni del disco e la velocità
in base ai requisiti aziendali.
➤ Azure offre diverse categorie di dimensioni delle macchine virtuali, ognuna progettata per
eseguire carichi di lavoro diversi.
EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE
➤ Aumentare il numero di risorse anziché aumentare le dimensioni
➤ Quando si usano tecnologie cloud, è in genere più semplice, più economico ed efficace
aumentare le risorse rispetto all'aumento delle dimensioni. Pianificare la scalabilità del
livello applicazione aggiungendo un'infrastruttura aggiuntiva per soddisfare la domanda.
Assicurarsi di rimuovere le risorse quando non sono necessarie. Se si prevede di aumentare
le dimensioni aumentando le risorse allocate agli host, si raggiungerà un limite in cui diventa
proibitivo aumentare ulteriormente i costi. La scalabilità verticale spesso richiede anche
tempi di inattività per il riavvio dei server.
EFFICIENZA DELLE
PRESTAZIONI
Test
EFFICIENZA DELLE PRESTAZIONI - TEST
➤ Garantire solidi test delle prestazioni con responsabilità del team condiviso
➤ L'implementazione corretta di test delle prestazioni significativi richiede una serie di risorse.
Non si tratta di un singolo sviluppatore o analista del controllo qualità che esegue alcuni test
nel computer locale. I test delle prestazioni necessitano invece di un ambiente di test su cui è
possibile eseguire i test senza interferire con i dati e gli ambienti di produzione.
➤ I test delle prestazioni richiedono input e impegno da parte di sviluppatori, architetti,
amministratori di database e amministratori di rete.
EFFICIENZA DELLE PRESTAZIONI - TEST
➤ Scegliere gli strumenti di test in base al tipo di test delle prestazioni che si sta tentando di
eseguire
➤ Sono disponibili vari strumenti di test delle prestazioni per DevOps. Alcuni strumenti come
JMeter eseguono solo test su endpoint e testano gli stati HTTP. Altri strumenti come K6 e
Selenium possono eseguire test che controllano anche la qualità e le variazioni dei dati.
EFFICIENZA DELLE PRESTAZIONI - TEST
➤ Stabilire le baseline
➤ In primo luogo, stabilire le linee di base delle prestazioni per l'applicazione. Stabilire quindi
una cadenza regolare per l'esecuzione dei test. Eseguire il test come parte di un evento
pianificato o parte di una pipeline di compilazione di integrazione continua.
➤ Le baseline consentono di determinare lo stato di efficienza corrente dell'applicazione e la
relativa infrastruttura di supporto. Le baseline possono fornire informazioni dettagliate utili
per i miglioramenti e determinare se l'applicazione è in grado di soddisfare gli obiettivi
aziendali. Le baseline possono essere create per qualsiasi applicazione. Indipendentemente
dal momento in cui si stabilisce la baseline, misurare le prestazioni rispetto a tale baseline
durante lo sviluppo continuo. Quando il codice e o l'infrastruttura cambiano, l'effetto sulle
prestazioni può essere misurato attivamente.
EFFICIENZA DELLE PRESTAZIONI - TEST
➤ Conoscere i limiti dei servizi di Azure utilizzati
➤ A diversi servizi di Azure sono associati limiti rigidi e non rigidi. I termini soft limit e hard limit
descrivono il limite di servizio corrente e regolabile (limite soft) e il limite massimo (limite
rigido). Comprendere i limiti per i servizi utilizzati in modo da non essere bloccati se è
necessario superarli.
EFFICIENZA DELLE
PRESTAZIONI
Monitoraggio
EFFICIENZA DELLE PRESTAZIONI - MONITORAGGIO
➤ La risoluzione dei problemi relativi alle prestazioni di un'applicazione richiede un
monitoraggio e un'analisi affidabile. I problemi di prestazioni possono derivare da query di
database, connettività tra servizi, risorse con provisioning insufficiente o perdite di memoria
nel codice.
➤ Il monitoraggio continuo dei servizi e il controllo dello stato di integrità dei carichi di lavoro
correnti sono fondamentali per mantenere le prestazioni complessive del carico di lavoro.
Una strategia di monitoraggio generale considera questi fattori:
• Scalabilità
• Resilienza dell'infrastruttura, dell'applicazione e dei servizi dipendenti
• Prestazioni dell'applicazione e dell'infrastruttura
EFFICIENZA DELLE PRESTAZIONI - MONITORAGGIO
➤ Dalla monitoria all’osservabilità
• Abilitare e acquisire i dati di telemetria in tutta l'applicazione per compilare e visualizzare i flussi di transazioni end-to-
end per l'applicazione.
• Vedere le metriche dei servizi di Azure, ad esempio l'utilizzo della CPU e della memoria, le informazioni sulla larghezza
di banda, l'utilizzo corrente dello spazio di archiviazione e altro ancora.
• Usare i log delle risorse e della piattaforma per ottenere informazioni su quali eventi si verificano e in quali condizioni.
• Per la scalabilità, esaminare le metriche per determinare come effettuare il provisioning dinamico delle risorse e
ridimensionare in base alla domanda.
• Nei log e nelle metriche raccolti cercare segnali che potrebbero rendere improvvisamente non disponibile un sistema
o i relativi componenti.
• Usare la tecnologia di aggregazione dei log per raccogliere informazioni in tutti i componenti dell'applicazione.
• Archiviare i log e le metriche chiave dei componenti critici per la valutazione statistica e la stima delle tendenze.
• Identificare gli antipattern nel codice.
EFFICIENZA DELLE
PRESTAZIONI
Conclusioni
EFFICIENZA DELLE PRESTAZIONI - CONCLUSIONI
Scalabilità
Le risorse Cloud sono elastiche
per definizione. Occorre
verificare le opzioni di scalabilità
orizzontale ma anche valutare
sempre le unità di scala, per
evitare di causare effetti
collaterali negativi e
rallentamenti a fronte del
dimensionamento modificato in
un certo livello.
EFFICIENZA DELLE PRESTAZIONI - CONCLUSIONI
Osservabilità
In sistemi complessi e distribuiti,
la chiave è la capacità di
conoscere sia lo stato interno di
ogni componenti sia le relazioni
tra componenti diversi. I moderni
sistemi di monitoraggio, tramite
la raccolta e correlazione di
metriche, logs e telemetrie,
consentono la massima visibilità,
cui poter associare sia analisi che
reazioni automatizzate.
THE END – Q&A ?

More Related Content

Similar to 06 azure well architected framework

Executive dinner performancemanagementv6.4.-nr
Executive dinner performancemanagementv6.4.-nrExecutive dinner performancemanagementv6.4.-nr
Executive dinner performancemanagementv6.4.-nrAndrea Corona
 
BigTec web-scale software defined Datacenter
BigTec web-scale software defined DatacenterBigTec web-scale software defined Datacenter
BigTec web-scale software defined DatacenterMauro Suardi
 
Digital Integration Hub per il monitoraggio in near-real time della logistica...
Digital Integration Hub per il monitoraggio in near-real time della logistica...Digital Integration Hub per il monitoraggio in near-real time della logistica...
Digital Integration Hub per il monitoraggio in near-real time della logistica...confluent
 
Competence center Application Management & Quality Assurance
Competence center Application Management  & Quality AssuranceCompetence center Application Management  & Quality Assurance
Competence center Application Management & Quality AssuranceFausto Servello
 
Scenari introduzione Application Service Governance in Azienda
Scenari introduzione Application Service Governance in AziendaScenari introduzione Application Service Governance in Azienda
Scenari introduzione Application Service Governance in AziendaConsulthinkspa
 
Cafaro le competenze digitali per la qualita dei servizi
Cafaro le competenze digitali per la qualita dei serviziCafaro le competenze digitali per la qualita dei servizi
Cafaro le competenze digitali per la qualita dei serviziRedazione InnovaPuglia
 
3 Fattibilità E Bp Energetici
3 Fattibilità E Bp Energetici3 Fattibilità E Bp Energetici
3 Fattibilità E Bp EnergeticiLuca Vecchiato
 
Sage X3 produzione per processo slideshare
Sage X3 produzione per processo slideshareSage X3 produzione per processo slideshare
Sage X3 produzione per processo slideshareTeam Netuse srl
 
iVision Software 2.3
iVision Software 2.3iVision Software 2.3
iVision Software 2.3ivisionweb
 
Presentazione acg vision4 c.a.t.a. informatica - www.acgvision4
Presentazione acg vision4   c.a.t.a. informatica - www.acgvision4Presentazione acg vision4   c.a.t.a. informatica - www.acgvision4
Presentazione acg vision4 c.a.t.a. informatica - www.acgvision4C.A.T.A. INFORMATICA
 
API Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole ItaliaAPI Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole ItaliaProfesia Srl, Lynx Group
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfFlorence Consulting
 
Agile@scale, second chance
Agile@scale, second chanceAgile@scale, second chance
Agile@scale, second chanceFelice Pescatore
 
Consigli per Organizzare Demo e Scegliere il Nuovo Erp Aziendale
Consigli per Organizzare Demo e Scegliere il Nuovo Erp AziendaleConsigli per Organizzare Demo e Scegliere il Nuovo Erp Aziendale
Consigli per Organizzare Demo e Scegliere il Nuovo Erp AziendaleFrancesca Solari
 

Similar to 06 azure well architected framework (20)

LARUS 10th - Rampado Omar
LARUS 10th - Rampado OmarLARUS 10th - Rampado Omar
LARUS 10th - Rampado Omar
 
Demand Driven MRP - Come implementarlo con successo in azienda
Demand Driven MRP -  Come implementarlo con successo in aziendaDemand Driven MRP -  Come implementarlo con successo in azienda
Demand Driven MRP - Come implementarlo con successo in azienda
 
Executive dinner performancemanagementv6.4.-nr
Executive dinner performancemanagementv6.4.-nrExecutive dinner performancemanagementv6.4.-nr
Executive dinner performancemanagementv6.4.-nr
 
BigTec web-scale software defined Datacenter
BigTec web-scale software defined DatacenterBigTec web-scale software defined Datacenter
BigTec web-scale software defined Datacenter
 
Digital Integration Hub per il monitoraggio in near-real time della logistica...
Digital Integration Hub per il monitoraggio in near-real time della logistica...Digital Integration Hub per il monitoraggio in near-real time della logistica...
Digital Integration Hub per il monitoraggio in near-real time della logistica...
 
Competence center Application Management & Quality Assurance
Competence center Application Management  & Quality AssuranceCompetence center Application Management  & Quality Assurance
Competence center Application Management & Quality Assurance
 
depl_emerald-rtc
depl_emerald-rtcdepl_emerald-rtc
depl_emerald-rtc
 
Scenari introduzione Application Service Governance in Azienda
Scenari introduzione Application Service Governance in AziendaScenari introduzione Application Service Governance in Azienda
Scenari introduzione Application Service Governance in Azienda
 
Cafaro le competenze digitali per la qualita dei servizi
Cafaro le competenze digitali per la qualita dei serviziCafaro le competenze digitali per la qualita dei servizi
Cafaro le competenze digitali per la qualita dei servizi
 
Neoload webinar-24_07
Neoload webinar-24_07Neoload webinar-24_07
Neoload webinar-24_07
 
3 Fattibilità E Bp Energetici
3 Fattibilità E Bp Energetici3 Fattibilità E Bp Energetici
3 Fattibilità E Bp Energetici
 
Iefficiency 3-cegeka
Iefficiency 3-cegekaIefficiency 3-cegeka
Iefficiency 3-cegeka
 
Sage X3 produzione per processo slideshare
Sage X3 produzione per processo slideshareSage X3 produzione per processo slideshare
Sage X3 produzione per processo slideshare
 
iVision Software 2.3
iVision Software 2.3iVision Software 2.3
iVision Software 2.3
 
Presentazione acg vision4 c.a.t.a. informatica - www.acgvision4
Presentazione acg vision4   c.a.t.a. informatica - www.acgvision4Presentazione acg vision4   c.a.t.a. informatica - www.acgvision4
Presentazione acg vision4 c.a.t.a. informatica - www.acgvision4
 
API Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole ItaliaAPI Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole Italia
 
Slide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdfSlide Mulesoft Meetup Milano #10.pdf
Slide Mulesoft Meetup Milano #10.pdf
 
Agile@scale, second chance
Agile@scale, second chanceAgile@scale, second chance
Agile@scale, second chance
 
Presentazione QSA.net
Presentazione QSA.netPresentazione QSA.net
Presentazione QSA.net
 
Consigli per Organizzare Demo e Scegliere il Nuovo Erp Aziendale
Consigli per Organizzare Demo e Scegliere il Nuovo Erp AziendaleConsigli per Organizzare Demo e Scegliere il Nuovo Erp Aziendale
Consigli per Organizzare Demo e Scegliere il Nuovo Erp Aziendale
 

More from Rauno De Pasquale

DevOps Training - Introduction to Terraform
DevOps Training - Introduction to TerraformDevOps Training - Introduction to Terraform
DevOps Training - Introduction to TerraformRauno De Pasquale
 
Kubernetes the deltatre way the basics - introduction to containers and orc...
Kubernetes the deltatre way   the basics - introduction to containers and orc...Kubernetes the deltatre way   the basics - introduction to containers and orc...
Kubernetes the deltatre way the basics - introduction to containers and orc...Rauno De Pasquale
 
DevOps Torino Meetup - DevOps Engineer, a role that does not exist but is muc...
DevOps Torino Meetup - DevOps Engineer, a role that does not exist but is muc...DevOps Torino Meetup - DevOps Engineer, a role that does not exist but is muc...
DevOps Torino Meetup - DevOps Engineer, a role that does not exist but is muc...Rauno De Pasquale
 
DevOps Torino Meetup - SRE Concepts
DevOps Torino Meetup - SRE ConceptsDevOps Torino Meetup - SRE Concepts
DevOps Torino Meetup - SRE ConceptsRauno De Pasquale
 
DevOps Torino Meetup Group Kickoff Meeting - Why a meetup group on DevOps, wh...
DevOps Torino Meetup Group Kickoff Meeting - Why a meetup group on DevOps, wh...DevOps Torino Meetup Group Kickoff Meeting - Why a meetup group on DevOps, wh...
DevOps Torino Meetup Group Kickoff Meeting - Why a meetup group on DevOps, wh...Rauno De Pasquale
 
Newesis azure devops-presentation
Newesis azure devops-presentationNewesis azure devops-presentation
Newesis azure devops-presentationRauno De Pasquale
 
Newesis - Introduction to Containers
Newesis -  Introduction to ContainersNewesis -  Introduction to Containers
Newesis - Introduction to ContainersRauno De Pasquale
 
Newesis - Introduction to the Cloud
Newesis -  Introduction to the CloudNewesis -  Introduction to the Cloud
Newesis - Introduction to the CloudRauno De Pasquale
 

More from Rauno De Pasquale (8)

DevOps Training - Introduction to Terraform
DevOps Training - Introduction to TerraformDevOps Training - Introduction to Terraform
DevOps Training - Introduction to Terraform
 
Kubernetes the deltatre way the basics - introduction to containers and orc...
Kubernetes the deltatre way   the basics - introduction to containers and orc...Kubernetes the deltatre way   the basics - introduction to containers and orc...
Kubernetes the deltatre way the basics - introduction to containers and orc...
 
DevOps Torino Meetup - DevOps Engineer, a role that does not exist but is muc...
DevOps Torino Meetup - DevOps Engineer, a role that does not exist but is muc...DevOps Torino Meetup - DevOps Engineer, a role that does not exist but is muc...
DevOps Torino Meetup - DevOps Engineer, a role that does not exist but is muc...
 
DevOps Torino Meetup - SRE Concepts
DevOps Torino Meetup - SRE ConceptsDevOps Torino Meetup - SRE Concepts
DevOps Torino Meetup - SRE Concepts
 
DevOps Torino Meetup Group Kickoff Meeting - Why a meetup group on DevOps, wh...
DevOps Torino Meetup Group Kickoff Meeting - Why a meetup group on DevOps, wh...DevOps Torino Meetup Group Kickoff Meeting - Why a meetup group on DevOps, wh...
DevOps Torino Meetup Group Kickoff Meeting - Why a meetup group on DevOps, wh...
 
Newesis azure devops-presentation
Newesis azure devops-presentationNewesis azure devops-presentation
Newesis azure devops-presentation
 
Newesis - Introduction to Containers
Newesis -  Introduction to ContainersNewesis -  Introduction to Containers
Newesis - Introduction to Containers
 
Newesis - Introduction to the Cloud
Newesis -  Introduction to the CloudNewesis -  Introduction to the Cloud
Newesis - Introduction to the Cloud
 

06 azure well architected framework

  • 2. ABOUT ME ➤ Rauno De Pasquale, Co-Founder and CTO at Newesis Srl, constantly trying to reconcile his degree in Philosophy with a passion for computer science. After almost 18 year at Deltatre, at the beginning of 2019 he creates Newesis, with the aim of simplifying the use of the most advanced services of Cloud platforms even in fields other than sports. ➤ Newesis is a pure technology based, Cloud Native company, having as a target to support and evolve adoption of DevOps culture and practices, with particular focus on Kubernetes as technological platform. ➤ Twitter: @RaunoDepa ➤ Twitter: @newesissrl
  • 3. AZURE WELL-ARCHITECTED FRAMEWORK – SESSIONE 6 DI 6 - AGENDA ➤ Posizione nel percorso complessivo ➤ Panoramica ➤ Principi ➤ Progettazione ➤ Test ➤ Monitoraggio
  • 5. AZURE WELL-ARCHITECTED FRAMEWORK – PERCORSO ➤ I Modulo: introduzione, principi e concetti base ➤ II Modulo: affidabilità ➤ III Modulo: sicurezza ➤ IV Modulo: ottimizzazione dei costi ➤ V Modulo: eccellenza operativa ➤ VI Modulo:efficienza delle prestazioni
  • 7. EFFICIENZA DELLE PRESTAZIONI - PANORAMICA ➤ L'efficienza delle prestazioni è la capacità di ridimensionare il carico di lavoro soddisfare in modo efficiente le richieste poste dagli utenti. ➤ Prima che il cloud diventasse popolare, per poter gestire gli aumenti di carico, molte organizzazioni effettuavano intenzionalmente il provisioning di risorse dimensionate sempre per soddisfare il massimo possibile in termini requisiti aziendali.
  • 9. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Comprendere le problematiche delle architetture distribuite ➤ La maggior parte delle soluzioni cloud si basa su architetture distribuite in cui i componenti vengono distribuiti tra vari servizi. ➤ La risoluzione dei problemi delle applicazioni monolitiche richiede spesso solo uno o due ambiti, ovvero l'applicazione e il database. ➤ Con le architetture distribuite, la risoluzione dei problemi è complessa a causa dei diversi servizi e delle diverse risorse e delle loro dipendenze e relazioni.
  • 10. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Eseguire test delle prestazioni nell'ambito dello sviluppo ➤ I test assicurano che qualsiasi modifica apportata alla soluzione non influisca negativamente sulle prestazioni dell'applicazione. ➤ Stabilire una cadenza regolare per l'esecuzione dei test. ➤ Eseguire il test come parte di un momento pianificato o parte di una pipeline di compilazione di integrazione continua.
  • 11. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Stabilire linee di base delle prestazioni ➤ Determina l'efficienza corrente dell'applicazione e della relativa infrastruttura di supporto. ➤ La misurazione delle prestazioni rispetto alle baseline può offrire strategie per miglioramenti e determinare se l'applicazione sta per raggiungere gli obiettivi aziendali.
  • 12. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Avere un approccio basato sui dati ➤ Basare le decisioni sui dati acquisiti dai processi ripetibili. ➤ Archiviare i dati per monitorare le variazioni delle prestazioni nel tempo, non solo rispetto all'ultima misurazione eseguita.
  • 13. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Eseguire test di carico e stress e soak testing ➤ I test di carico misurano le prestazioni dell'applicazione in quantità predeterminate di carico. ➤ I test di stress misurano il carico massimo che l'applicazione e la relativa infrastruttura possono supportare prima che l’utilizzo diventi non più possibile. ➤ I soak test comportano la sperimentazione di un sistema con un carico significativo esteso in un periodo di tempo significativo, per scoprire come il sistema si comporta in un uso prolungato.
  • 14. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Identificare i colli di bottiglia ➤ I colli di bottiglia sono un'area all'interno dell'applicazione o dell’infrastruttura che può ostacolare le prestazioni. ➤ Questi punti possono essere il risultato di un problema di codice o di una configurazione errata di un servizio. ➤ In genere, un collo di bottiglia peggiora con l'aumentare del carico.
  • 15. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Monitorare l'integrità dei carichi di lavoro correnti ➤ Nella strategia di monitoraggio considerare la scalabilità e la resilienza dell'infrastruttura, dell'applicazione e dei servizi dipendenti. ➤ Per motivi di scalabilità, esaminare le metriche che consentono di effettuare il provisioning dinamico delle risorse. ➤ Per l'affidabilità, cercare i segnali di avviso anticipati che potrebbero richiedere un intervento proattivo.
  • 16. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Definire budget e processi per risolvere i problemi di prestazioni ➤ I problemi di prestazioni possono verificarsi in qualunque momento dell ciclo di vita di una soluzione e possono essere dovuti a molteplici fattori quali query di database, connettività tra servizi, risorse con provisioning insufficiente o perdite di memoria nel codice. ➤ I dati di telemetria e la profilatura delle applicazioni possono essere strumenti utili per la risoluzione dei problemi dell'applicazione. ➤ Occorre che un team cross-funzionale possa dedicare tempo e sforzi all’analisi e agli interventi necessari in qualunque momento anche dopo la messa in produzione della soluzione.
  • 17. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Identificare le opportunità di miglioramento con la pianificazione della risoluzione ➤ Comprendere l'ambito della risoluzione pianificata e comunicare le modifiche a tutti gli stakeholder necessari. ➤ Apportare miglioramenti al codice tramite una nuova compilazione. ➤ I miglioramenti all'infrastruttura possono coinvolgere molti team. ➤ Questa operazione potrebbe richiedere configurazioni aggiornate e deprecazioni a favore di soluzioni più appropriate.
  • 18. EFFICIENZA DELLE PRESTAZIONI - PRINCIPI ➤ Investire nella pianificazione della capacità ➤ Pianificare la fluttuazione del carico previsto che può verificarsi a causa di eventi diversi. ➤ Testare le variazioni del carico prima degli eventi, inclusi quelli imprevisti, per assicurarsi che l'applicazione possa essere ridimensionata. ➤ Assicurarsi che tutte le aree possano essere ridimensionate in modo adeguato per supportare il carico totale, in caso di errore di un'area. ➤ Prendere in considerazione: ➤ Tecnologia e limiti del servizio SKU. ➤ SLA delle nostre soluzioni verso i clienti e SLA delle risorse cloud e altri servizi da cui dipendiamo. ➤ Analisi dei costi per determinare il livello di miglioramento che verrà realizzato nell'applicazione se i costi vengono aumentati. Valutare il costo dell'investimento.
  • 20. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Progettare per la scalabilità ➤ La scalabilità consente alle applicazioni di reagire a un carico variabile aumentando o diminuendo il numero di istanze dei ruoli, delle code e di altri servizi usati. ➤ L'applicazione deve tuttavia essere progettata tenendo presente tale necessità. Durante le operazioni di ridimensionamento, le istanze dell'applicazione e del servizio cambiano e per questo devono essere libere dalla gestione di stato. In questo modo si impedisce che l'aggiunta o la rimozione di istanze specifiche influisca negativamente sugli utenti correnti. ➤ È anche necessario implementare configurazione di rilevamento automatico o bilanciamento del carico in modo che, quando i servizi vengono aggiunti o rimossi, l'applicazione possa eseguire il routing necessario.
  • 21. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Identificare unità di scala ➤ Pianificare altre risorse per far fronte alla crescita. ➤ Per ogni risorsa verificare i limiti massimi di scalabilità e usare il partizionamento orizzontale o la scomposizione per superare tali limiti. Determinare le unità di scala per il sistema in termini di set di risorse ben definiti. Ciò semplifica l'applicazione delle operazioni di scalabilità orizzontale. Ad esempio, se si aggiunge un numero x di ruoli Web e di lavoro, potrebbero essere necessari y code aggiuntive e z account di archiviazione per gestire il carico di lavoro aggiuntivo generato dai ruoli. ➤ Un'unità di scala può quindi essere costituita da x ruoli Web e di lavoro, y code e z account di archiviazione.
  • 22. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Sfruttare le funzionalità di scalabilità automatica della piattaforma ➤ Preferire tipologie di risorse che supportino una funzionalità di scalabilità automatica. ➤ Ove possibile, usare regole di scalabilità pianificata per garantire la disponibilità delle risorse senza ritardi di avvio, ma aggiungere alle regole una scalabilità automatica reattiva per gestire variazioni impreviste della domanda.
  • 23. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Sfruttare le funzionalità di scalabilità automatizzabile della piattaforma ➤ Dove si utilizzino tipologie di risorse che non supportano una funzionalità di scalabilità automatica ma che prevedono modalità di scaling (verticale o orizzontale), realizzare sistemi di automazione per l’esecuzione programmatica, a evento o tramite invocazione specifica, delle attività di scaling, evitando di operare manualmente sul portale.
  • 24. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Partizionare il carico di lavoro ➤ Progettare le diverse parti del processo in modo che siano discrete e scomponibili. Ridurre il più possibile le dimensioni di ogni parte, attenendosi comunque alle solite regole di separazione dei compiti e al principio di responsabilità singola. ➤ Questo consente di distribuire le parti in modo da ottimizzare l'uso di ogni unità di calcolo, ad esempio server di database o ruoli. Facilita anche la scalabilità dell'applicazione con l'aggiunta di altre istanze di risorse specifiche.
  • 25. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Evitare l'affinità client ➤ Se possibile, assicurarsi che l'applicazione non richieda l'affinità. In questo caso, le richieste possono essere indirizzate a qualsiasi istanza e il numero di istanze è irrilevante. ➤ Questo inoltre evita il sovraccarico dovuto all'archiviazione, al recupero e alla gestione delle informazioni sullo stato per ogni utente.
  • 26. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Eseguire offload di attività a elevato utilizzo di CPU e I/O in attività in background ➤ Se si prevede che una richiesta a un servizio comporti una lunga esecuzione o assorba una quantità considerevole di risorse, eseguire l'offload dell'elaborazione relativa alla richiesta a un'attività separata. ➤ Usare processi in background per eseguire queste attività. Questa strategia consente al servizio di continuare a ricevere richieste e di rimanere reattivo. ➤ Se sono presenti numerose attività in background o se le attività richiedono una notevole quantità di tempo o risorse, suddividere il lavoro tra più unità di calcolo.
  • 27. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Usare il partizionamento dei dati ➤ Suddividere i dati tra più database e server di database oppure progettare l'applicazione per l'uso di servizi di archiviazione dati che forniscano tale partizionamento in modo trasparente, ad esempio un database elastico per il database SQL di Azure e l'archivio tabelle di Azure. ➤ Questo approccio può contribuire a ottimizzare le prestazioni e consente di implementare più facilmente la scalabilità. Sono disponibili diverse tecniche di partizionamento, ad esempio orizzontale, verticale e funzionale.
  • 28. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Usare le code per livellare il carico per le operazioni di scrittura dati ➤ Una massiva attività di scrittura può sovraccaricare il servizio e causare una propagazione dei problemi. ➤ Per evitare tali situazioni, considerare la possibilità di implementare il modello di livellamento del carico basato sulle code. Usare una coda che funge da buffer tra un'attività e un servizio richiamato. Questo può alleggerire i sovraccarichi a intermittenza che diversamente potrebbero causare un errore del servizio o il timeout dell'attività.
  • 29. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Prendere in considerazione la denormalizzazione dei dati ➤ La normalizzazione dei dati consente di evitare la duplicazione e l'incoerenza. La gestione di più indici, la verifica dell'integrità referenziale, l'esecuzione di più accessi a piccoli blocchi di dati e l'unione di tabelle tramite join per riassemblare i dati sono tutte operazioni che generano un sovraccarico che può influire negativamente sulle prestazioni. ➤ Valutare se una certa duplicazione e un volume di archiviazione aggiuntivo sono accettabili per ridurre il carico dell'archivio dati.
  • 30. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Prendere in considerazione l'uso di tipi diversi di archivio dati per tipi diversi di dati ➤ Scegliere i tipi in base alla loro ottimizzazione per il tipo specifico di dati. ➤ Questo può includere l'uso dell'archivio tabelle, di un database di documenti o di un archivio dati di tipo famiglia di colonne al posto o insieme a un database relazionale. ➤ Considerare sempre i vincoli di coerenza necessari per scegliere la soluzione migliore.
  • 31. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Perché usare un database relazionale? ➤ Usare un database relazionale quando sono importanti garanzie di coerenza forte, in cui tutte le modifiche sono atomiche e le transazioni lasciano sempre i dati in uno stato coerente. Tuttavia, un database relazionale in genere non può scalare orizzontalmente senza partizionare i dati in qualche modo. L'implementazione del partizionamento orizzontale manuale può richiedere molto tempo. Inoltre, i dati nel database relazionale devono essere normalizzati, che non è appropriato per ogni set di dati. ➤ Se un database relazionale è considerato ottimale, Azure offre diverse opzioni PaaS che gestiscono completamente l'hosting e le operazioni del database. database SQL di Azure possibile ospitare database singoli o più database (database SQL di Azure Istanza gestita). La suite di offerte include requisiti che superano le prestazioni, la scalabilità, le dimensioni, la resilienza, il ripristino di emergenza e la compatibilità della migrazione.
  • 32. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Perché usare un database NoSQL? ➤ Usare un database NoSQL quando le prestazioni e la disponibilità delle applicazioni sono più importanti della coerenza forte. I database NoSQL sono ideali per la gestione di dati di grandi dimensioni, non correlati, indeterminati o in rapida evoluzione. ➤ Azure offre due servizi gestiti che ottimizzano per le soluzioni NoSQL: Azure Cosmos DB e cache di Azure per Redis. ➤ Per i database di documenti e grafi, Cosmos db offre scalabilità e prestazioni estremamente elevate. ➤ Inoltre si possono considerare le opzioni legate alle soluzioni storage come Azure Tables.
  • 33. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Usare la memorizzazione nella cache in modo aggressivo ➤ Usare la memorizzazione nella cache laddove possibile per ridurre il carico delle risorse e dei servizi che generano o forniscono dati. La memorizzazione nella cache in genere è adatta per i dati relativamente statici o da ottenere con una notevole elaborazione. ➤ La memorizzazione nella cache deve avvenire a tutti i livelli appropriati in ogni livello dell'applicazione, tra cui l'accesso ai dati e la generazione dell'interfaccia utente.
  • 34. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Usare chiamate asincrone ➤ Quando possibile, usare codice asincrono per accedere a risorse o servizi che possono essere limitati da larghezza di banda di rete o I/O oppure che hanno una latenza considerevole per evitare di bloccare il thread chiamante.
  • 35. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Evitare di bloccare le risorse e usare invece un approccio ottimistico ➤ Non bloccare mai l'accesso alle risorse, ad esempio di archiviazione o altri servizi che presentino una latenza notevole, perché è una delle cause principali della riduzione delle prestazioni. Usare sempre approcci ottimistici per la gestione delle operazioni simultanee, ad esempio la scrittura in un archivio. Usare le funzionalità del livello di archiviazione per gestire i conflitti. ➤ Nelle applicazioni distribuite i dati possono essere coerenti solo alla fine (pattern «eventually consistent»).
  • 36. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Ridurre al minimo il numero di connessioni necessarie ➤ Le connessioni ai servizi assorbono risorse. Limitare il numero di connessioni necessarie e assicurarsi che le connessioni esistenti vengano riutilizzate quando possibile. Mantenere le connessioni e le risorse soltanto per il tempo necessario a usarle. Ad esempio, aprire le connessioni solo all'ultimo momento e restituirle al pool di connessioni appena possibile. Acquisire le risorse il più tardi possibile ed eliminarle il prima possibile. Questo consente un uso ottimale del pool di connessioni mediante il riutilizzo delle stesse.
  • 37. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Scegliere le dimensioni della macchina virtuale più giuste ➤ La scelta delle dimensioni errate della macchina virtuale può causare problemi di capacità quando le macchine virtuali si avvicinano ai limiti. Può anche comportare costi non necessari. Per scegliere le dimensioni della macchina virtuale giuste, prendere in considerazione i carichi di lavoro, il numero di CPU, la capacità della RAM, le dimensioni del disco e la velocità in base ai requisiti aziendali. ➤ Azure offre diverse categorie di dimensioni delle macchine virtuali, ognuna progettata per eseguire carichi di lavoro diversi.
  • 38. EFFICIENZA DELLE PRESTAZIONI - PROGETTAZIONE ➤ Aumentare il numero di risorse anziché aumentare le dimensioni ➤ Quando si usano tecnologie cloud, è in genere più semplice, più economico ed efficace aumentare le risorse rispetto all'aumento delle dimensioni. Pianificare la scalabilità del livello applicazione aggiungendo un'infrastruttura aggiuntiva per soddisfare la domanda. Assicurarsi di rimuovere le risorse quando non sono necessarie. Se si prevede di aumentare le dimensioni aumentando le risorse allocate agli host, si raggiungerà un limite in cui diventa proibitivo aumentare ulteriormente i costi. La scalabilità verticale spesso richiede anche tempi di inattività per il riavvio dei server.
  • 40. EFFICIENZA DELLE PRESTAZIONI - TEST ➤ Garantire solidi test delle prestazioni con responsabilità del team condiviso ➤ L'implementazione corretta di test delle prestazioni significativi richiede una serie di risorse. Non si tratta di un singolo sviluppatore o analista del controllo qualità che esegue alcuni test nel computer locale. I test delle prestazioni necessitano invece di un ambiente di test su cui è possibile eseguire i test senza interferire con i dati e gli ambienti di produzione. ➤ I test delle prestazioni richiedono input e impegno da parte di sviluppatori, architetti, amministratori di database e amministratori di rete.
  • 41. EFFICIENZA DELLE PRESTAZIONI - TEST ➤ Scegliere gli strumenti di test in base al tipo di test delle prestazioni che si sta tentando di eseguire ➤ Sono disponibili vari strumenti di test delle prestazioni per DevOps. Alcuni strumenti come JMeter eseguono solo test su endpoint e testano gli stati HTTP. Altri strumenti come K6 e Selenium possono eseguire test che controllano anche la qualità e le variazioni dei dati.
  • 42. EFFICIENZA DELLE PRESTAZIONI - TEST ➤ Stabilire le baseline ➤ In primo luogo, stabilire le linee di base delle prestazioni per l'applicazione. Stabilire quindi una cadenza regolare per l'esecuzione dei test. Eseguire il test come parte di un evento pianificato o parte di una pipeline di compilazione di integrazione continua. ➤ Le baseline consentono di determinare lo stato di efficienza corrente dell'applicazione e la relativa infrastruttura di supporto. Le baseline possono fornire informazioni dettagliate utili per i miglioramenti e determinare se l'applicazione è in grado di soddisfare gli obiettivi aziendali. Le baseline possono essere create per qualsiasi applicazione. Indipendentemente dal momento in cui si stabilisce la baseline, misurare le prestazioni rispetto a tale baseline durante lo sviluppo continuo. Quando il codice e o l'infrastruttura cambiano, l'effetto sulle prestazioni può essere misurato attivamente.
  • 43. EFFICIENZA DELLE PRESTAZIONI - TEST ➤ Conoscere i limiti dei servizi di Azure utilizzati ➤ A diversi servizi di Azure sono associati limiti rigidi e non rigidi. I termini soft limit e hard limit descrivono il limite di servizio corrente e regolabile (limite soft) e il limite massimo (limite rigido). Comprendere i limiti per i servizi utilizzati in modo da non essere bloccati se è necessario superarli.
  • 45. EFFICIENZA DELLE PRESTAZIONI - MONITORAGGIO ➤ La risoluzione dei problemi relativi alle prestazioni di un'applicazione richiede un monitoraggio e un'analisi affidabile. I problemi di prestazioni possono derivare da query di database, connettività tra servizi, risorse con provisioning insufficiente o perdite di memoria nel codice. ➤ Il monitoraggio continuo dei servizi e il controllo dello stato di integrità dei carichi di lavoro correnti sono fondamentali per mantenere le prestazioni complessive del carico di lavoro. Una strategia di monitoraggio generale considera questi fattori: • Scalabilità • Resilienza dell'infrastruttura, dell'applicazione e dei servizi dipendenti • Prestazioni dell'applicazione e dell'infrastruttura
  • 46. EFFICIENZA DELLE PRESTAZIONI - MONITORAGGIO ➤ Dalla monitoria all’osservabilità • Abilitare e acquisire i dati di telemetria in tutta l'applicazione per compilare e visualizzare i flussi di transazioni end-to- end per l'applicazione. • Vedere le metriche dei servizi di Azure, ad esempio l'utilizzo della CPU e della memoria, le informazioni sulla larghezza di banda, l'utilizzo corrente dello spazio di archiviazione e altro ancora. • Usare i log delle risorse e della piattaforma per ottenere informazioni su quali eventi si verificano e in quali condizioni. • Per la scalabilità, esaminare le metriche per determinare come effettuare il provisioning dinamico delle risorse e ridimensionare in base alla domanda. • Nei log e nelle metriche raccolti cercare segnali che potrebbero rendere improvvisamente non disponibile un sistema o i relativi componenti. • Usare la tecnologia di aggregazione dei log per raccogliere informazioni in tutti i componenti dell'applicazione. • Archiviare i log e le metriche chiave dei componenti critici per la valutazione statistica e la stima delle tendenze. • Identificare gli antipattern nel codice.
  • 48. EFFICIENZA DELLE PRESTAZIONI - CONCLUSIONI Scalabilità Le risorse Cloud sono elastiche per definizione. Occorre verificare le opzioni di scalabilità orizzontale ma anche valutare sempre le unità di scala, per evitare di causare effetti collaterali negativi e rallentamenti a fronte del dimensionamento modificato in un certo livello.
  • 49. EFFICIENZA DELLE PRESTAZIONI - CONCLUSIONI Osservabilità In sistemi complessi e distribuiti, la chiave è la capacità di conoscere sia lo stato interno di ogni componenti sia le relazioni tra componenti diversi. I moderni sistemi di monitoraggio, tramite la raccolta e correlazione di metriche, logs e telemetrie, consentono la massima visibilità, cui poter associare sia analisi che reazioni automatizzate.
  • 50. THE END – Q&A ?

Editor's Notes

  1. Azure Well-Architected Framework è una serie di principi guida utilizzabili per migliorare la qualità dei carichi di lavoro. Il framework è costituito da cinque elementi fondamentali dell'eccellenza dell'architettura: Affidabilità - La capacità di un sistema di correggere gli errori e continuare a funzionare. Sicurezza - Protezione delle applicazioni e dei dati dalle minacce. Ottimizzazione dei costi - Gestione dei costi per massimizzare il valore offerto. Eccellenza operativa - Processi operativi che mantengono un sistema in esecuzione in produzione. Efficienza delle prestazioni - La capacità di un sistema di adattarsi ai cambiamenti di carico. L'integrazione di questi elementi fondamentali consente di produrre un'architettura cloud di alta qualità, stabile ed efficiente:
  2. Utilizzo generico: offre un rapporto cpu-memoria bilanciato. Sono ideali per test e sviluppo, database medio-piccoli e server Web con traffico da medio a ridotto. Ottimizzata per la memoria: offre un rapporto elevato tra memoria e CPU, ideale per server di database relazionali, cache medio-grandi e analisi in memoria. Ottimizzato per il calcolo: hanno un rapporto elevato tra CPU e memoria. Queste dimensioni sono buone per server Web con traffico medio, appliance di rete, processi batch e server applicazioni. Ottimizzata per GPU: disponibile con GPU singole, multiple o frazionarie. Queste dimensioni sono progettate per carichi di lavoro di visualizzazione oppure a elevato utilizzo di calcolo o di grafica. High Performance Compute: progettata per offrire prestazioni, scalabilità ed efficienza dei costi di classe leadership per un'ampia gamma di carichi di lavoro HPC reali. Archiviazione ottimizzate: offrono velocità effettiva del disco e I/O elevate e sono ideali per Big Data, SQL, database NoSQL, data warehousing e database transazionali di grandi dimensioni. Ad esempio, Cassandra, MongoDB, Cloudera e Redis.
  3. Per un elenco dei limiti di Azure più comuni, vedere Limiti, quote e vincoli di servizio e sottoscrizione : https://docs.microsoft.com/it-it/azure/azure-resource-manager/management/azure-subscription-service-limits