Introduction to Microservices (And)
The Seven DEADLY SINS OF MicroservicesDaniel Bryant
@danielbryantuk
OpencRedo
(WITH Credit to Tareq Abedrabbo)
The Seven Deadly Sins
1. LUST …
2. GLUTTONY
3. GREED…
4. SLOTH
5. WRATH
6. ENVY
7. PRIDE
07/04/2016 @danielbryantuk
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
07/04/2016 @danielbryantuk
Who Am I?
• Chief Scientist at OpenCredo
ü Agile, Architecture, CI/CD, DevOps
ü Microservices, cloud, containers
ü Driving change through the application of technology and teams
• London Java Community Associate
• InfoQ Editor, DZone MVB, VOXXed, O'REILLy
• MBCS (10+ Years), Ex-academic (PhD AI/Software)
07/04/2016 @danielbryantuk
So, What are microservices?
“Loosely coupled service oriented architecture with bounded contexts”
Adrian Cockcroft
“Applications that fit in your head”James Lewis
07/04/2016 @danielbryantuk
So, What are microservices?
• Architectural style - build services around biz Capability
• single App composed of multiple services
• Services Running as individual processes, individually deployable
• lightweight external communication (e.g. rest over http)
• Potentially polyglot Language and Data stores
• Minimum centralised management
07/04/2016 @danielbryantuk
Monolith vs microservices
07/04/2016 @danielbryantuk
martinfowler.com/articles/microservices.html
AKF Scale Cube
07/04/2016 @danielbryantuk
Microservices
Microservices Were often a 'Result'
07/04/2016 @danielbryantuk
www.slideshare.net/trenaman/javaone-2015-scaling-micro-services-at-gilt
I'm sure a few of you are thinking...
This sounds like distributed objects (CORBA)...
Yes
This sounds like component-based software engineering...
Yes
This sounds like service-oriented architecture (SOA)...
Yes
07/04/2016 @danielbryantuk
So, we've done this before?
Oh, Yes...
but this time it's Different...
maybe...
07/04/2016 @danielbryantuk
The Perfect Storm in IT?
• collaborative Processes (and increasing requirements for speed)
– Devops, (Lean and Agile)
• Programmable infrastructure
– Config management, Cloud and containers
• Open source
– Download, consume and contribute
07/04/2016 @danielbryantuk
Get ready for the (Gartner) rollercoaster...
07/04/2016 @danielbryantuk
en.wikipedia.org/wiki/Hype_cycle
Microservices
Opencredo have worked with microservice early adopters...
...And have learnt many lessons
07/04/2016 @danielbryantuk
opencredo.com/casestudies/noths-case-study/opencredo.com/casestudies/millenoki-iot/opencredo.com/casestudies/sedex-google-cloud-platform/
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
07/04/2016 @danielbryantuk
1. Lust - Using THE LATEST and Greatest Tech…07/04/2016 @danielbryantuk
Microservices...
They solve all of our problems, Right?
(If you have silver bullets, watch out for the werewolves)
07/04/2016 @danielbryantuk
No... Not necessarily good for speed
07/04/2016 @danielbryantuk
skillsmatter.com/skillscasts/6143-microservices-for-speed
Additional Reading!!martinfowler.com/bliki/
MonolithFirst.html
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)
07/04/2016 @danielbryantuk
No... Check your architecture/design skills
07/04/2016 @danielbryantuk
No... Operational maturity is vital
07/04/2016 @danielbryantuk
martinfowler.com/bliki/MicroservicePrerequisites.html
Microservices are very useful
But check your use case...
...Evaluation is a key skill
07/04/2016 @danielbryantuk
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
07/04/2016 @danielbryantuk
Pick Your (Technical) Battles...…
• As Dan McKinley says, “Choose Boring Technology”– Optimize globally across organisation
• Java and Spring (Boot) are perfectly acceptable
• Do you really need containers?
07/04/2016 @danielbryantuk
Matt Raible’s Comparison Framework
07/04/2016 @danielbryantuk
2. GLUTTONY - Excessive Communication PROTOCOLS07/04/2016 @danielbryantuk
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
07/04/2016 @danielbryantuk
Enterprise communication (Beam me up?)
07/04/2016 @danielbryantuk
www.dzone.com/research/guide-to-enterprise-integration
3. GREED - All your service are Belong to us…07/04/2016 @danielbryantuk
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
07/04/2016 @danielbryantuk
07/04/2016 @danielbryantuk
Dev QA Ops
Hand-offdelaysHand-offdelays
Slowfeedback Slowfeedback
Lackofcohesion, sharedunderstanding andjointaccountability
Front-end Database
Middleware07/04/2016 @danielbryantuk
07/04/2016 @danielbryantuk
Technical problems are often people problems...
07/04/2016 @danielbryantuk
bit.ly/1L43U4H
Cross-functional Teams
• Spotify (bit.ly/1C46ZKo)– Culture
• Amazon (bit.ly/1F3Dgkm)
– Communication
• Gilt (gi.lt/1rgyWvO)– Strategic alignment
07/04/2016 @danielbryantuk
Conway was Telling the Truth... Deal with it!
07/04/2016 @danielbryantuk
Final Thoughts for the organisation
Can your business team take advantage of microservices?
07/04/2016 @danielbryantuk
Inspiration (for the business)
07/04/2016 @danielbryantuk
https://opencredo.com/the-business-behind-microservices-redux/
4. SLOTH - Creating a distributed monolith07/04/2016 @danielbryantuk
Can’t Deploy Services Independently?
Check your ‘bounded contexts’ and/or data ‘fault-lines’
(Also, check you have separated deploy and release)
07/04/2016 @danielbryantuk
Can’t Deploy Services Independently?
• Schema-first design
– Michael Bryzek (Gilt): APIdoc
• Consumer-driven Contracts FTW
– Martin Fowler: CDC - A Service Evolution Pattern
07/04/2016 @danielbryantuk
Architecture - not a Dirty Word
• Technical leadership (bit.ly/1EUwpLl)
• Communication (bit.ly/1Ia3u8o)
• Promote shared understanding
• ‘Just enough’ up front design
07/04/2016 @danielbryantuk
Architectural memes for Microservices
• Design for 'replacability'
• Architectural 'safety' (building cities, not houses)
• Messages
– Event-driven architectures (Event sourcing, CQRS)
– Distributed commit logs (Kafka, Kinesis)
– Actors (Akka, Orleans)
07/04/2016 @danielbryantuk
5. WRATH - Blowing up when bad things happen 07/04/2016 @danielbryantuk
Bring in Michael Nygard (Or some monkeys)
07/04/2016 @danielbryantuk
Distributed computing - your new best friend
• Notes on distributed systems for young bloods– Jeff hodges (bit.ly/1pKVepz)
• 8 Fallacies of distributed computing
– Sun Microsystems, ROTEM-GAL-OZ (bit.ly/1IEpFC0)
• Distributed systems theory for the distributed systems engineer– Henry Robinson (bit.ly/1qcxqZ3)
07/04/2016 @danielbryantuk
OPERATIONAL Concerns: Technical
• Continuous delivery is a microservice prerequisite
– Rapid provisioning
– Basic monitoring
– Rapid application deployment
• Automate, automate, automate...
07/04/2016 @danielbryantuk
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
07/04/2016 @danielbryantuk
Share the pain...
07/04/2016 @danielbryantuk
“Developer-on-call”An occasional spike to the head
is a good thing...
...metaphorically speaking
• You build it, you run it– Accountability
– Shared responsibility
– Communication
07/04/2016 @danielbryantuk
6. ENVY - The shared SINGLE domain fallacy07/04/2016 @danielbryantuk
One Model to Rule Them All...
• One 'Canonical' model…– Breaks encapsulation
– Introduces coupling
• Know your DDD– Entities
– Value Objects
– Aggregates and Roots
07/04/2016 @danielbryantuk
But... how do I generate Reports?
• Aggregated reporting pattern
– Pull by service
• Data Pumps
– Push (Event sourcing?)
07/04/2016 @danielbryantuk
7. PRIDE - testing in the world of transience07/04/2016 @danielbryantuk
People are surprisingly quiet about this...
07/04/2016 @danielbryantukmartinfowler.com/articles/microservice-testing/
Testing With Microservices is Difficult...
• Invest in your build pipeline testing
– Serenity BDD
– Hoverfly & Wiremock / Saboteur
– Jenkins Performance plugin
07/04/2016 @danielbryantuk
Testing With Microservices is Difficult...
• Do it in production(?)
– Netflix
– Hailo
– Gilt
• This is an advanced pattern!– Automation is essential!
07/04/2016 @danielbryantuk
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
07/04/2016 @danielbryantuk
07/04/2016 @danielbryantuk
https://skillsmatter.com/members/danielbryantuk#skillscasts
https://www.youtube.com/playlist?list=PLzA2sNPAqK1RcVGsFl7up4Phqs6LlmmiY
http://www.infoq.com/presentations/7-sins-microservices
07/04/2016 @danielbryantuk
https://opencredo.com/blog/https://opencredo.com/tag/microservices/http://muservicesweekly.com/
http://www.infoq.com/author/Daniel-Bryant
THANKS...
@danielbryantuk
Credit to Tareq Abedrabbo and the OpenCredo Team for inspiration/guidance
Big Thanks to our clients: Noths.com, Sedex and Millenoki
07/04/2016 @danielbryantuk