Von Null auf Hundert mit Microservices

Preview:

Citation preview

BerndZuther|codecentricAG

VonNullaufHundertmitMicroservices

Data

Functionality

Microservice

6/45

Data

Functionality

Microservice

fitsinonebrain,

·

6/45

Data

Functionality

Microservice

fitsinonebrain,designedforreplaceability,

·

·

6/45

Data

Functionality

Microservice

fitsinonebrain,designedforreplaceability,autonomy(organisation&technology)

·

·

·

6/45

MicroserviceTaxonomyMicroservice

ApplicationFrontend

ServiceService

Repository/Orchestration

ServiceDiscovery

Contract Implementation Interface

BusinessLogic

Data

Monitoring/Logging

7/45

MicroserviceArchitecture

Processesbz@cc:~/$psauxwww-data16990.57.72453320158076?Sl10:490:26java-cpcart.jarwww-data18340.35.02435400102684?Sl10:490:17java-cpnavigation.jarwww-data19720.00.1907923124?Ss10:490:00nginx:masterprocesswww-data19730.00.1911483820?S10:490:00nginx:workerprocesswww-data19740.00.1911483820?S10:490:00nginx:workerprocesswww-data19750.00.1911483820?S10:490:00nginx:workerprocesswww-data19760.00.1911483820?S10:490:00nginx:workerprocesswww-data19801.57.02456532143688?Sl10:491:20java-cpproduct.jar

BASH

9/45

OnlineShop-Deployment

<<device>>Microservice Server

<<web server>>Ngnix

<<service>>Cart Service

<<service>>Product Service

<<device>>Monolith Server

<<application server>>Tomcat

<<artifact>>shop.war

<<artifact>>Catalog View

<<artifact>>cart-service.jar

<<artifact>>product-

service.jar

Cart Catalog

Product

10/45

LinuxPackagesbz@cc:~/$artcart_0.6.20.debdebian-binarycontrol.tar.gzdata.tar.gzbz@cc:~/$tartzfdata.tar.gz./etc/default/cart./etc/init.d/cart./usr/share/shop/cart/bin/cart./usr/share/shop/cart/bin/cart.bat./usr/share/shop/cart/lib/cart-microservice-0.6.20.jarbz@cc:~/$tartzfcontrol.tar.gz./postinst./control./md5sumsbz@cc:~/$catdebian-binary2.0

BASH

12/45

ControlFileSource:shop-cart-serviceSection:webPriority:optionalVersion:4.2.42Maintainer:BerndZutherHomepage:http://www.bernd-zuther.de/Vcs-Git:https://github.com/zutherb/AppStash.gitVcs-Browser:https://github.com/zutherb/AppStashPackage:shop-cart-serviceArchitecture:amd64Depends:redis-server(>=2.8.13)Description:CartService

VIM

13/45

PackageSourceBuildserver

Provision

