With the explosive growth of the cloud, big data analytics and SaaS-based business applications and services, we’ve seen the underlying application architecture transform. Applications today are no longer limited by the infrastructure they run on. Instead, they can control their fundamental infrastructure technologies, turning them into services to be harnessed on demand and programmatically during application execution. Key to exploiting “Infrastructure as Code”, modern applications are being constructed out of a collection of autonomous, independent building blocks dedicated to a single function each, called Microservices. Uber, Amazon, Netflix, Ebay and Twitter have all publicly embraced this type of approach to building and delivering their services. So why are so many organizations turning to microservices in the cloud era?
At a basic level, the use of microservices is a more evolved successor to principles first espoused as service-oriented architectures (SOA) used to build flexible, independently deployable software systems. Services in a microservice architecture are processes that can scale out independently. They communicate with other microservices over a network message bus, and each microservice fulfills one and only one specific function for the overall application. Each microservice has a carefully constructed API that other microservices use to make requests of it. Microservices typically have their own dedicated persistent state that is not exposed to others, enabling each microservice to provide its function without any information about the internal implementation of any other services — all that is required is that they have well-defined APIs that they support respectively.This trend represents a new architecture for the cloud that breaks apart large monolithic applications into a more manageable set of small, discrete processes that facilitates both independent development, release schedule and scale out for each independent function.
Previously, it would take numerous engineers many months or years to build and maintain large, monolithic software programs. Whenever the code that implemented a common function needed to be changed either to fix a bug or add a feature, it had to be updated in numerous places owned by different teams. But today, microservices’ design methodology makes it easier to develop systems with reusable component parts that can be utilized by multiple applications and services throughout the organization. The microservice design philosophy of services only interacting via a stable, well formed API makes this reuse and independent development possible. If each new microservice is broadly reuseable, engineers will have more time to focus on building the unique value added capabilities that differentiate its business from competitors.
While microservices can make it easier to efficiently build, deploy and scale today’s large scale applications, their complexity when viewed as a whole system can be daunting for application lifecycle management and resource efficiency if not properly managed. Automation is the key reducing this complexity and enabling the seamless delivery of complex, global scale services delivered with less and less custom code.
As long as organizations take the time to do their homework, the flexibility and extensibility of microservices can provide them with shorter time-to-production, ability for faster innovation and improved efficiencies.