Containers have captured the imagination of both infrastructure providers and developers: the former because they see containers as a more efficient technology for meting out virtual compute resources, the latter because containers provide the path to building disaggregated, distributed next-generation applications. Decomposing traditional monolithic application designs into their fundamental components promotes code reuse, offers easier, more granular scalability and supports rapid development cycles by decoupling coding, testing and debugging into smaller chunks with fewer dependencies.
Netflix former head of web engineering, Adrian Cockcroft, defines a microservices architecture this way: “a service‑oriented architecture composed of loosely coupled elements that have bounded contexts.” However, as this post illustrates, designing a microservices framework for multiple applications is a non-trivial exercise that involves several architectural decisions. These are just the start of the journey into a microservices-based application portfolio, with recent research from several consultancies detailing the many required steps on the path to enterprise microservices.
Microservices are near the peak of inflated expectations which portends looming disillusionment as IT and AppDev practitioners encounter many roadblocks ahead, including a steep learning curve, new deployment platforms and developer tools and organizational changes required to shift from monolithic to modular applications. Nevertheless, predictions of microservices proliferating across enterprises everywhere persist. Notably, IDC forecasts that “by 2022, 90 percent of all new apps will feature a microservices architectures that improve the ability to design, debug, update, and leverage third-party code” with 35 percent of production apps being cloud-native designs.
While the number is aggressive, IDC’s rationale is sound — namely, that more modular applications improve development agility and project cycles — even as it guides enterprises to reorganize around a DevOps structure that integrates development and operations teams. However, an organizational structure is merely the foundation for the work ahead since, despite what some product vendors might want you to believe, creating microservices is a redesign and construction project, not a remodeling job.
From monoliths to microservices
A new report by IT consultancy TEKsystems offers some solid advice on making a successful transition from monolithic to disaggregated, i.e. microservice-based, applications. Admittedly the bulk of the report seems targeted to selling executives unsure about embracing the latest IT buzzword, however, practitioners charged with turning a vague executive microservice strategy into useful applications working on production systems will find some valuable tips. My interpretation of the essential steps, which also draws from a pertinent Gartner blog, 4 Steps to Design Microservices for Agile Architecture, follows:
- Microservice design starts with the cloud system and service ecosystem or in TEKsystem’s words “modernization should be holistic.” Because microservices rely on so many infrastructure and platform components, such as container clusters, an API gateway, service registry, service bus and often, public cloud services like serverless functions and IAM directories, implementing a microservice strategy can’t be piecemeal.
- Identify core application services and dependencies. The goal of microservices is to decouple reusable services from application-specific code. As the image above illustrates, such decoupling necessitates a thorough analysis and understanding of the components comprising one's application fleet and their dependencies.
- Design loosely-coupled services. An essential benefit of microservices is the ability to reuse services and thus reduce the new code required for an application and speed development cycles. Such reuse is impossible if services are tightly coupled to one another and/or particular applications. The goal is to produce a library of generic components that provide functions useful to a wide variety of applications. As Gartner points out, the decoupling should extend to the data generated and used by each service, which should be in an independent repository easily accessible by all services.
- Start small and iterate to produce what TEKsystems calls “quick wins” that provide “the minimum viable product that you can optimize to get a proof of concept.” Such humble beginnings will demonstrate the value of a microservice app, enhance the IT/DevOps organization’s confidence in using the architecture and offer opportunities for iterative improvements in features and performance. Big Bang transitions, by multiplying project dependencies and stretching timelines are almost guaranteed to fail.
- The service-oriented mindset must be comprehensive and include people, processes and technologies. Project teams should be lean and agile like Amazon’s two-pizza teams, with authority to make rapid decisions over the microservices or clearly defined products within their responsibility. Indeed, there is science behind Bezos’ thinking since smaller teams improve communication and minimize meeting overhead. For background, Deloitte has a good overview of the benefits of shifting IT’s orientation from projects to products. According to a TEKsystems analyst, “You need to have strong leadership. The decision tree can’t be big and bloated, and the silos can’t be fighting with each other.” Similarly, software development technology should support rapid changes, multiple versions and automated testing, integration and deployment (CI/CD).
- Don’t get lost in the technology, but keep focused on delivering business value. Microservices are a means to an end, that being the rapid development and evolution of innovative applications, business processes and customer services. A TEKSystems consultant adds that “Companies should not only think about improving what they have today, but more importantly, think about what doesn’t exist today.”
Measure the success of both the overall strategy and individual microservices and applications by their contribution to business metrics such as:
- More revenue
- Higher customer satisfaction
- Lower costs
- Reduced cycle times for new applications, software bug fixes and updates and problem resolution
- Better overall security with fewer cyber vulnerabilities
We’re still in the early days of enterprise adoption of microservices, but there are already some notable success stories. Here at diginomica, Jon Reed recounted the case of how Nuance built a modern apps platform on microservices that can adapt to changing business circumstances.
While not representative of the typical enterprise, the most ardent and early adopters of microservices are in big tech and online services where microservices are embedded in the core infrastructure of all the FAANG companies (Facebook, Amazon, Apple, Netflix, Google). None has been more vocal and public about its use of microservices than Netflix, which made the move from monolithic to modular systems a decade ago. As this retrospective points out, Netflix’s monolithic code was breaking under the strain of explosive growth and the resulting spaghetti code with multiple dependencies meant that one small coding mistake could take its entire site offline for hours.
As an early adopter, Netflix suffered the scars of debugging immature microservice technology and ended up developing an entire microservices software stack that includes modules for service discovery, inter-process and -service communication, service routing, monitoring and security, workload scheduling and distributed configuration management. While the company has encountered many speed bumps along the way, with famous outages causes by inadequate redundancy in its cloud infrastructure at AWS, the result is a set of services that now supports more than 150 million users around the world streaming hundreds of millions of hours per day.
The share of enterprises implementing micro-services is likely still in the single digits, which makes me skeptical of IDC’s 90 percent estimate by 2022 since it implies doubling microservice adoption every year. Whatever the rate, it’s clear that an increasing number of enterprises will implement microservices as the foundation for next-generation applications. While the core technology is much more mature than when Netflix made the switch, with many elements available as managed cloud services, the business strategy, service design and organizational challenges remain. Before IT leaders embark on a microservices program, they are wise to learn from the experiences and advice shared by early adopters.