reprepro-Vb/var/packages/debianincludedebshop/tmp/*.debreprepro-b/var/packages/debian/exportreprepro-b/var/packages/debian/listshop

BASH

----apt_repository:repo='debhttp://ci-repo/debian/shopmain'state=present-apt:update_cache=yesforce=yes-apt:pkg={{item}}state=presentforce=yeswith_items:-shop-cart-service

YAML

14/45

LinuxPackages

Pro Contra

ServiceRepository NoServiceDiscovery

DependencyManagement Runtimeenviromentmustbecreatedoneverysinglenode

Technologiesarebattle-tested Dependsonthelinuxdistribution

Docker

Docker-FileFROMrelateiq/oracle-java8MAINTAINERBerndZuther<bernd.zuther@codecentric.de>EXPOSE18080ADDproduct-0.6.tar/ENTRYPOINT["/product-0.6/bin/product"]

BASH

Docker-Workflowbz@cc1$dockerbuild-tzutherb/product-service.bz@cc1$dockerpushzutherb/product-servicebz@cc2$dockerpullzutherb/product-servicebz@cc2$dockerrunzutherb/product-servicebz@cc2$dockerpsCONTAINERIDIMAGECOMMANDCREATED87bb5524067dzutherb/product-service:latest"/product-0.6/bin/pr14seconds

BASH

DeploymentScenario

<<device>>Docker Deamon

<<container>>Ngnix

<<container>>Cart Service

<<container>>Product Service

<<artifact>>checkout

.war

<<artifact>>catalog.tar

<<artifact>>cart-service.jar

<<artifact>>product-

service.jar

<<container>>Tomcat

<<container>>MongoDB

<<container>>Redis

<<container>>Navigation

Service

<<artifact>>navigation-service.jar

Linkingbz@cc~$dockerrun-d--namemongodbmongo705084daa3f852ec796c8d6b13bac882d56d95c261b4a4f8993b43c5fb2f846cbz@cc~$dockerrun-d--nameredisredis784ebde0e867adb18663e3011b3c1cabe990a0c906396fc306eac669345628cfbz@cc~$dockerrun-d-P--namecart--linkredis:rediszutherb/cart-service438b2657c7a5c733787fb32b7d28e1a0b84ba9e10d19a8a015c6f24085455011bz@cc~$dockerrun-d-P-p8080:8080--nameshop--linkcart:cart\--linkmongodb:mongodbzutherb/monolithic-shop9926e187faa215ac9044603d51adbd8d679d8076b4a349ebbc9917dade6d560ebz@cc$dockerexec9926e187faa215ac9044603d51adbd8d679d8076b4a349ebbc9917dade6d560eenvPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=87bb5524067dMONGODB_PORT_27017_TCP=tcp://172.17.0.28:27017MONGODB_PORT_27017_TCP_ADDR=172.17.0.28MONGODB_PORT_27017_TCP_PORT=27017MONGODB_PORT_27017_TCP_PROTO=tcp

BASH

DockerComposeredis:image:dockerfile/redisports:-"6379:6379"cart:image:eshop/cart-serviceports:-"18100:18100"links:-rediscatalog:image:eshop/catalog-frontendports:-"80:80"links:-product-cart

YAML

23/45

Docker

Pro Contra

Applicationsareisolated Daemonrunsasrootonhost

Imagesarebuiltonceandrunanywhere NoProcessSupervisor

DockerRepository NoServiceDiscovery

Bigecosystem(Kubernetes,Mesos,Vamp)

BlueGreenDeployment

Old Version

WebServer

ApplicationServer

DatabaseServer

New Version

WebServer

ApplicationServer

DatabaseServer

RouterUsers

25/45

CanaryRelease

Old Version

WebServer

ApplicationServer

DatabaseServer

New Version

WebServer

ApplicationServer

DatabaseServer

RouterUsers

95%

5%

26/45

Microservice-CanaryReleaseOld Version

WebServer

ApplicationServer

DatabaseServer

New Version

WebServer

ApplicationServer

DatabaseServer

RouterUsers

Old Version

WebServer

ApplicationServer

DatabaseServer

New Version

WebServer

ApplicationServer

DatabaseServer

Old Version

WebServer

ApplicationServer

DatabaseServer

New Version

WebServer

ApplicationServer

DatabaseServer

27/45

DistributedSystem

ResourceAllocator

Executor Executor Executor

Scheduler

Docker Repository

29/45

Kubernetes

Kublet Info Service

Kublet Kublet Kublet

API Server

Docker Repository

Scheduler

ResourceAllocator

Executor

30/45

PodapiVersion:v1kind:Podmetadata:labels:name:cartrole:backendname:cartspec:containers:-name:cartimage:zutherb/cart-serviceports:-containerPort:18100

YAML

31/45

ReplicationControllerapiVersion:v1kind:ReplicationControllermetadata:...(labels)spec:replicas:2selector:name:carttemplate:metadata:...(labels)spec:containers:-name:cartimage:zutherb/cart-serviceports:-containerPort:18100

YAML

32/45

Service

33/45

Servicekind:ServiceapiVersion:v1metadata:labels:name:cartrole:backendname:cartspec:ports:-name:cartport:18100selector:name:cart

YAML

34/45

Kubernetes

Pro Contra

Youneedn'tcarewhereworkisexecuted Nodescriptionofthewholeapplication(incontrasttodockercompose)andfordeploymentscenario

Youneedn'tcareaboutdependencies Failureanalysiswillgetharder

Servicediscovery Masterisasinglepointoffailure

ProcessSupervisor Fewtoolsanddocumentationisavaiableyet

Mesos

MesosMaster

MesosSlave

MesosSlave

MesosSlave

Marathon

Docker Repository

Scheduler

ResourceAllocator

Executor

Standby MesosMaster

Standby MesosMaster

Zookeeper

36/45

MarathonDeployment{"id":"basic-3","cmd":"python3-mhttp.server8080","cpus":0.5,"mem":32.0,"container":{"type":"DOCKER","docker":{"image":"python:3","network":"BRIDGE","portMappings":[{"containerPort":8080,"hostPort":0}]}}}

YAML

curl-XPOSThttp://10.141.141.10:8080/v2/apps-d@basic-3.json\-H"Content-type:application/json"

BASH

37/45

Marathon+Mesos

Pro Contra

Youneedn'tcarewhereworkisexecuted Nodescriptionofthewholeapplicationandfordeploymentscenario

HighAvailability NoServiceDiscovery

ProcessSupervisor Failureanalysiswillgetharder

Manytoolsanddocumentationareavailable

VeryAwesomeMicroservicesPlatform(Vamp)

39/45

Vamp+Marathon+Mesos

Pro Contra

Descriptionofthewholeapplicationandfordeploymentscenario

Manycomponentsthathavetobeunderstood

Youneedn'tcarewhereworkisexecuted Failureanalysiswillgetharder

HighAvailability

ProcessSupervisor

ServiceDiscovery

Summary LinuxPackages DockerDaemon Kubernetes Vamp+Marathon+

Mesos

ServiceRepository

Orchestration (<100)

ServiceDiscovery

ProcessSupervisor

HighAvailability

ApplicationDescription

RoutingDefinition

<ThankYou!>

g+ plus.google.com/+BerndZuthertwitter @Bernd_Zwww bernd-zuther.degithub github.com/zutherb/

Demo+SlidesApplication

LinksJavaAktuell02/15-MicroservicesunddieJagdnachmehrKonversionMicroservice-DeploymentganzeinfachmitGiantSwarmMicroservice-DeploymentganzeinfachmitKubernetesMicroservice-DeploymentganzeinfachmitDockerComposeMicroservice-DeploymentganzeinfachohneDockermitderLinux-PaketverwaltungCanaryReleasemitderVeryAwesomeMicroservicesPlatformLeanStartupTestDrivenBusinessFeaturingLeanStartUpContinuousDeliverymitdemFeatureTogglePatternFeatureToggleDoGoodMicroservicesArchitecturesSpelltheDeathoftheEnterpriseServiceBus?Microservices

·····

······

·44/45

LinksTheTwelveFactorsMicroservicesimZusammenspielmitContinuousDelivery,Teil1–dieTheorieFast,isolateddevelopmentenvironmentsusingDockerWarnungvordemMicroservice–VersucheinerDefinitionMicroServicesinderPraxis:NiewiederMonolithen!Deploymentganzeinfach–MicroserviceDeploymentmitHilfederLinuxPaketverwaltungSplunk–MarkeEigenbaumitElasticsearch,LogstashundKibana(ELKStack)ScalingDockerwithKubernetesContainer-Technik:Docker&Co.AppstashProject

······

····

45/45

Recommended