Open Sourcing Zuul 2

Today we officially announced the release of Zuul 2. It’s an exciting day for the team and the blog post linked hightlights some of the other work we’ve been doing.

Here’s a summary of the major features included in the open source release:

Today we are releasing many core features. Here are the ones we’re most excited about:

Server Protocols

  • HTTP/2 — full server support for inbound HTTP/2 connections
  • Mutual TLS — allow for running Zuul in more secure scenarios

Resiliency Features

  • Adaptive Retries — the core retry logic that we use at Netflix to increase our resiliency and availability
  • Origin Concurrency Protection — configurable concurrency limits to protect your origins from getting overloaded and protect other origins behind Zuul from each other

Operational Features

  • Request Passport — track all the lifecycle events for each request, which is invaluable for debugging async requests
  • Status Categories — an enumeration of possible success and failure states for requests that are more granular than HTTP status codes
  • Request Attempts — track proxy attempts and status of each, particularly useful for debugging retries and routing

You can find on instructions on getting started on the Github wiki. We have a slew of features that we’re working on and will release shortly, so stay tuned.

Read this entry...

Zuul 2.0: The Journey to Non-Blocking

This is a talk I gave at Strange Loop about how we rebuilt Zuul on Netty and RxJava. The main themes of the talk are: what it took to rebuild it, what it’s been like operating it in production and how to make the right decision about going blocking vs non-blocking. Here is the abstract:

Zuul 2.0 is the latest iteration of the gateway application fronting Netflix’s API and underlying microservices. It was borne of a need to handle an ever-growing amount of traffic and a similarly ever-growing number of microservices to front. We largely rebuilt Zuul from the ground up, leveraging the Netty framework for its high-performance, non-blocking, event-loop architecture and combined it with RxJava interfaces for a simpler programming model in our filters. Despite our lofty performance expectations for this project we ended up with some mixed results and can definitively say that going asynchronous, non-blocking is not a panacea.

This talk will be a deep dive into how we progressively refactored and rebuilt Zuul from a blocking Tomcat application to a non-blocking Netty application and the results we have seen from running it in production over the last year. Specifically, I will review the journey of combining the RxJava and Netty frameworks in rebuilding Zuul, discuss how to make the decision on whether your systems need to be non-blocking, and provide the good and bad with some real-world scenarios.

Read this entry...