“Zuul’s Journey to Non-Blocking” by Arthur Gonigberg
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 the front. We rebuilt Zuul from the ground up, leveraging the Netty framework for its high-performance, non-blocking, event-loop architecture. We combined it with RxJava interfaces for a simpler programming model in our filters. Despite our lofty performance expectations for this project, we had 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 decide on whether your systems need to be non-blocking and provide the good and bad with some real-world scenarios.
Arthur Gonigberg, NETFLIX
Arthur works on the Cloud Gateway team at Netflix, whose primary duty is developing and operating the Zuul gateway, fronting all of Netflix’s cloud traffic. He has acquired a breadth of experience by working at companies of all sizes and experiencing the challenges faced by early and legacy products. His passions include building large-scale distributed systems and drinking copious amounts of coffee. Please find him if you want to argue about programming languages, web servers, or hockey teams.