Presented at Yow! 2015 in Melbourne, Brisbane and Sydney http://yowconference.com.au/
Building MicroserviceArchitectures with GoMatt Heath, Mondo#yow2015
View Slide
@mattheath
1895
monolithstraditional dev
?
DATABASEAPPLICATION
DATABASEDATABASESAPPLICATION
DATABASEDATABASESAPPLICATIONSEARCH
DATABASEDATABASESAPPLICATIONCACHESEARCH
DATABASEDATABASESAPPLICATIONCACHESEARCHCAT GIFS
ALLHAILTHEMONOLITH
DO NOT WANT
APPLICATION
Why Microservicesat Mondo?
Single ResponsibilityPrinciple
Bounded Context
Well definedInterfaces
Composability
Why not start withMicroservices?
LOAD BALANCER
LOAD BALANCERHTTP API & ROUTING LAYER
TRANSPORTLOAD BALANCERHTTP API & ROUTING LAYER
SERVICE SERVICE SERVICETRANSPORTLOAD BALANCERHTTP API & ROUTING LAYER
SERVICE SERVICE SERVICETRANSPORTDATABASE DATABASE DATABASELOAD BALANCERHTTP API & ROUTING LAYER
SERVICE SERVICE SERVICETRANSPORTDATABASE DATABASE DATABASELOAD BALANCERDATACENTRE nHTTP API & ROUTING LAYER
SERVICE SERVICE SERVICETRANSPORTDATABASE DATABASE DATABASELOAD BALANCERHTTP API & ROUTING LAYERDATACENTRE n
SimpleStatic typingStatic linking
ConcurrencyInterfaces
stdlibeg. Networking
Go KitmicrogRPCKite
mondough/typhonmondough/mercury
APISERVICELOAD BALANCERHTTP API & ROUTING LAYER
/webhooks —-> Webhook API
WEBHOOKAPILOAD BALANCERHTTP API & ROUTING LAYER
WEBHOOKAPIAUTHSERVICEWEBHOOKSERVICELOAD BALANCERHTTP API & ROUTING LAYER
WEBHOOKAPIAUTHSERVICEWEBHOOKSERVICELOAD BALANCERHTTP API & ROUTING LAYERDATABASE
WEBHOOKAPIAUTHSERVICEWEBHOOKSERVICELOAD BALANCERHTTP API & ROUTING LAYERDATABASEDATABASE
APISERVICESERVICEASERVICEBLOAD BALANCERHTTP API & ROUTING LAYERDATABASEDATABASEEXTERNALPROVIDER
Event DrivenArchitectures
APISERVICESERVICEASERVICEBLOAD BALANCERHTTP API & ROUTING LAYER
APISERVICESERVICEASERVICEBLOAD BALANCERHTTP API & ROUTING LAYERSERVICECSERVICEDE
APISERVICESERVICEASERVICEBLOAD BALANCERHTTP API & ROUTING LAYERSERVICECSERVICEDGEF
?? ?LOAD BALANCERHTTP API & ROUTING LAYER???????????
SERVICE
LogicHandlersStorageSERVICE
mercuryLogicHandlersStorageSERVICE
type Handler func(request) (response, error)
type Transport interface {...}
type Transport interface {Listen(serviceName string, inbound chanStopListening(serviceName string) boolRespond(req request, resp response) errorSend(req request, timeout time.Duration) (response, error)...}
mercuryLogicHandlersStorage librariesSERVICE
mercuryLogicHandlersStorage librariesSERVICEDeploymentService DiscoveryConfigurationMonitoringAuthenticationAuthorisationStorageCircuit Breaking
ScratchImages
StaticallyCompiled
Root CACerts
Dealing withComplexity
Testing
LoadFailureDegradation
Monitoring
Monitor yourBusiness Logic
♥ customers
In-Band vsOut of Band
type Checker func() (error, map[string]string)
Distributed Tracing
apiapiapi.customerapi.customerservice.customerservice.customer
8096820c-3b7b-47ec-bce6-1c239252ab40
ContextPropagation
package contexttype Context interface {Deadline() (deadline time.Time, ok bool)Done() Err() errorValue(key interface{}) interface{}}
apiapiapi.customerapi.customerservice.customerservice.customerSENDRECVSENDRECVRECVSENDRECVSEND
mondough/phosphor
api api.customer service.customerSENDRECVSENDRECVRECVSENDRECVSENDphosphor
API card-api card-processing cards transactions balance transaction-enrichment merchant feed-generator feed apnsAPI card-api card-processing cards transactions balance transaction-enrichment merchant feed-generator feed apns
SmallSimpleEasy to learn
ConcurrencyInterfacesNetworking
Downsides?
Starting withMicroservices?
#yow2015Thanks!@mattheath@getmondo
ATM: Thomas Hawk Bank of Commerce: ABQ Museum ArchivesIBM System/360: IBMAbsorbed: Saxbald PhotographyOrbital Ion Cannon: www.rom.acGo Gopher: Renee FrenchControl Room: NASAATM Failure: George RedgraveCredits