The Fundamentals of Software Architecture and Microservices
Mark Richards explains microservices and what they exhibit -- evolution and revolution.
Join the DZone community and get the full member experience.Join For Free
According to Cambridge Dictionary, "evolutionary" is a gradual process of change and development, whereas "revolutionary" is a complete change in a system, or bringing or causing great change.
The question that this article poses is a necessary one to define how microservices have changed and affected the way we build and design our systems.
Microservices Are Evolutionary...
"Did we evolve into this architectural style about six to seven years ago? It was eventually going to happen, [and] two things were really the catalysts for microservices." Richards says during an interview in Coding Over Cocktails, a podcast by TORO Cloud.
"The first catalyst was this whole idea of continuous deployment. We had continuous integration, and that was a good first step, but when Dave Farley and Jez Humble came out with the book Continuous Delivery, it was just remarkable. It finally gave us the answers on how to deploy software effectively." he explains.
Richards adds that continuous deployment and delivery allowed developers to finally address large monolithic applications that didn’t work.
The evolution came about when developers realized that they could break up the applications into smaller, more manageable systems, which paved the way for effective deployment pipelines.
The second evolutionary catalyst Richard mentioned was Eric Evans’ concept of domain-driven design.
"I’m bold enough to say that microservices would not exist without the bounded context concept which Eric Evans drove through domain-driven design. These two [catalysts] are ‘parents’ of microservices in a way." he explains.
But, They’re Also Revolutionary
"I have been doing microservices for a little over six years now, almost devoting my whole career to it at this point for the past six years - I have also seen the revolutionary aspects of microservices."
Richards explains that microservices were the first architecture style that required users to consider data as part of the architectural design.
"No other architecture style in existence has required this," Richards reveals.
The other aspect that made it revolutionary was the collaboration required for microservices to succeed.
"We’ve been trying to collaborate, not just communicate between each other, but really collaborate – working together on developing a cohesive system. Microservices requires this collaboration. Without it, things completely fall apart." he adds.
With Revolution Comes Resistance
In any revolution, there can be a lot of upset and collateral damage, and according to Richards, users often experience the challenge of service granularity when dealing with microservices.
"How big should a service be? Our payment service, where we accept five different payment types for our processing - should that be one service or five? Should notification to our customers, which we do through SMS texting, email, and even postal letters - should that be one service or three? Service granularity is hard." he states.
Apart from service granularity, Richards adds that decomposing data can also be extremely difficult, as data is often interrelated.
"We've got foreign keys. We've got relationships between data. In microservices, we have ‘deployment hell,’ where all these services depend on one another. We knocked one service out, and all of a sudden, things can start breaking that we didn't even know were tied to it through workflows. If the deployments are not done correctly, it can be your worst nightmare. Service dependencies are where microservices really start to fall apart. And these are some of the real major hurdles and challenges."
Fortunately, however, there are solutions to all of these. And in the podcast, Richards also details some of the reasons why microservices can indeed be a great fit for organizations looking to drive their digital transformation projects forward.
"So, there are so many, many good reasons why this is on the hype curve. Super-high levels of scalability. Agility. One of the things that are near and dear to my heart is architectural change. Architecting for a change. I've been touting this in conferences, in various talks, for almost 10 or 12 years about Agile architecture. And this was before microservices even existed." Richards recalls.
This podcast series tackles issues faced by enterprises as they manage the process of digital transformation, application integration, low-code application development, data management, and business process automation. It’s available for streaming on most major podcast platforms, including Spotify, Apple, Google Podcasts, SoundCloud, and Stitcher.
Published at DZone with permission of Kevin Montalbo. See the original article here.
Opinions expressed by DZone contributors are their own.