Seems like every 5 to 10 years our industry, especially in the enterprise integration, or enterprise application space, we’re introduced to some new methodology or architectural style. We’re told that it’s the-best-thing-since-toaster-strudel and will make you 10 times more productive and make your enterprise more agile, flexible, able to respond to change, and whatever else that CIOs are willing to spend huge giant piles of money on. We’ve seen Enterprise Application Integration, Web Services, SOA, Component based architectures, ESBs, and on and on.
Today’s hot technology: Microservices
Well, guess what: chances are you’re not going to get microservices architecture right.
Honestly, I’m not saying that to dump cold water on your burning desire to try out new things. I do think there is legitimacy to microservices, and it’s an approach that grew organically over the years of watching failed committee-driven implementations.
But guess what? There is a foundation of prerequisites that must be in place first to be successful with this architecture (or any architecture 🙂 ) that, based on my observations, is lacking in more places than it’s prevailing.
By all means, fire up Spring Boot or Dropwizard, or no container. You’re not doing microservices just because you’re following the lemmings away from the App Server. Places like Netflix, Amazon, etc. seem to have some of the right combination of prerequisites to make it work…But ask your VPs of engineering, ask your Directors of computing what they would say if their internal teams were organised like Amazon. They would spoil their pants. Your company probably doesn’t and probably won’t get microservices right.
Most organizations are not structured for microservices
We all hear about Conway’s law, but this fact is the strongest reason why you’re not going to do microservices. People win. Culture wins. Paper processes and paper structure does not win. If you have a UI team, DB team, “services” team, each specialising in its own right, you’ll end up with systems that look like those tiers. There’s nothing wrong with that per se. But a tree-like structure and layers of managers above technological-grouped teams is an impediment to microservices-based teams.
REST is not a silver bullet
REST is great! I like the concepts, and the fact that for enterprises, it’s basically the HTTP implementation we talk about. I’m happy to get away from SOAP. HTTP and REST is understood, has great tools, networking equipment, proxies, etc. are all built with it in mind…But REST is not a silver bullet.
Modularizing applications is hard
How big should the service be? How deep should it be? Single responsibilities? Domain Driven Design bounded contexts, etc. This is all difficult to get right in practice. Doing it a few times and failing is the best (in my opinion) way to learn how to avoid the sharp edges, but properly modularizing your applications and your domain services is not easy.
We still don’t understand how to do event-based architectures
Why are we still connecting everything by RPC?! This one aggravates me than most. We still don’t know how to do event driven architectures correctly, and when a “new” architectural style comes about, we revisit all of the same mistakes we did with the previous one. BTW…. Microservices = REST.
Alright, this was a bit of a rant, but just wanted to bring some reality to the discussion around microservices.
At the end of the day, isolating “services” or systems at the process level is still not really loose coupling or “decoupled” systems. Runtime coupling is still very much present and maybe even more so. Never mind that the Fallacies of distributed computing still hold true. So maybe when we re-invent architectural styles, we frame them within the lessons learned?