The Bike Whisperer, Halfords. Social media campaigns I wish I'd done seminar, 25 June 2015
Microservices 5 things i wish i'd known code motion
-
Upload
vincent-kok -
Category
Software
-
view
361 -
download
5
Transcript of Microservices 5 things i wish i'd known code motion
![Page 1: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/1.jpg)
Microservices; 5 things I wish I’d knownVincent Kok
AMSTERDAM 16 - 17 MAY 2017
![Page 2: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/2.jpg)
Lives in Sydney Move to the other side of the
world to join Atlassian
About me: @vincentkok
Confluence Development manager on
the Confluence team
Dutch Lived most of my live 30 mins from
Amsterdam
![Page 3: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/3.jpg)
Microservices Everybody seems to want them. Do we really know the impact of our choices?
Why do we want them so badly? Microservices are messy!
https://flic.kr/p/9u5pDA
![Page 4: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/4.jpg)
http://geek-and-poke.com/geekandpoke/2013/7/13/foodprints
![Page 5: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/5.jpg)
Grow Fat Code base grows. All
the things slow down.
Age Your code base will become a jurassic
park introducing new tech becomes hard
Ownership Who is responsible for which part and
more important: who has the pager
Economies of Scale
The bigger the team the more they
interrupt each other
Monolithical issues
![Page 6: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/6.jpg)
![Page 7: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/7.jpg)
81000Build jobs ran last week
![Page 8: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/8.jpg)
31992Automated tests
![Page 9: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/9.jpg)
Cause of issues can be extremely hard
![Page 10: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/10.jpg)
INCIDENT RESPONSE
Who is having the pager?
![Page 11: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/11.jpg)
Remember, we’re not all webscale
![Page 12: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/12.jpg)
![Page 13: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/13.jpg)
Optimise for rapid and sustainable flow of value
DAN NORD
![Page 14: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/14.jpg)
Small The size will be reasonable and
manageable
Independent lifecycle
Nothing will hold the team back. Go as
fast as you can
Optimise for the problem Pick solution and tech based on the problem at hand
Replaceable It is easier to replace if there is a need for
it
The microservice promise
![Page 15: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/15.jpg)
CONFLUENCE EXAMPLES
![Page 16: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/16.jpg)
CONFLUENCE EXAMPLES
Scheduler
Attachments
Operational Transformation
Platform Services
![Page 17: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/17.jpg)
CONFLUENCE EXAMPLES
Scheduler
Attachments
Operational Transformation
Platform ServicesFront end
![Page 18: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/18.jpg)
CONFLUENCE EXAMPLES
Core functionality
Scheduler
Attachments
Operational Transformation
Platform ServicesFront end
![Page 19: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/19.jpg)
5 patterns
Basics
Deployments
Testing
Security
Operations
https://flic.kr/p/9t2138
![Page 21: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/21.jpg)
Creating a call-out Watch the tutorial in the Presentation Guidelines to learn how to create call-outs on screenshots within this template.
![Page 22: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/22.jpg)
Treat them as cattle, not pets
BILL BAKER
![Page 23: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/23.jpg)
A MINIMAL SERVICE
Health check 200 app is alive. 500 app is unhealthy, destroy the node
Stateless* Run as many nodes as you need
Expose a port Only access to the service
![Page 24: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/24.jpg)
DEEPCHECK
Deep check Quickly discover if a service
fails to connect to a dependency
![Page 25: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/25.jpg)
DEEPCHECK EXAMPLE
{ "avatar": { "details": { "avatarRepository": { "isHealthy": true }, "crowd": { "isHealthy": true }, "deadlock": { "isHealthy": true
![Page 26: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/26.jpg)
CODE & BUILDS
1 repository 1 build
![Page 27: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/27.jpg)
Strict separation of config from code
12 FACTOR APP
![Page 28: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/28.jpg)
Redeploy Part of the service
configuration.
Configuration lifecycles
Instant change Switches you would like to
enable/disable straight away
Rebuild Rebuild to apply changes
![Page 30: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/30.jpg)
Only one person There is only one person in
the team that owns it
Deployment smells
Takes more then 15 mins
Setting it up should be quick and initial deployment should
quick
Requires a ticket A ticket for the deployment
team
![Page 31: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/31.jpg)
Always deploy an empty service into production…
ME; AND PROBABLY OTHERS
![Page 32: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/32.jpg)
Developers in control
Artifact What is the artifact we’re running. We’re mostly standardising on Docker
Resources What resources are requires: RDS, SQS, Dynamo etc..
Compute What EC2 instance do we want how many of those and when to scale
Alarms What are the alarm thresholds for this service
Ownership Who is owning the service
Configuration We will be adding more icons as need arises. Speak up if in need!
![Page 33: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/33.jpg)
DECLARATIVE DEPLOYMENT
name: Confluencedescription: Confluence Vertigolinks: binary: type: docker name: docker.atlassian.io/confluence tag: latest healthcheck: uri: /wiki/internal/healthcheck deepcheck: uri: /wiki/internal/deepcheck semanticCheck: dockerImage:
![Page 34: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/34.jpg)
CONFIGURATION
config: environmentVariables: ASAP_AUDIENCE: "foo" ASAP_ISSUER: "foo" CONFLUENCE_VERTIGO_SMTP_HOST: "smtp.foo.com" CONFLUENCE_VERTIGO_SMTP_PORT: "587" LOG4J_EXTRA_RULES: "log4j.logger.org.hiberate=DEBUG"
environmentOverrides: staging: config: environmentVariables: ASAP_PUBLIC_KEY_FALLBACK_REPOSITORY_URL: "https://s3.amazonaws.com/keysto
![Page 35: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/35.jpg)
RESOURCES
resources: - type: sqs name: default attributes: MaxReceiveCount: 20 VisibilityTimeout: 60 scaling: instance: m3.xlarge min: 7
![Page 36: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/36.jpg)
500Services in production
![Page 38: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/38.jpg)
Testing microservices
![Page 39: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/39.jpg)
Testing microservices
![Page 40: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/40.jpg)
TESTING MONOLITHS IS EASY
![Page 41: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/41.jpg)
Unit
Integration
UI
![Page 42: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/42.jpg)
TESTING
Live service Test agains a real service
![Page 43: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/43.jpg)
TESTING
Mock service Test against a mock service
![Page 44: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/44.jpg)
In process A local implementation of
your client
Out of process Use tools like WireMock and
MockServer
Two options
![Page 45: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/45.jpg)
MOCKING SERVICES - IN PROCESS
<beans profile=“integration-test"> <bean id="attachmentService" class=“c.a.attachment.AttachmentStub”/></beans>
![Page 46: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/46.jpg)
MOCKING SERVICES - WIREMOCK
{ "request": { "url": “/rest/api/content“, "method": “POST” "Accept": { "matches": “application/json” } }, "response": { "status": 200 }}
![Page 47: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/47.jpg)
Stable API If it is external it already
should have a CTK so rely on it
How to trust your mock?
Contract testing Internal fast moving API’s an
benefit from this
Rely on monitoring Small service, low MTTR
therefore low impact
![Page 48: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/48.jpg)
Semantic Check Automated test that runs against a node before it will be added to the load balancer
![Page 50: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/50.jpg)
OAuth 2.0 Grant a client access to
resources based on a newly created set of credentials
Common standards
OpenID Connect Identity on top of OAuth 2
OpenID Allows identity and some
metadata only
![Page 51: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/51.jpg)
SECURING SERVICES
How to secure a set of many services
![Page 52: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/52.jpg)
ASAPAtlassian Service Authentication Protocol
![Page 53: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/53.jpg)
HOW DOES IT WORK
Foo BarJWT
![Page 54: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/54.jpg)
WHATS INSIDE?
Foo Bar
{ "typ": "JWT", "kid": "foo/key1", "alg": "RS256"}{ "sub": “32769:87e…” "aud": "bar", "nbf": 1494284564, "iss": "foo", "exp": 1494284624, "iat": 1494284564, "jti": “961253cf-ac…”}
![Page 58: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/58.jpg)
50kg
![Page 59: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/59.jpg)
Uptime of a system with 30 services of 99.99
WHAT A MICROSERVICE ARCHITECTURE
![Page 60: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/60.jpg)
2 hours99.99 = 99.7
30
![Page 61: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/61.jpg)
RESILIENCE
Failure is imminent!
![Page 62: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/62.jpg)
Circuit breakers Write code with failure in
mind
Three must haves
Request tracing Don’t spend hours debugging
Log aggregations Stream all logs into one
place.
![Page 63: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/63.jpg)
DO YOU KNOW YOUR SYSTEM?
![Page 64: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/64.jpg)
CREATE INSIGHT: AGGREGATED LOGGING
![Page 65: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/65.jpg)
Response times How much time do spend calling other services.
Back pressure Stop putting pressure on a system that is in trouble and fail fast
Fallback How do you handle failure. A mandatory step in the programming model.
Circuit breakers
![Page 66: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/66.jpg)
CREATE INSIGHT: CIRCUIT BREAKERS
![Page 67: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/67.jpg)
Request Tracing
![Page 68: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/68.jpg)
Request TracingX-B3-TraceId : 1X-B3-SpanId : 1
![Page 69: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/69.jpg)
Request TracingX-B3-TraceId : 1X-B3-SpanId : 1
X-B3-TraceId : 1X-B3-SpanId : 2X-B3-ParentSpanId : 1
![Page 70: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/70.jpg)
Request TracingX-B3-TraceId : 1X-B3-SpanId : 1
X-B3-TraceId : 1X-B3-SpanId : 2X-B3-ParentSpanId : 1
X-B3-TraceId : 1X-B3-SpanId : 3X-B3-ParentSpanId : 2
![Page 71: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/71.jpg)
Request TracingX-B3-TraceId : 1X-B3-SpanId : 1
X-B3-TraceId : 1X-B3-SpanId : 2X-B3-ParentSpanId : 1
X-B3-TraceId : 1X-B3-SpanId : 3X-B3-ParentSpanId : 2
X-B3-TraceId : 1X-B3-SpanId : 4X-B3-ParentSpanId : 3
![Page 72: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/72.jpg)
TRACE ID’S
![Page 73: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/73.jpg)
![Page 74: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/74.jpg)
You Build It You Run It The team who builds it looks after it.
Ops Team Handover your services and let them
deal with the fun. Don’t do this.
![Page 75: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/75.jpg)
What should you take home?
Basics Services are cattle not pets.
Testing Testing a monolith is “easy” what’s think about your service testing strategy
Deployment Deploying a service shouldn’t take longer then 15 minutes
Operations You build it you run it.
Security Think how you would like to secure service to service communications
Focus on value Optimise for rapid and sustainable flow of value
![Page 76: Microservices 5 things i wish i'd known code motion](https://reader035.fdocuments.us/reader035/viewer/2022070605/5a64a71b7f8b9a27568b83ed/html5/thumbnails/76.jpg)
VINCENT KOK - ATLASSIAN - @VINCENTKOK
Thank youCodeMotion Amsterdam 2017