Architetture a Microservizi con Docker Container

32
Architetture a Microservizi con Docker Container Seminario Ordine Ingegneri Lecco Ing. Roberto Messora Lecco, 24/10/2016

Transcript of Architetture a Microservizi con Docker Container

Page 1: Architetture a Microservizi con Docker Container

Architetture a Microservizi con Docker Container

SeminarioOrdine Ingegneri Lecco

Ing. Roberto Messora

Lecco, 24/10/2016

Page 2: Architetture a Microservizi con Docker Container

2

–@robymes

[email protected][email protected]

– robymes

Contatti

www.ugidotnet.org

Page 3: Architetture a Microservizi con Docker Container

3

Presentare Docker e i suoi concetti di base, una delle tecnologie con il trend di crescita e adozione più altoDefinire quali sono i contesti architetturali in cui Docker si colloca al fine di fornire elementi di valutazione circa la sua eventuale adozionePresentare l’ecosistema di Docker e le tecnologie/prodotti ad esso legatiFornire alcuni elementi legati al ciclo di vita di sviluppo di una soluzione basata su DockerPresentare una soluzione demo basata su Docker

Obiettivi

Page 4: Architetture a Microservizi con Docker Container

4

Riferimenti

Demo–https://github.com/robymes/OrdinglcDocker

Presentazione–http://www.slideshare.net/RobertoMessora/architetture-a-

microservizi-con-docker-container

Page 5: Architetture a Microservizi con Docker Container

5

Docker– “It works on my machine”–Docker Container e dintorni–Consolidare il deploy: Virtual vs Container– Scalare Docker: Docker Swarm (et al.)–Ciclo di sviluppo di una soluzione Docker

Architetture basate sui servizi–Microservices vs SOA

Demo

Agenda

Page 6: Architetture a Microservizi con Docker Container
Page 7: Architetture a Microservizi con Docker Container
Page 8: Architetture a Microservizi con Docker Container

8

“Docker containers wrap a piece of software in a complete filesystem that contains everything needed to

run: code, runtime, system tools, system libraries – anything that can be installed on a server. This

guarantees that the software will always run the same, regardless of its environment.”

https://www.docker.com/what-docker

Cos’è un Container

Page 9: Architetture a Microservizi con Docker Container

9

Da Wikipedia–Docker è un progetto open-source che automatizza il deployment di

applicazioni all'interno di container software, fornendo un'astrazione addizionale grazie alla virtualizzazione a livello di sistema operativo di Linux–Utilizza le funzionalità di isolamento delle risorse del kernel Linux per

consentire a container indipendenti di coesistere sulla stessa istanza di Linux, evitando l'installazione e la manutenzione di una macchina virtuale– Le risorse possono essere isolate, i servizi limitati ed i processi avviati in

modo da avere una prospettiva completamente privata del sistema operativo, col loro proprio identificativo, file system ed interfaccia di rete• Namespace del kernel: isolano ciò che l'applicazione può vedere dell'ambiente

