All is not completely rosy in microservice-land. It is often a sign of an architectural approach’s maturity that in addition to the emergence of well established principles and practices, that anti-patterns also begin to be identified and classified. In this talk we introduce seven deadly sins that if left unchecked could easily ruin your next microservices project...
This talk will take a tour of some of the nastiest anti-patterns in microservices, giving you the tools to not only avoid but also slay these demons before they tie up your project in their own special brand of hell. Topics covered include: Pride - selfishly ignoring the new requirements for testing; Envy - introducing inappropriate intimacy within services by creating a shared domain model; Wrath - failing to deal with the inevitable bad things that occur within a distributed system; Sloth - composing services in a lazy fashion, which ultimately leads to the creation of a “Distributed Monolith”; and Lust - embracing the latest and greatest technology without evaluating the operational impact incurred by these choices.
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
DevoxxUK 2015 "The Seven Deadly Sins of Microservices (Full Version)"
1. The SeVEN DEADLY SINS OF MICRoservices
Daniel Bryant
@danielbryantuk
Container Solutions London
(WITH Credit to Tareq Abedrabbo, OPENCREDO)
2. The Seven Deadly Sins
• 1. LUST …
• 2. GLUTTONY
• 3. GREED…
• 4. SLOTH
• 5. WRATH
• 6. ENVY
• 7. PRIDE
19/06/15
@danielbryantuk
3. The Seven Deadly Sins (of Microservices)
• 1. LUST - Using the latest and greatest tech…
• 2. GLUTTONY - Excessive communication protocols
• 3. GREED - All your service are belong to us…
• 4. SLOTH - Creating a distributed monolith
• 5. WRATH - Blowing up when bad things happen
• 6. ENVY - The shared single domain fallacy
• 7. PRIDE - testing in the world of transience
19/06/15
@danielbryantuk
4. Who Am I?
• OpenCredo / Container Solutions
ü Agile, CI/CD, DevOps
ü Microservices and cloud
ü Docker, Mesos and Kubernetes
• London Java Community Associate
• Adopt OpenJDK and JSR
• InfoQ Editor and DZone MVB
19/06/15
@danielbryantuk
5. So, What is a microservice?
“Loosely coupled service oriented architecture
with bounded contexts”
Adrian Cockcroft
“Applications that fit in your head”
James Lewis
19/06/15
@danielbryantuk
6. 1. Lust - Using THE LATEST and Greatest Tech…
19/06/15
@danielbryantuk
8. No... Not necessarily good for speed
19/06/15
@danielbryantuk
skillsma7er.com/skillscasts/6143-‐microservices-‐for-‐speed
HOT
OFF
THE
PRESS!!
marJnfowler.com/bliki/
MonolithFirst.html
9. No... Check your architecture/design skills
“If you can't build a [well-structured] monolith,
what makes you think microservices are the answer?”
Simon Brown
(bit.ly/1n7D0vp)
19/06/15
@danielbryantuk
10. No... Check your architecture/design skills
19/06/15
@danielbryantuk
11. No... Operational maturity is vital
19/06/15
@danielbryantuk
marJnfowler.com/bliki/MicroservicePrerequisites.html
12. Microservices are very useful
But check your use case...
...Evaluation is a key skill
19/06/15
@danielbryantuk
13. Evaluation
“I will postpone using this shiny new framework until
my peers have validated the proposed benefits with
rigorous scientific experiments”
- Said by no programmer
…ever
19/06/15
@danielbryantuk
14. Pick Your (Technical) Battles...…
• As Dan McKinley says, “Choose Boring Technology”
– Optimize globally across organisation
• Java and Spring (Boot) are perfectly acceptable
• ... As are tomcat/jetty
19/06/15
@danielbryantuk
16. 2. GLUTTONY - Excessive Communication PROTOCOLS
19/06/15
@danielbryantuk
17. Standardize Across the Organization
• Choose one synchronous protocol
– e.g. JSON over HTTP
• Choose one asynchronous protocol
– e.g. RabbitMQ
Don’t gold-plate, but know your options: ProtoBuf, Thrift, ZeroMQ, MQTT
19/06/15
@danielbryantuk
18. Enterprise communication (Beam me up?)
19/06/15
@danielbryantuk
www.dzone.com/research/guide-‐to-‐enterprise-‐integraJon
19. 3. GREED - All your service are Belong to us…
19/06/15
@danielbryantuk
20. How Do Committees Invent?
“organizations which design systems ...
are constrained to produce designs which are copies of the
communication structures of these organizations”
- Melvin Conway, 1968
19/06/15
@danielbryantuk
21. 19/06/15
@danielbryantuk
Dev
QA
Ops
Hand-‐off
delays
Hand-‐off
delays
Slow
feedback
Slow
feedback
Lack
of
cohesion,
shared
understanding
and
joint
accountability
Front-‐end
Database
Middleware
25. 4. SLOTH - Creating a distributed monolith
19/06/15
@danielbryantuk
26. Can’t Deploy Services Independently?
Check your ‘bounded contexts’ and/or data ‘fault-lines’
(Also, check you have separated deploy and release)
19/06/15
@danielbryantuk
27. Can’t Deploy Services Independently?
• Schema-first design
– Michael Bryzek (Gilt): APIdoc
• Consumer-driven Contracts FTW
– Martin Fowler: CDC - A Service Evolution Pattern
“CDC is BDD for microservices”
19/06/15
@danielbryantuk
28. Architecture - not a Dirty Word
• Technical leadership (bit.ly/1EUwpLl)
• Communication (bit.ly/1Ia3u8o)
• Promote shared understanding
• ‘Just enough’ up front design
19/06/15
@danielbryantuk
29. 5. WRATH - Blowing up when bad things happen
19/06/15
@danielbryantuk
30. Bring in Michael Nygard (Or some monkeys)
19/06/15
@danielbryantuk
31. OPERATIONAL Concerns: Technical
• Continuous delivery is a microservice prerequisite
– Rapid provisioning
– Basic monitoring
– Rapid application deployment
• I.E. Agile & DevOps
19/06/15
@danielbryantuk
32. Operational Concerns: Social
• Failure happens all the time... Get used to it!
• 'Gameday' or 'Disaster in recovery testing' (Real) Scenarios
• Failure injection testing (FIT):
– Building 'Failure as a Service' at Netflix without the Simian Army
19/06/15
@danielbryantuk
34. “Dev-on-call”
An occasional spike to the head
is a good thing...
...metaphorically speaking
• You write it, you run it
– Accountability
– Shared responsibility
– Communication
19/06/15
@danielbryantuk
35. 6. ENVY - The shared SINGLE domain fallacy
19/06/15
@danielbryantuk
36. One Model to Rule Them All...
• One model…
– Breaks encapsulation
– Introduces coupling
• Know your DDD
– Entities
– Value Objects
– Aggregates and Roots
19/06/15
@danielbryantuk
37. But... how do I generate Reports?
• Aggregated reporting pattern
– Pull by service
• Data Pumps
– Push (Event sourcing?)
19/06/15
@danielbryantuk
38. 7. PRIDE - testing in the world of transience
19/06/15
@danielbryantuk
39. People are surprisingly quiet about this...
19/06/15
@danielbryantuk
marJnfowler.com/arJcles/microservice-‐tesJng/
40. Testing With Microservices is Difficult...
• Invest in your build pipeline testing
– Serenity BDD
– Wiremock / Saboteur
– Jenkins Performance plugin
19/06/15
@danielbryantuk
41. Testing With Microservices is Difficult...
• Do it in production(?)
– Netflix
– Hailo
– Gilt
• This is an advanced pattern!
– Automation is essential!
19/06/15
@danielbryantuk
42. Summary
• 1. LUST - Using the latest and greatest tech…
• 2. GLUTTONY - Excessive communication protocols
• 3. GREED - All your service are belong to us…
• 4. SLOTH - Creating a distributed monolith
• 5. WRATH - Blowing up when bad things happen
• 6. ENVY - The shared single domain fallacy
• 7. PRIDE - testing in the world of transience
19/06/15
@danielbryantuk