Upload
bernd-zuther
View
285
Download
4
Embed Size (px)
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<[email protected]>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/[email protected]\-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