Neues von Netflix: Gateway-Plattform Zuul 2 wird Open Source

© Shutterstock.com / enchanted_fairy
Netflix hat seine Gateway-Plattform Zuul 2 jetzt Open Source gestellt. Zwar sind noch nicht alle Features mit an Bord, aber schon jetzt dürfte das Angebot für viele interessant sein, stützen sich die Ingenieure beim Streaming-Anbieter doch auf umfangreiches Know-How zum Thema Gateways.
Die Software hinter dem Angebot von Netflix besteht aus dutzenden Microservices, aber alle Anfragen an die Netflix-Cloud müssen durch das Gateway Zuul 2 hindurch. Mit diesem Gateway werden Anfragen bearbeitet, weitergeleitet und er schützt das Cloud-System von Netflix. Die Datenmengen, auf die das System vorbereitet ist, sind immens: 80 Cluster laufen mit Zuul 2, über 100 Backend-Service-Cluster bedienen über 1 Millionen Anfrangen pro Sekunde.
Zuul besteht aus den Netty Client Handlern, Inbound- und Outbound-Filtern, einem Endpoint-Filter und den Netty Server Handlern. Die Handler übernehmen das Handling des Netzwerkprotokolls, des Web-Servers, das Verbindungsmanagement und die Proxy-Arbeit.
Der Inbond-Filter liegt noch vor dem Proxy und kann für Authentifizierung, Routing und zur Dekorierung der Anfragen genutzt werden. Der Endpoint-Filter kann eine statische Response ausgeben oder als Kommunikationsschnittstelle für den Backend-Service dienen. Der Outbound-Filter laufen, nachdem eine Anfrage beantwortet wurde und können für gzipping, Metriken oder das Hinzufügen oder Entfernen von eigenen Headern genutzt werden.

Die Funktionsweise von Zuul im Überblick. „Origin“ ist die Serverseite in diesem Schema. / Quelle: Netflix
Letztlich beruht die gesamte Funktionalität von Zuul auf der Logik, die jedem Filter hinzugefügt wird. Daher kann die Plattform in verschiedenen Kontexten angewandt werden und verschiedene Probleme lösen, je nach Konfiguration und Filtern, die angelegt sind.
Ab sofort sind einige Kern-Features von Zuul 2 frei verfügbar, allerdings noch nicht alle. Zu diesen freien Features gehören:
- Server-Protokolle mit HTTP/2-Unterstützung für eingehende Verbindungen und Mutual TLS.
- Resilienz-Features wie adaptive Retries und konfigurierbare Nebenläufigkeitslimits, welche vor Überlastung schützen sollen.
- Operative Funktionen, zu denen das Tracking des Lebenszyklus‘ von Requests, die Auflistung von möglichen Fehlern und Erfolgen für Anfragen, die granularer sind als HTTP-Status-Codes, und die Nachverfolgung von Proxy-Zugriffsversuchen und des Status‘ jeder Anfrage gehören.
In naher Zukunft sollen auch weitere Features Open Source werden. Zu diesen gehören die Unterstützung für Push-Benachrichtigungen in Side Channels, Drosselung und Ratenlimitierung, Brownout-Filter und konfigurierbares Routing.
Zuul 2 in der Praxis
Die relevanten HTTP/2 Properties, um Zuul im HTTP/2-Modus laufen zu lassen, sind die Folgenden:
server.http2.max.concurrent.streams // default: 100 server.http2.initialwindowsize // default: 5242880 server.http2.maxheadertablesize // default: 65536 server.http2.maxheaderlistsize // default: 32768
In diesem Modus ist ein SSL-Zertifikat nowendig, wenn Zuul nicht im Zusammenhang mit einem ELB ausgeführt wird, muss ein TCP-Listener genutzt werden.
Zwar ist Zuul für die Nutzung mit Eureka-Servern konzipiert, aber auch die Arbeit mit statischen Servern oder einem Discovery Service ist möglich. Der Standardansatz für die Nutzung mit einem Eureka-Servern sieht wie folgt aus:
### Load balancing backends with Eureka eureka.shouldUseDns=true eureka.eurekaServer.context=discovery/v2 eureka.eurekaServer.domainName=discovery${environment}.netflix.net eureka.eurekaServer.gzipContent=true eureka.serviceUrl.default=http://${region}.${eureka.eurekaServer.domainName}:7001/${eureka.eurekaServer.context} api.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList api.ribbon.DeploymentContextBasedVipAddresses=api-test.netflix.net:7001
Um Zuul mit einem statischen Server oder mit einem anderen Discovery-Provider zu konfigurieren, ist es notwendig, die listOfSververs
-Property stets aktuell zu halten:
### Load balancing backends without Eureka eureka.shouldFetchRegistry=false api.ribbon.listOfServers=100.66.23.88:7001,100.65.155.22:7001 api.ribbon.client.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList api.ribbon.DeploymentContextBasedVipAddresses=api-test.netflix.net:7001
Netflix arbeitet daran, noch mehr der Features der Gateway-Plattform zu veröffentlichen. Zwar sei dies derzeit noch nicht möglich, aber schon zeitnah könnten alle Kernfeatures zu Verfügung stehen, wie Netflix in einem entsprechenden Blog-Beitrag bekannt gab. Wer einen genaueren Blick auf die Kern-Features von Zuul 2 werfen möchte, kann das im GitHub Repository von Netflix tun.
Übrigens: Der Name des Dienstes kommt natürlich – das Titelbild gab bereits einen Hinweis darauf – aus einem Film, nämlich Ghostbusters. Infos dazu hält das Ghostbuster-Wiki bereit.
Hinterlasse einen Kommentar