Microservices architecture & Service Fabric

30

Transcript of Microservices architecture & Service Fabric

Page 1: Microservices architecture & Service Fabric
Page 2: Microservices architecture & Service Fabric

Architettura a Microservizi & Service FabricMassimo Bonanni

SR Consultant - ModernApps EMEA Domain - Microsoft

@[email protected]

Page 3: Microservices architecture & Service Fabric

Agenda

Concetti di architettura a Microservizi

Approccio Microsoft ai Microservizi – Service Fabric

Modello di programmazione di Service Fabric

Conclusioni

Page 4: Microservices architecture & Service Fabric

Concetti di architettura a Microservizi

Page 5: Microservices architecture & Service Fabric

Perchè un approccio Microservice?

Realizzare e gestire servizi scalabili

Applicazioni in continua evoluzione

Maggiore velocità di distribuzione delle nuove funzionalità per rispondere ai requisiti del cliente

Miglior utilizzo delle risorse per abbatterei costi di gestione

Page 6: Microservices architecture & Service Fabric

Definizione di Microservizi

Fanno una cosa sola in maniera efficiente ed efficace, sviluppati da un piccolo team di progettazione.

Scritti in qualsiasi linguaggio di programmazione e con qualsiasi framework.

Costituiti da codice, configurazione e risorse, sottoposti al controllo delle versioni, distribuiti e ridimensionati in maniera indipendente.

Interagiscono con altri microservizi tramite interfacce e protocolli ben definiti.

Hanno nomi univoci (URL) usati per risolvere la propria posizione.

Rimangono coerenti e disponibili in caso di errori.

Page 7: Microservices architecture & Service Fabric

Eliminazione di singoli punti di guasto: un bug in un microservizio rimane isolato all’interno dello stesso;

Iterazioni più veloci: codice più semplice con modifiche che non impattano tutta l’applicazione;

Scalabilità: on-demand, elastica, densità dei servizi;

Versionamento: versioning sul singolo servizio in maniera semplice;

Flessibilità del linguaggio di sviluppo: minimizza l’impegno a lungo termine sullo stack tecnologico. Quando si sviluppa un nuovo servizio, si è liberi di scegliere qualsiasi linguaggio di programmazione e framework (i servizi sono disaccoppiati tra loro)

Benefici dell’architettura basata su Microservizi

Page 8: Microservices architecture & Service Fabric

Automazione spinta: mantenere più flussi di distribuzione corretti e coerenti per tutto il ciclo di vita dell’applicazione;

Comunicazione tra i servizi: i servizi disaccoppiati hanno bisogno di un modo efficace per comunicare senza rallentare l’intera applicazione;

Coerenza dei dati: garantire la coerenza dei dati è una sfida, sia per lo store dei dati che per i dati in transito sulla rete;

Alta disponibilità: il tempo di attività di ogni servizio contribuisce alla disponibilità complessiva dell’intera applicazione. Ogni servizio deve quindi avere un proprio sistema di misure distribuite per garantire all’applicazione un ampia disponibilità;

Test: non è semplice implementare i test di integrazione. E’ necessario automatizzare il più possibile.

Svantaggi dell’architettura basata su Microservizi

Page 9: Microservices architecture & Service Fabric

Approccio “Monolitico” Approccio Microservizi

Una applicazione a microservizi

separa le funzionalità in servizi distinti

Questo approccio consente di scalare

indipendentemente ogni servizio,

creando istanze di ognuno su

Server/VM/Container.

Una applicazione monolitica

raggruppa insieme funzionalità di un

dominio ed è normalmente separata in

layer, come web, business e data.

Viene scalata clonandola su più

Server/VM/Container.

App 1 App 2App 1

Page 10: Microservices architecture & Service Fabric

• Singolo database

• Livelli con tecnologie specifiche

I dati nelle architetture n-layer I dati nell’approccio Microservizi

• Grafo di Microservizi interconnessi

• Lo stato è all’interno del singolo Microservice

