Die dunkle Seite der Microservices - und wie du sie besiegen kannst

Preview:

Citation preview

DiedunkleSeitederMicroservices

...undwiedubesiegensiekannst

TobiasBayer,HendrikStill

WassindMicroservices?

WassindMicroservices?

AufgeteiltnachGeschäftsfunktionenLeichtgewichtigeProtokolle(z.B.RESTüberHTTP)EinProzessproMicroservice-Instanz

DieMachtiststarkinihnenSkalierbarkeitAusfallsicherheitPolyglotteEntwicklungKleineCodebasisUnabhängigeEntwicklungsteamsUnabhängigesDeployment

DiedunkleSeitederMacht

DiedunkleSeitederMacht

MonitoringVerteilteDaten/TransaktionenCodeduplikationVersionierungFehlerbehandlungSicherheitServiceDiscoveryTestbarkeit

ServiceDiscovery

ServiceDiscoveryDassindnichtdieDroiden,dieihrsucht

ServiceDiscovery

Eureka

NetflixOSSSinglePurposeRegistryRESTInterfaceJavaClientSpringIntegrationClient-SideLoadBalancingmitRibbon

ServiceDiscovery

ServiceDiscoveryDemo

Consumer-DrivenContracts

Consumer-DrivenContracts

Integrationstests

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Consumer-DrivenContracts

Demo

Deployment-PipelinemitCDC

Deployment-PipelinemitCDCConsumer

Head Prod

Head

ProviderProd

EnterthePactMatrix.Or,howtodecouplethereleasecyclesofyourmicroservices

Deployment-PipelinemitCDCConsumer

Head Prod

Head

ProviderProd

EnterthePactMatrix.Or,howtodecouplethereleasecyclesofyourmicroservices

Deployment-PipelinemitCDCConsumer

Head Prod

Head

ProviderProd

EnterthePactMatrix.Or,howtodecouplethereleasecyclesofyourmicroservices

Deployment-PipelinemitCDCConsumer

Head Prod

Head

ProviderProd

EnterthePactMatrix.Or,howtodecouplethereleasecyclesofyourmicroservices

Deployment-PipelinemitCDCConsumer

Head Prod

Head

ProviderProd

EnterthePactMatrix.Or,howtodecouplethereleasecyclesofyourmicroservices

Deployment-PipelinemitCDCConsumer

Head Prod

Head

ProviderProd

EnterthePactMatrix.Or,howtodecouplethereleasecyclesofyourmicroservices

Deployment-PipelinemitCDCConsumer

Head Prod

Head

ProviderProd

AlreadyTested!

EnterthePactMatrix.Or,howtodecouplethereleasecyclesofyourmicroservices

Deployment-PipelinemitCDC

Pact-Broker

UploadPactsDownloadPactsTagPactsWeboberfläche

Deployment-PipelinemitCDC

Deployment-PipelinemitCDC

ProviderPipeline

Deployment-PipelinemitCDC

gradle build

Deployment-PipelinemitCDC

docker build -t productpriceservice:test .docker push productpriceservice:test

Deployment-PipelinemitCDC

#start test containerdocker run ... productpriceservice:test#wait for the container to startsleep 10#verify pact with specific gradle file./gradlew -b pact_verification_ci/build.gradle /-P pactProductPriceServiceHost=$CIP /-P pactProductPriceServiceTag="latest/prod" pactVerify#stop test containerdocker rm -f $CID

Deployment-PipelinemitCDC

#start docker instance with new imagedocker run ... productpriceservice:test#tag docker image as productiondocker tag productpriceservice:test productpriceservice:proddocker push productpriceservice:prod

Deployment-PipelinemitCDC

ConsumerPipeline

Deployment-PipelinemitCDC

gradle buildgradle pactPublish

Deployment-PipelinemitCDC

docker build -t user/productservice:test .docker push user/productservice:test

Deployment-PipelinemitCDC

#start docker instance with provider imagedocker run ... productdetailsservice:prod#wait for the container to startsleep 10#verify pact with specific gradle file./gradlew -b pact_verification_ci/build.gradle \-P pactProductDetailsServiceHost=$CIP \-P pactProductDetailsServiceTag="latest" pactVerify_productDetailsServiceProvider#stop test containerdocker rm -f $CID

#start docker instance with provider imagedocker run ... microservicesplayground_productpriceservice:prod#wait for the container to startsleep 10...

Deployment-PipelinemitCDC

#start docker instance with new imagedocker run ... productservice:test#tag docker image as productiondocker tag user/productservice:test productservice:proddocker push productservice:prod

Deployment-PipelinemitCDC

curl -X PUT -H "Content-Type: application/json" /http://pact-broker:9292/pacticipants/Product_Service //versions/1.0.0/tags/prod

ContactInformation

TobiasBayer:tobias.bayer@inovex.de

HendrikStill:hendrik.still@inovex.de

Recommended