Animesh Singh and Tommy Li from IBM spoke at the recent KubeCon + CloudNativeCon North America 2017 Conference about microservices resiliency and fault tolerance leveraging the Istio framework.
Microservices architecture models offer highly scalable and distributed services and need failure management at different layers with resiliency and fault tolerance. We also need to enforce policy decisions such as fine-grained access control and rate limits on services. A service-mesh architecture helps with these requirements by extracting the common resiliency features needed by a microservice framework away from the applications and frameworks.
Singh talked about the container stack where Docker and Kubernetes are part of Layer 5 of the OSI model as part of the orchestration and scheduling service model. He also discussed the IBM Cloud Container Service, which can be used to manage services based on Kubernetes technology. Kubernetes is a good choice for microservices -- its container orchestration capabiities including scheduling, cluster management and discovery features make it easy to deploy and manage microservices.
Singh and Li talked about some of the requirements to build reactive and resilient microservices:
- Fault avoidance
- Fault isolation
- Fault detection
- Recovery
A service mesh, which is basically a network for services, complements Kubernetes by providing the resiliency to the microservices without each service having to worry about it. Lightweight sidecars help by managing traffic between services.
Istio, an implementation of service mesh, can be used to deploy resilient microservices. The speakers talked about Istio concepts like Pilot, Mixer, and Proxy as well as the Control Plane and Data Plane components. Istio adds fault tolerance to your application without any changes to code. Resilience features include timeouts, retries with timeouts, circuit breakers, health checks, AZ-aware load balancing, and systematic fault injection.
They discussed how to make microservices resilient with Istio which can be accomplished using patterns like Traffic splitting and Traffic steering (content-based traffic steering). The presentation included a demonstration of the resiliency of a sample app using Istio. The sample application includes an auto-generated control panel for manual recreation of problem scenarios using Istio fault injection. It also showed simulated failed microservices and how to observe the live responses from microservice mesh.
Singh and Li discussed the Kubernetes and microservices based developer patterns:
- Spring Boot Microservices on Kubernetes
- Java MicroProfile Microservices on Kubernetes
- Manage microservice traffic using Istio on Kubernetes
- Leverage Istio to create resilient and fault tolerant Microservices
If you are interested in learning more about the developer patterns on container orchestration, you can find more details on their website.