• Differenti tecnologie utilizzate

• Database per i dati «cold»

Stateful

services

Web presentation services

Stateless

servicesSQL DBor

No-SQL

Mobileapps

Web Tier

Services Tier

Data Tier

Il database è condivisotra tutti i servizi

Stateless services with separate stores

Ogni microserviziopossiede il proprio

modello dati!

SQL[…]

La connessione al database è un collo di

bottiglia

Cache Tier

L’utilizzo di una Cache non è di aiuto

nell’ingestion di massicce quantità di dati (Events, IoT, etc.)

Page 11: Microservices architecture & Service Fabric

Approccio Microsoft ai Microservizi – Service Fabric

Page 12: Microservices architecture & Service Fabric

Azure Service Fabric

Microservices

Azure

WindowsServer

Linux

Hosted Clouds

WindowsServer

Linux

Service Fabric

Private Clouds

WindowsServer

Linux

High Availability

Hyper-Scale

Hybrid Operations

High Density Rolling Upgrades

Stateful services

Low LatencyFast startup &

shutdown

Container Orchestration

& lifecycle management

Replication &

Failover

Simple

programming

modelsLoad balancing

Self-healingData Partitioning

Automated Rollback

Health

Monitoring

Placement

Constraints

Page 13: Microservices architecture & Service Fabric

Il clusterUn cluster è un insieme di macchine (virtuali o fisiche) connesse in rete e in cui è presente il runtime di Service Fabric.

Il cluster è composto da nodi e configurabile tramite un manifest.

Ogni nodo può avere caratteristiche custom che permettono di posizionare nel migliore dei modi i servizi (constraint).

Pensato per limitare l’impatto dei singoli guasti hardware.

Un cluster è suddiviso in Upgrade Domain e Fault Domain.

https://aka.ms/sfcluster

Page 14: Microservices architecture & Service Fabric

Fault Domain e Upgrade Domain

Fault Domain: è un insieme di machine che possono avere problemi contemporaneamente. Ad esempio una singola macchina o tutte le machine alimentate dalla stessa presa.

Upgrade Domain: un upgrade domain definisce l’insieme dei nodi che vengono aggiornati contemporaneamente.

https://aka.ms/sfdomains

Page 15: Microservices architecture & Service Fabric

Application Model

Un Application Type è un insieme di

Service Type e definisce la struttura

dell’applicazione.

Un Application è un’istanza di un

Application TypeIl codice delle differenti application viene eseguito in differenti processianche se le applicazioni girano nellostesso nodo.

https://aka.ms/sfappmodel

Page 16: Microservices architecture & Service Fabric

I microservizi memorizzano lo stato in partizioni in modo da consentire la scalabilità.

Una partizione contiene:

• Istanze di servizi senza stato (primarie e secondarie)

• Repliche di servizi con stato (primarie e secondarie)

Le repliche di un servizio garantisconol’alta disponibilità: se un’istanza o replicadi un servizio primaria non risponde, Service Fabric promuove a primaria unadelle secondarie garantendo continuità al servizio.

Le partizioni

https://aka.ms/sfpartitions

Page 17: Microservices architecture & Service Fabric

Development

Cluster

Page 18: Microservices architecture & Service Fabric

Modello di programmazione di Service Fabric

Page 19: Microservices architecture & Service Fabric

Tipologie di servizi

Guest executables & guest containers• Permette di implementare e pubblicare servizi scritti con qualsiasi framework (win32, Java, …).

Stateless Services• Servizi il cui stato è persistito esternamente (ad esempio in Azure DB)

• Applicazioni web (ASP.NET) esistenti e worker role

Stateful Services• Affidabilità dello stato gestita attraverso repliche e persistenza locale

• Bassa latenza

• Riducono la complessità rispetto al tradizionale approccio n-layer

Page 20: Microservices architecture & Service Fabric

Modelli di programmazione Built-In

Reliable Service : insieme di API per l’implementazione di servizi con e senza

stato.

