Der Tempel von Gozer ist gut gesichert

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

Marcel Richters
Zuul

© 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.

Zuul 2

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.

Geschrieben von
Marcel Richters
Marcel Richters
Marcel hat Soziologie an der Goethe-Universität in Frankfurt am Main studiert und danach als E-Commerce-Manager gearbeitet. Seit Februar 2018 unterstützt er das Team von JAXenter als Redakteur. Daneben arbeitet er als freier Journalist in der Mainmetropole.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: