Martin Fowler on Microservices
I was lucky enough to see Martin Fowler speak at Melbourne Yow! Nights recently, and one of the topics he chose to speak on was Microservices, which he described as the "hipster" talk of the evening.
Martin provided a series of common characteristics as an alternative to a "definition" of Microservices.
The common characteristics for a Microservices implementation are:
- Componentisation via Services
- Organised around business capabilities
- Products, not Projects
- Smart Endpoints and Dumb pipes (the opposite of the ESB pattern)
- Decentralised Governance
- Decentralised Data Management (no core database!)
- Infrastructure Automation
- Design for failure
- Evolutionary Design
If you are meeting most of these characteristics most of the time, then you are mostly doing Microservices.
The talk recognised the hype around Microservices, and was instructive about when you would and would not apply a Microservice architecture. A set of entry criteria were given.
- Have a Provisioning capability
- Have good Monitoring
- Have a Rapid Deployment capability
- Have a culture of DevOps.
The challenge has been made that Microservices are doing nothing that SOA has not been doing for the last 10 years. Martin noted that there is a significant variance in how SOA is done. Some people may be doing SOA in a way that is consistent with a Microservices architecture, but a great deal of people are not.
He illustrated the Productivity/Complexity tradeoff of Monolith vs Microservices in this graph, with the "Microservices Premium" highlighted.
The graph shows us that for the right complexity, a monolithic architecture may be appropriate, but as complexity grows, the Microservices architecture can provide a superior productivity for delivery teams.
Martin's introduction to Microservices, plus a lot of other great resources can be found at his site, here.
Ben Stringer is the Principal Consultant at Syntegrity Solutions, a consultancy specialising in Integration, APIs and Identity Management. He has over 25 years of experience in the IT industry, and enjoys working with customers from many different industries on their integration and API projects.