Stateful Service : memorizzano lo stato utilizzando delle reliable

collection e sfruttando le repliche per garantire la consistenza dello

stesso.

Stateless Service : non memorizzano lo stato in repliche. Consentono di

hostare service WCF o Web

Reliable Actor : insieme di API per l’implementazione di oggetti basati sul

concetto di Actor Model.

https://aka.ms/sfprogmodel

Page 21: Microservices architecture & Service Fabric

Reliable Service

Simili ai Web Service ma forniscono alcune caratteristiche out of the box come alta disponibilità, affidabilità, resilienza.

Basano la scalabilità sul concetto di partizione dei dati.

Possono essere Stateless o Stateful.

Lo stato è gestito da uno State Manager che fornisce API per rendere i dati affidabili e replicati nel cluster.

I Reliable Service comunicano tra loro (e con gli Attori) tramite messaggi asincroni.

https://aka.ms/sfreliableservices

Page 22: Microservices architecture & Service Fabric

Reliable Actor

Basato su un pattern architetturale (Actor Model) pensato per realizzare un’architetturacostruita da processi indipendenti.

Ogni attore è individuato da un identificatore univoco attraverso il quale può essereistanziato (ActorId).

Ogni attore fornisce azioni che possono essere invocate dall’esterno. Le azioni sonoprocessate nell’ordine in cui vengono invocate.

Generalmente Stateful (ma lo stato può essere persistente o volatile). L’affidabilità dello statoè gestita, in maniera trasparente, dal framework.

https://aka.ms/sfreliableactors

Page 23: Microservices architecture & Service Fabric

Reliable Actor

Ha un pattern di esecuzione Single Thread: un singolo attore non è in grado di elaborare altre richieste in arrivo finché la richiesta corrente non è terminata.

L’Actor Model è un modello matematico per il calcolo concorrente teorizzato nel 1973 da Carl Hewitt (http://aka.ms/HewittCH9Actor).

Gli Attori comunicano tra loro (e con i Reliable Service) tramite messaggi asincroni.

https://aka.ms/sfreliableactors

Page 24: Microservices architecture & Service Fabric

Reliable Actors & Services

https://github.com/massimobonanni/ServiceFabricSamples

Page 25: Microservices architecture & Service Fabric

Service Fabric nel cloud

CosmosDB

Page 26: Microservices architecture & Service Fabric

Service Fabric Takeaways

Service Fabric fornisce “chiavi in mano” tutte le funzionalità di

orchestrazione necessarie per i nostri servizi.

Utilizzato per molti dei servizi offerti da Azure.

Può essere eseguito sia nel Cloud che on Premise.

Può lavorare con processi, container o una combinazione dei due.

Gira su Linux e Windows.

Possibilità di utilizzo di più linguaggi/framework.

Page 27: Microservices architecture & Service Fabric
Page 28: Microservices architecture & Service Fabric

RiferimentiDocumentazione ufficiale

https://docs.microsoft.com/en-us/azure/service-fabric/

Blog ufficialehttps://blogs.msdn.microsoft.com/azureservicefabric/

Githubhttps://github.com/Azure/service-fabric

Build2017 - Azure Service Fabric, microservices, containers, and the road aheadhttps://channel9.msdn.com/Events/Build/2017/B8106

Build2017 - Managing secure, scalable Azure Service Fabric clusters and applicationshttps://channel9.msdn.com/events/Build/2017/T6084

MVA - Service Fabric Patterns and Practiceshttps://mva.microsoft.com/en-US/training-courses/16925

MVA - Building Microservices Applications on Azure Service Fabrichttps://mva.microsoft.com/en-US/training-courses/16747

Page 29: Microservices architecture & Service Fabric

Feedback Form

Aiutateci a migliorare la qualità dei nostri eventicompilando il feedback form:

https://1drv.ms/xs/s!Au9T1EY0TwHfn6RdsXBllmc3qTesWA

Page 30: Microservices architecture & Service Fabric

Thanks to our Sponsor