The document outlines Daniel Bryant's presentation on "The Seven (More) Deadly Sins of Microservices". It discusses common pitfalls when adopting a microservices architecture, including lusting after the latest technology, communication lock-in between services, not properly addressing non-functional requirements, and challenges around testing transient systems. Bryant provides examples and recommendations to avoid these sins, such as evaluating technology fit, avoiding single domain models, and employing service virtualization tools for testing.
DevOpsNorth 2017 "Seven (More) Deadly Sins of Microservices"
1. The Seven (More) DEADLY SINS OF Microservices
@opencredo
Daniel Bryant
@danielbryantuk
2. Previously, AT Devoxx UK & QCON NYC 2015...
22/02/2017 @danielbryantuk
https://www.infoq.com/presentations/7-sins-microservices
3. The Seven (more) Deadly Sins of Microservices
1. LUST - Using the (Unevaluated) latest and greatest tech…
2. GLUTTONY - Communication lock-in
3. GREED - What'S Mine is mine (within the organisation)…
4. SLOTH - Getting lazy with NFRs
5. WRATH - Blowing up when bad things happen
6. ENVY - The shared single domain fallacy
7. PRIDE - testing in the world of transience
22/02/2017 @danielbryantuk
4. @danielbryantuk
• Chief Scientist at OpenCredo, CTO at SpectoLabs
• Agile, architecture, CI/CD, Programmable infrastructure
• Java, Go, JS, microservices, cloud, containers
• Continuous delivery of value through effective technology and teams
22/02/2017 @danielbryantuk
bit.ly/2jWDSF7
5. What are our goals?
• Delivery of value to end users (customers)
• Business agility
• Safer, more rapid changes to software systems
– But Consider CI/CD, Devops, and value stream before microservices
22/02/2017 @danielbryantuk
6. 1. Lust - Using THE (unevaluated) LATEST and Greatest Tech…
22/02/2017 @danielbryantuk
7. Evaluation - are Microservices A good fit?
• “our 'mode TWO' apps are Microservices”
– Middle-management latch on to Buzzword
– New app evolution limited by existing system
– Lipstick on the pig
• Not understanding architecture principles
– Not building around business Functionality
– Creating Mini-monoliths (no twelve factors)
• No Well-defined DevOps / SRE / Ops
– Deployment/ops free-for-all
22/02/2017 @danielbryantuk
8. Tech example: To containerise, or not to containerise?
(dockaH, dockah, dockah... Dockah?)
22/02/2017 @danielbryantuk
14. 2. GLUTTONY - Communication lock-in
22/02/2017 @danielbryantuk
15. Rpc - not the devil in disguise
• Don'T rule out RPC (e.g. grpc)
– Sometimes the contract (and speed) are beneficial
– Human readability of JSON can be over-rated
• Sometime events are better
– Asynchronous (AP vs CP)
– durable message queues are interesting (But, No one size fits all)
22/02/2017 @danielbryantuk
16. The ESB is dead - long live the esb!
22/02/2017 @danielbryantuk
17. The ESB is dead - long live the esb!
22/02/2017 @danielbryantuk
18. The ESB is dead - long live the esb!
22/02/2017 @danielbryantuk
• Is this an ESB?
• Or an API gateway?
19. The ESB is dead - long live the API Gateway!
22/02/2017 @danielbryantuk
• Watch for the API Gateway morphing
into an Enterprise service bus
– Loose coupling is vital
• But let me be clear...
– The API Gateway pattern is awesome
– Centralise cross-cutting concerns
– Prevent wheel-reinvention (plugins)
– Check out kong, apigee, Mulesoft etc
20. 3. GREED - What'S mine is mine... (within the organisation)…
22/02/2017 @danielbryantuk
21. Previously...
• Conway'S Law
• Microservices are about people, as much as they are tech
– Maybe more
– Particularly in a migration / transformation
22/02/2017 @danielbryantuk
22. We hear this a lot...
“We’ve decided to reform our teams around squads, chapters and guilds”
• Beware of cargo-culting
– Repeat three times “We are not spotify”
• Understand the practices, principles, values etc
22/02/2017 @danielbryantuk
23. 4. SLOTH - Getting Lazy with NFRs
22/02/2017 @danielbryantuk
24. Getting lazy with non-Functional Requirements
“The driving technical requirements for a system should be identified early
to ensure they are properly handled in subsequent design”
Aidan Casey
Guiding principles for evolutionary architecture
22/02/2017 @danielbryantuk
25. Getting lazy with non-Functional Requirements
• The 'ilities' Can be (often) be an afterthought
– Availability, Scalability, auditability, testability etc
• Agile/Lean: Delay decisions to the ‘last responsible moment’
– NewsFlash - Sometimes this is up-front
• It can be costly (or prohibitive) to adapt late in the project
– Microservices don'T make this easier (sometimes more difficult)
22/02/2017 @danielbryantuk
27. 5. WRATH - Blowing up when bad things happen
22/02/2017 @danielbryantuk
28. When bad things happen, people are always involved
22/02/2017 @danielbryantuk | @oakinger
29. People Pain point - How does Devops fit into this?
• Devops topologies
– http://web.devopstopologies.com/
– @matthewpskelton
22/02/2017 @danielbryantuk
32. How much value does non-deployed code
provide to users?
0
(*Universal Unit of Value)
22/02/2017 @danielbryantuk
*
33. 6. ENVY - The shared SINGLE domain fallacy
22/02/2017 @danielbryantuk
34. Previously - One Model to Rule Them All...
• One model…
– Breaks encapsulation
– Introduces coupling
• Know your DDD
– Entities
– Value Objects
– Aggregates and Roots
22/02/2017 @danielbryantuk
36. 7. PRIDE - testing in the world of transience
22/02/2017 @danielbryantuk
37. Previously...
• Local verification
– Consumer-Driven contracts
• End-to-end
– BDD-style critical path
• Remember the test pyramid
22/02/2017 @danielbryantuk
martinfowler.com/articles/microservice-testing/
38. Service virtualisation / API simulation
• Virtualise request/response of services
– Unavailable
– Expensive to run
– Fragile/brittle
– Non-deterministic
– Cannot simulate failures
https://dzone.com/articles/continuously-delivering-soa
22/02/2017 @danielbryantuk
39. Service virtualisation
• Classics
– CA service virtualization
– Parasoft virtualize
– HPE service virtualization
– IBM Test Virtualization server
• New (open source) kids on the block
– Hoverfly
– Wiremock
– VCR/Betamax
– Mountebank
– mirage
22/02/2017 @danielbryantuk
40. Hoverfly
• Lightweight Service virtualisation
– Open source (Apache 2.0)
– Go-based / single binary
– Written by @Spectolabs
• Flexible API simulation
– HTTP / HTTPS
– Highly performant
22/02/2017 @danielbryantuk
43. The Seven (more) Deadly Sins of Microservices
1. LUST - Using the (Unevaluated) latest and greatest tech…
2. GLUTTONY - Communication lock-in
3. GREED - What'S Mine is mine (within the organisation)…
4. SLOTH - Getting lazy with NFRs
5. WRATH - Blowing up when bad things happen
6. ENVY - The shared single domain fallacy
7. PRIDE - testing in the world of transience
22/02/2017 @danielbryantuk