As day dawned on the Age of the Customer, technology companies – whether selling to consumers or enterprises – realized that monolithic applications could not support the speed, scalability, agility, and frequent if not continuous deployment that was required to remain competitive. Some ISVs transitioned to service-oriented architectures, but they still faced challenges similar to those presented by monolithic applications.
When a single missing semicolon brought down Netflix’s entire operation for several hours, the CTO’s organization realized something had to change (necessity really is the mother of invention). Netflix embarked on a project to transition from monolithic to microservices architecture. Since then, the development of containers, emergence of orchestration tools and evolution of service mesh have driven a more widespread move to microservices.
Today, a wide range of companies – including Amazon, Google, IBM, LinkedIn, Nike, Nordstrom, Orbitz, PayPal, Spotify, Target, Twitter, Karma and many others – have adopted microservices architecture. The benefits they have realized include speed, scalability, agility and more. For Karma, the online credit report monitoring solution, for example, the biggest benefit of microservices is programmer productivity. “It’s all about getting rid of distractions and focusing on what is happening in front of us now instead of worrying about breaking stuff somewhere else.”
But alas, those benefits don’t come free. Microservices does present challenges, not least of which is sorting out which among the variety of technologies are the best fit for your stack. The rapid emergence of new technologies make architecting ‘the best’ microservices stack a challenging proposition for many CTOs and VPs of Engineering.
In this blog post, we aim to help by highlighting the old standbys as well as the new technologies you may want to consider as you implement a microservices architecture. We’ll focus on cloud agnostic technologies. Many cloud platforms like AWS, Azure and Google Cloud have their own native services to implement microservices. But for technology companies, a cloud agnostic architecture is often important to ensure that your product will work no matter what environment your customer operates it in (public, private or hybrid cloud, or on-premises).
How Different Technologies Stack Up
The most prevalent microservices technologies come from Netflix, Kubernetes and Spring Cloud.
Netflix OSS
Netflix is a pioneer of microservices architecture. Today, the Netflix application is powered by an architecture featuring 500+ microservices. Netflix has open sourced most of its microservices components.
Kubernetes
A newer solution than Netflix OSS, Kubernetes is also open source. Developed by Google for its cloud, Kubernetes is known as an effective tool for microservices clustering and orchestration.
Spring Cloud
Spring Cloud microservices tools include configuration management, service discovery, circuit breakers, routing, etc. It is built on top of Netflix OSS libraries and written in Java.
Microservices Components & Technologies
|
|||
API Gateway | Netflix Zuul | Kubernetes Service & Ingress Resources, NGINX or Ambassador | Netflix Zuul |
Service Discovery | Netflix Eureka | Kubernetes Service & Ingress Resources or CoreDNS | Netflix Eureka, Hashicorp Consul or Zookeeper |
Container Orchestration | Netflix Titus | Kubernetes or Docker Swarm | Kubernetes (and now probably Netflix Titus) |
Load Balancer | Netflix Ribbon | Kubernetes Service or Docker Swarm | Netflix Ribbon |
Auto Scaling | Netflix Titus | Kubernetes Health Check, Self Healing, Autoscaling | Kubernetes (and now probably Netflix Titus) |
Resiliency & Fault Tolerance | Netflix Hystrix | Kubernetes Health Check & Resource Isolation | Netflix Hystrix |
Logging | ELK Stack (Elasticsearch, LogStash, Kibana) | EFK Stack (Elasticsearch, Fluentd, Kibana) | ELK Stack (Elasticsearch, LogStash, Kibana) |
Metrics & Dashboarding | Netflix Hystrix Dashboard, Turbine, and/or Netflix Atlas | Heapster, Prometheus, Grafana | Netflix Atlas |
Mixing and Matching Technologies to Create a Best-fit Architecture
While the Netflix, Kubernetes and Spring Cloud technology stacks described in the table above each provide specific components to implement microservices architecture, one can choose to ‘mix and match’ components from different stacks. Indeed, often the best-fit microservices architecture to meet your needs leverages some combination of technologies. For example, the diagram below represents the architecture Xoriant used when we transformed the monolithic application for a healthcare ISV. This architecture is a mix of technologies from the Netflix, Kubernetes and Spring Cloud stacks.
Best-fit Microservices Architecture Leverages Different Technologies
In the microservices architecture that we created for the client’s healthcare exchange application, represented in the diagram above, the majority of the components are from the technology stack recommended by Netflix – but not all. For example, for container orchestration and load balancing, we used Kubernetes, which helps in automatic deployment and scaling of containers running the microservices, and integrates well with the Netflix components.
RabbitMQ is used for intra-service messaging. A separate configuration service is a microservices best practice, especially in this kind of distributed and dynamic environment. This also enables the centralized configuration management. Here, we’ve used Spring Cloud Config. For metrics aggregation and display we used Netflix Turbine and Hystrix. Prometheus could also be a good choice in a containerized environment, orchestrated using Kubernetes.
Bottom Line
The technology options for microservices continue to grow (for example, it was just recently that Netflix open sourced its container orchestration solution, Titus, to round out the Netflix OSS stack). Your best-fit microservices architecture might include technologies from just one stack, or a combination from different stacks. The choice depends on various aspects of each component – its features, extendibility, scalability, integration and so on – combined with your existing architecture and particular use case. Stay tuned for future blog posts in which we’ll dive into those consideration factors in more depth.
If you’re looking for more information about the what and why behind microservices architecture – or any other aspect of product modernization – check out our new e-book, A Comprehensive Guide to Product Modernization