operativo (l'albero dei processi, la rete, gli ID utente ed i file system montati)• Cgroups del kernel: isolamento delle risorse (CPU, memoria, I/O a blocchi, rete)• Libreria libcontainer: uso delle funzionalità di virtualizzazione del kernel

Docker in pillole

Page 10: Architetture a Microservizi con Docker Container

10

Docker Container: uno stack di immagini

Page 11: Architetture a Microservizi con Docker Container

11

Con Windows Server 2016 Docker è disponibile nativamente anche su WindowsI principi di base sono gli stessi di Linux: accesso limitato e controllato alle risorse del kernelUn container Linux NON può essere ospitato su un host Windows e viceversa: i kernel sono differenti, le API utilizzate dal container sono specifiche per i due sistemi operativi (API Windows e API Linux)Un client Docker è in grado di supportare entrambe le API: un solo prodotto per enrambi i sistemi operativeI container Windows sono di due tipi–Windows Container: i container condividono il kernel con il sistema operativo host

(Windows Server 2016), altamente efficienti, ma adatti per ambienti trusted – Hyper-V Container: ad ogni container è assegnato un kernel virtualizzato e le

relative risorse (CPU, memoria, …), meno efficienti, ma isolamento totale

Docker for Windows

Page 12: Architetture a Microservizi con Docker Container

12

Sviluppato inizialmente come progetto interno in dotCloud, una società che si occupa di PaaS (Platform as a Service)Pubblicato su github come open source nel Marzo del 2013Nel Marzo del 2014 viene rilasciata la sua principale libreria libcontainer, sviluppata in GoAd oggi l’adozione di Docker da parte dei maggiori player di PaaS e cloud è praticamente totale: Amazon Web Services, Google Cloud Platform, IBM Bluemix, Microsoft Azure, OpenStack Nova, Vagrant, VMware vSphere, …Fra i maggiori contributori del progetto ci sono: il team di Docker, Cisco, Google, Huawei, IBM, Microsoft, Red Hat

Docker, un po’ di storia

Page 13: Architetture a Microservizi con Docker Container

13

Consolidare il deploy: Virtual vs Container

Page 14: Architetture a Microservizi con Docker Container

14

Docker Survey 2016

Page 15: Architetture a Microservizi con Docker Container

15

Docker Survey 2016

Page 16: Architetture a Microservizi con Docker Container

16

Docker Survey 2016

Page 17: Architetture a Microservizi con Docker Container

17

L’ecosistema Docker è composto da una serie di elementi–Docker Engine–Docker Machine–Docker Compose–Docker Swarm–Docker Hub

Docker Container e dintorni

Page 18: Architetture a Microservizi con Docker Container

18

Docker Engine e Docker Machine

Docker Engine

Docker Machine

Page 19: Architetture a Microservizi con Docker Container

19

Tempo di andare in produzione:– Scalabilità–Affidabilità– Facilità di deploy–Dev once run everywhere

Scalare Docker: Docker Swarm

Page 20: Architetture a Microservizi con Docker Container

20

Apache MesosMarathonMesosphere DC/OSKubernetes…

Scalare Container: non solo Docker Swarm

Page 21: Architetture a Microservizi con Docker Container

21

Ciclo di sviluppo con Docker

HubPush

DockerfilePull

Dockerfile PullImage

PullImage

Page 22: Architetture a Microservizi con Docker Container

22

Container e Architettura: Microservices?

Page 23: Architetture a Microservizi con Docker Container

23

Modello OASIS– Servizio: A mechanism to enable access to one or more capabilities, where the

access is provided using a prescribed interface and is exercised consistent with constraints and policies as specified by the service description

Generalmente topologicamente distribuite– Accesso ai servizi è remoto (REST, SOAP, AMQP, ...)Pro– Scalabilità– Disaccoppiamento– Controllo dello sviluppo, testing, deployment– Riscrittura invece che manutenzioneContro– Gestione dei contratti– Accesso remoto

Architetture basate sui servizi

Page 24: Architetture a Microservizi con Docker Container

24

Contratto– Service-based: contratto gestito dal solo servizio– Consumer-driven: contratto gestito in collborazione fra servizio e consumer– Attenzione al versioningDisponibilità– Capacità di un servizio di essere raggiunto (connettività)Responsività– Capacità di un servizio di rispondere alla chiamataSicurezza– Approccio Microservices: sicurezza gestita indipendentemente da ogni servizio

senza mediazione di un middleware (altrimenti ci sarebbe troppo "traffico" e la sicurezza uscirebbe dal buonded context introducendo troppe dipendenze esterne)

– Approccio tradizionale: sicurezza gestita tramite middleware infrastrutturaleTransazioni

Architetture basate sui servizi: ATTENZIONE

Blog Mauro Servientihttp://blogs.ugidotnet.org/topics

Page 25: Architetture a Microservizi con Docker Container

25

Transazioni tradizionali–ACID (atomicity, consistency, isolation, durability): in un contesto

transazionale se una azione fallisce, fallisce l’intera transazione e si esegue un rollback

In una architettura distribuita è praticamente impossibile mantenere un contesto transazionale: in genere una singola richiesta di business viene gestita da n serviziTransazioni distribuite–BASE (basic availability, soft state, eventual consistency): workflow, sagaNel caso in cui sia necessario assicurare ACID a livello di business la soluzione è rendere i servizi più "grossi" al fine di includere tutte le operazioni coinvoltePer rafforzare BASE è possibile utilizzare gli eventi–Miglior tracciamento di che cosa sta accadendo nel sistema al costo di una

maggiore complessità di gestione della messaggistica

Architetture basate sui servizi: Transazioni

Page 26: Architetture a Microservizi con Docker Container

26

Limitata tassonomia dei servizi– Servizi Funzionali– Servizi di Infrastruttura• non esposti verso l’esterno• Gestiti come servizi condivisi privati ad uso dei Servizi Funzionali

Tassonomia: Microservices

Page 27: Architetture a Microservizi con Docker Container

27

Ampia tassonomia dei servizi– Servizi di Business– Servizi di Infrastruttura– Servizi Enterprise– Servizi Applicativi

Tassonomia: SOA

Page 28: Architetture a Microservizi con Docker Container

28

Granularità

Microservices SOA

Una sola completa funzionalità di businessDimensione molto piccolaNecessità di comunicazione diretta fra serviziDifficoltà di implementazione transazioni tradizionali

Una intera funzionalità di business implementata da più servizi Dimensioni variabili fino anche ad un intero sotto SistemaComunicazione fra servizi tramite middleware (ESB)Possibilità di utilizzo transazioni tradizionali

“Start with a small number o larger services first”Sam Newman

Building Microservices, O’Really

Page 29: Architetture a Microservizi con Docker Container

29

Architetture di riferimento

Microservices– Domain Driven Design (DDD)– Bounded Context– Dipendenze ridotte al minimo

(infrastruttura)– Service chaining (attenzione a

catene troppo lunghe)

SOA– Service component sharing– Enterprise services– Dipendenze gestite introducendo

altri livelli di servizi– Service orchestration

Page 30: Architetture a Microservizi con Docker Container

30

Interoperabilità fra servizi

Microservices– REST– Accesso diretto al servizio– Semplificazione dei protocolli e

delle implementazioni

SOA– REST, AMQP, SOAP, …– Accesso ai servizi tramite

middleware (ESB)– Protocol transformation, Message

transformation, Contract decoupling

Page 31: Architetture a Microservizi con Docker Container

31

Demo Docker

Page 32: Architetture a Microservizi con Docker Container

32

Contatti

Roberto Messora

ESRI & Microsoft Specialist – @ Value Lab Spa

Speaker & Collaborator– @ UGIDotNET

Recapiti

Value Lab SpaPiazza A. Diaz 2, 20123 Milano(+39) [email protected]@gmail.com

Value Lab SrlPiazza Diaz 2, 20123 Milano (Italy)

T +39.02.7788931 F [email protected] - www.valuelab.it