microservices 5 things i wish i'd known code motion

Download Microservices 5 things i wish i'd known   code motion

If you can't read please download the document

Post on 21-Jan-2018




5 download

Embed Size (px)


  1. 1. Microservices; 5 things I wish Id known Vincent Kok AMSTERDAM 16 - 17 MAY 2017
  2. 2. 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
  3. 3. 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://ic.kr/p/9u5pDA
  4. 4. http://geek-and-poke.com/geekandpoke/2013/7/13/foodprints
  5. 5. 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
  6. 6. 81000 Build jobs ran last week
  7. 7. 31992 Automated tests
  8. 8. Cause of issues can be extremely hard
  9. 9. INCIDENT RESPONSE Who is having the pager?
  10. 10. Remember, were not all webscale
  11. 11. Optimise for rapid and sustainable flow of value DAN NORD
  12. 12. 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
  14. 14. CONFLUENCE EXAMPLES Scheduler Attachments Operational Transformation Platform Services
  15. 15. CONFLUENCE EXAMPLES Scheduler Attachments Operational Transformation Platform Services Front end
  16. 16. CONFLUENCE EXAMPLES Core functionality Scheduler Attachments Operational Transformation Platform Services Front end
  17. 17. 5 patterns Basics Deployments Testing Security Operations https://flic.kr/p/9t2138
  18. 18. #1: Basics https://flic.kr/p/5E9ZF
  19. 19. Creating a call-out Watch the tutorial in the Presentation Guidelines to learn how to create call-outs on screenshots within this template.
  20. 20. Treat them as cattle, not pets BILL BAKER
  21. 21. 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
  22. 22. DEEPCHECK Deep check Quickly discover if a service fails to connect to a dependency
  23. 23. DEEPCHECK EXAMPLE { "avatar": { "details": { "avatarRepository": { "isHealthy": true }, "crowd": { "isHealthy": true }, "deadlock": { "isHealthy": true
  24. 24. CODE & BUILDS 1 repository 1 build
  25. 25. Strict separation of config from code 12 FACTOR APP
  26. 26. Redeploy Part of the service configuration. Configuration lifecycles Instant change Switches you would like to enable/disable straight away Rebuild Rebuild to apply changes
  27. 27. #2: Deployments https://flic.kr/p/qP31Tf
  28. 28. 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
  29. 29. Always deploy an empty service into production ME; AND PROBABLY OTHERS
  30. 30. Developers in control Artifact What is the artifact were running. Were 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!
  31. 31. DECLARATIVE DEPLOYMENT name: Confluence description: Confluence Vertigo links: binary: type: docker name: docker.atlassian.io/confluence tag: latest healthcheck: uri: /wiki/internal/healthcheck deepcheck: uri: /wiki/internal/deepcheck semanticCheck:
  32. 32. 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:
  33. 33. RESOURCES resources: - type: sqs name: default attributes: MaxReceiveCount: 20 VisibilityTimeout: 60 scaling: instance: m3.xlarge min: 7
  34. 34. 500 Services in production
  35. 35. #3: Testing https://flic.kr/p/hn4K4b
  36. 36. Testing microservices
  37. 37. Testing microservices
  39. 39. Unit Integration UI
  40. 40. TESTING Live service Test agains a real service
  41. 41. TESTING Mock service Test against a mock service
  42. 42. In process A local implementation of your client Out of process Use tools like WireMock and MockServer Two options


View more >