Moving from Monolithic to Microservice Architecture: an OSS based stack deployed in Production - Simone Cellini, Simone Gaddeo, Daniele Mannarino - Codemotion Rome 2017
Realizzare un’unica piattaforma che garantisce Omni-channel, Zero-downtime, Functional-decomposition e Auto-scaling è possibile? Vi raccontiamo un caso reale di come, utilizzando Zuul, Eureka, SpringBoot, Docker abbiamo realizzato i desideri del cliente e attuato questa trasformazione.
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Ähnlich wie Moving from Monolithic to Microservice Architecture: an OSS based stack deployed in Production - Simone Cellini, Simone Gaddeo, Daniele Mannarino - Codemotion Rome 2017
Ähnlich wie Moving from Monolithic to Microservice Architecture: an OSS based stack deployed in Production - Simone Cellini, Simone Gaddeo, Daniele Mannarino - Codemotion Rome 2017 (20)
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Moving from Monolithic to Microservice Architecture: an OSS based stack deployed in Production - Simone Cellini, Simone Gaddeo, Daniele Mannarino - Codemotion Rome 2017
2. I N T R O D U C T I O N : C H I S I A M O
@simcellini
http://it.linkedin.com/pub/simone-cellini/61/574/313
@simone_gaddeo
https://it.linkedin.com/in/simone-gaddeo-8b5a22115
@CodemotionWorld @NTTDATA_IT #ce2017msa
3. I N T R O D U C T I O N : TA L K
Realizzare un’unica piattaforma che garantisce
«Omni-channel»
«Zero-downtime»
«Functional-decomposition»
«Auto-scaling»
E’ possibile?
4. S U M M A R Y
Business Opportunity
Introduction
Architectural Solution
Technology Solution
Demo
Conclusions
Q & A
5. B U S I N E S S O P P O R T U N I T Y : C U S T O M E R R E Q U I R E M E N T S
6. B U S I N E S S O P P O R T U N I T Y : C U S T O M E R E X P E C TAT I O N
Omni-channel
Monitoring
Flessibilità
Tempistiche
Diminuzione delle
tempistiche di
disservizio durante i
deployment
Flessibilità nel deployment e
nella manutenzione evolutiva
della piattaforma
Garanzia di
comportamenti
seamless. Si inizia un
customer journey su un
canale e si continua su
un altro
Monitoring applicativo
e supporto per il
troubleshooting
7. B U S I N E S S O P P O R T U N I T Y : C U S T O M E R C O N S T R A I N T S
Software Hardware
Business
Cloud
8. B U S I N E S S O P P O R T U N I T Y : P R O P O S A L
MicroService Architecture (MSA) è uno stile architetturale per lo sviluppo di una singola applicazione
come un insieme di microservizi. I microservizi sono dei servizi piccoli e autonomi, eseguiti come
processi distinti, che cooperano comunicando mediante meccanismi leggeri. La gestione centralizzata
è minima. Quindi ogni microservizio:
o Rappresenta una specifica capacità di business autocontenuta (bounded context)
o Presenta basso livello di accoppiamento con gli altri
o È progettato per sopravvivere al fallimento di altri servizi (Circuit Breaker)
o Deve avere interfaccia che facilita l’uso e massimizza il riuso (Smart endpoints and dumb pipes)
o È rilasciabile e scalabile indipendentemente dagli altri
o È assegnato ad un gruppo di lavoro piccolo (Two Pizza Team) e autonomo
o Può essere realizzato con tecnologie specifiche (polyglot programming) e avere la propria base dati
(polyglot persistence), con possibili migrazioni incrementali di natura diversa
9. A R C H I T E C T U R A L S O L U T I O N : O V E R V I E W
Desktop
Tablet Smartphone
Api Gateway
Caching Monitoring
Service Discovery
Legacy SystemLegacy System Legacy System
Microservices Microservices Microservices
Container
Api Management
10. Mantiene il registro di istanze in
esecuzione. Ogni istanza si
registra sul Service Discovery.
La richiesta viene instradata al
Microservices in base ad un
algoritmo bilanciato.
La soluzione proposta ha 3
livelli di cache:
• A livello di Api Gateway
• A livello di microservizio
composto
• A livello di singoli microservizi
Automatizzazione del
deployment e messa in
esercizio di una applicazione,
grazie alla astrazione dovuta
alla virtualizzazione del SO.
Componenti che permettono il
controllo ed il monitoraggio
dell’intera piattaforma. Il
monitoraggio è diviso in
monitoraggio applicativo e
monitoraggio di sistema.
Insieme di singoli servizi con
granularità molto fine. Questa
soluzione permette di avere
servizi indipendenti garantendo
un aumento dell’up-time grazie
all’independent deployment.
E’ il processo di pubblicazione,
documentazione e supervisione
di API in un ambiente sicuro e
scalabile. Informa l’Api Gateway
che è presente un nuovo
servizio.
Access point per diversi client
device-oriented. Le richieste
arrivano all’Api Gateway che
individua il servizio richiesto
applicando le policy configurate
(Autenticazione, ..)
API Gateway
Service Discovery Microservices
Caching
Monitoring
API Management
Container
A R C H I T E C T U R A L S O L U T I O N : D E TA I L
11. S C O U T I N G
API
Management
Omnichannel
Microservices
Containers
Trend commerciali, organizzativi,
architetturali, tecnologici e
infrastrutturali evolvono e si
intersecano.
Maturità non è ancora stata raggiunta
in alcuni ambiti, ma aziende di
successo adottano già da tempo
nuovi paradigmi e soluzioni
Aziende che intraprendono iniziative
di Digital Transformation devono
tener conto di questi trend.
12. T E C H N O L O G Y S O L U T I O N : A P I G AT E W AY
Per ogni richiesta viene controllata la possibilità di accedere alla risorsa
richiesta, in caso negativo la richiesta viene rigettata
In caso alcune risorse di Microservices siano in crisi, il carico viene
diminuito gradualmente fino al momento nel quale i sistemi ritornano in
piena efficienza
Vengono registrati diversi dati e metriche per il controllo del servizio in
produzione
E' possibile definire una capacità di richieste per singola risorsa e non
erogare tutte le richieste che superano questa quota
E' possibile ritornare direttamente risposte a livello di gateway senza
necessariamente effettuare routing verso i Microservices
Dinamicamente le richieste vengono ruotate ai diversi cluster di
Microservices con load balancing
Authentication
Authorization
Security
Routing
Resiliency
Monitoring
Quota
Caching
13. T E C H N O L O G Y S O L U T I O N : A P I G AT E W AY
F I LT E R S
Il ruolo centrale nel routing HTTP Request/Response è costituito dai filtri.
Ogni filtro possiede le seguenti caratteristiche:
• Type (fase di esecuzione all'interno del ciclo di vita della richiesta)
• PRE: Fase antecedente al routing verso la risorsa (ad es. Authentication, Authorization, Logging, etc...)
• ROUTING: Fase di routing della richiesta verso la risorsa (Es. via Apache HttpClient, Ribbon Netflix, etc...)
• POST: Fase di creazione della risposta (ad es. aggiunta di header alla response, statistiche e metriche,
etc...)
• ERROR: Fase eseguita se presente un errore in una delle precedenti fasi
• Execution Order (All'interno di un Type indica l'ordine di esecuzione del filtro)
• Criteria (Condizioni per le quali il filtro viene eseguito)
• Action(L'azione che deve essere eseguita se i Criteria sono rispettati)
15. T E C H N O L O G Y S O L U T I O N : S E R V I C E D I S C O V E R Y
EUREKA SERVER
Gestione del registro delle
istanze di servizi presenti
nell’architettura (Service
Registry)
Esposizione di API Rest
per le operazioni di
registrazione, de-
registrazione, fetching
informazioni istanze e
cancellazione
Propagazione delle
informazioni tra i diversi
nodi di Eureka Server
EUREKA CLIENT
Registra e de-registra
istanze di servizio su
Eureka Server
Mantiene la connessione
con il server Eureka
attraverso heartbeat
Recupera e mantiene
informazioni sui servizi dal
server Eureka
16. 4. Get B
T E C H N O L O G Y S O L U T I O N : S E R V I C E D I S C O V E R Y
Service A or ApiGateway
Eureka Client
Service B
Eureka Client
Eureka Server
Ribbon
5. Call B
17. T E C H N O L O G Y S O L U T I O N : M I C R O S E R V I C E S
Caratteristiche principali
• Permette di sviluppare java stand-alone web applications
• Può utilizzare in modalità embedded diversi servlet
container: Tomcat, Jetty, etc
• Utilizza Spring Framework con configurazione automatica
• Offre funzionalità utili per l’ambiente di produzione: plugin
maven per packaging, possibilità di esternalizzare la
configurazione, possibilità di estrazione di varie metriche
Perché lo abbiamo scelto
• Permette di esporre facilmente servizi REST utilizzando
Spring MVC
• Utilizza Spring Framework che permette uno sviluppo
rapido seguendo le principali best-practices
• Possiede diversi adapters per integrare facilmente db
sql (mysql ,H2 ,Oracle) e no-sql (MongoDb, Cassandra,
ElasticSearch), ldap, cache (Redis , HazelCast), ecc.
Inoltre
• Abbiamo scelto di integrare manualmente Eureka Client senza utilizzare l’integrazione di Spring Cloud in modo da avere
una soluzione snella e indipendente che ci ha permesso di utilizzare Eureka Server e Zuul rilasciati direttamente da
Netflix
18. T E C H N O L O G Y S O L U T I O N : C O N TA I N E R
Build: Docker permette di comporre applicazioni, senza
preoccuparsi di inconsistenze tra vari ambienti
SHIP: Docker permette di progettare l’intero ciclo di
sviluppo dell’applicazione, e gestirlo con un’interfaccia
utente
Run: offre la possibilità di deployare servizi scalabili
I Container consentono di pacchettizzare
un’applicazione con tutte le parti necessarie (le librerie
e altre risorse correlate) e distribuirla come un unico
pacchetto. E’ un’applicazione eseguita in namespace
separati (network namespace, file system, users, IPC).
Livello di isolamento rafforzato da SELinux che
impedisce ai processi all’interno di un container di agire
all’esterno di esso. Condividono il kernel della
macchina host .
Le soluzioni per orchestrare i container sono
innumerevoli, Swarm è la proposta sviluppata dalla
startup Docker che si adatta facilmente ad ambienti
in cui già si opera con container Docker. Swarm
trasforma molti Docker Engine in un solo Docker
Engine virtuale. Le caratteristiche principali sono :
o Scheduling
o Re-Scheduling in caso di fallimento
o High Availability
o Discovery del servizio DNS-based
o Creazione master
o Aggiunta nodi al cluster
19. T E C H N O L O G Y S O L U T I O N : A P I M A N A G E M E N T
20. T E C H N O L O G Y S O L U T I O N : C A C H I N G
In memory data structure store che può essere utilizzato come Key-
Value nosql database, Caching system e Message broker.
Redis lavora con un dataset in memory che garantisce alte performance
High Availability via Redis Sentinel - Partitioning via Redis Cluster
E’ possibile eseguire più comandi in un’unica richiesta
Client per tutti i maggiori linguaggi di programmazione
Supporta varie strutture dati: Strings, Hashes, Lists, Sets, SortedSetsData Structures
High Performance
High Availability
Pipelining
Client
21. T E C H N O L O G Y S O L U T I O N : M O N I T O R I N G
Control
Asynchrony
Visualization
Key Features
• Data Collection
• Data Processing
• Data Aggregation
• Display Data
Application Output
Producer
Consumer
Data
Key Benefits
• Customer Marketing: analisi statistiche basate su User Experience
• IT-Operation: analisi statistiche sulle Performance
• Customer Product Manager: analisi applicative sul comportamento dello Stack’s
Soluzione completamente basata su pacchetti opensorce. I dati sono estratti dai Log Files senza nessun impatto sulle
performances. Fornisce statistiche, report e e supporto per analisi drill-down per la risoluzione dei malfunzionamenti
22. T E C H N O L O G Y S O L U T I O N : O V E R V I E W
Desktop
Tablet Smartphone
Api Gateway
Caching Monitoring
Service Discovery
Legacy SystemLegacy System Legacy System
Microservices Microservices Microservices
Container
Api Management
25. B E N E F I T S
Fornisce un alto livello di QOS,
quando avviene il fallimento di un
singolo componente, questo non
impatta la stabilità dell’intero sistema
Assicura un alto livello di scalabilità
per ogni componente/servizio sulla
base delle variazioni del carico
Si possono utilizzare più linguaggi,
framework o tipi di data-storage
Poiché ogni servizio è autonomo, è
più facile effettuare hot deploy senza
creare disservizi
Avere online più versioni di uno
stesso servizio per garantire la retro-
compatibilità a tutti i client integrati
con la piattaforma
Facilità per mantenere e far evolvere
un sistema garantendo rapidità nei
cicli di Build/Test/Release per
aggiungere o modificare funzionalità
La soluzione è indipendente da
piattaforme complesse
La responsabilità di ogni singolo
microservizio è chiara e definita