Die Migration von Netflix zu GraphQL
Im Jahr 2022 hat Netflix einen bedeutenden Schritt in der Weiterentwicklung seiner mobilen Anwendungen gemacht. Sie migrierten ihre mobilen Apps zu GraphQL - und das ohne Ausfallzeiten. Dieser Prozess erforderte eine vollständige Überarbeitung von der Client- bis zur API-Ebene, was eine erhebliche technische Herausforderung darstellte. Aber mit sorgfältiger Planung, umfangreichen Tests und innovativen Lösungen konnte Netflix diese Herausforderung erfolgreich meistern.
Vor der Migration: Falcor
Das Falcor Framework
Bevor Netflix zu GraphQL wechselte, wurde ihre API-Schicht von einem monolithischen Server angetrieben, der mit einem internen API-Framework namens Falcor gebaut wurde. Ein einziges API-Team pflegte sowohl die Java-Implementierung des Falcor-Frameworks als auch den API-Server. Dieses Modell hatte seine Vorteile, stellte jedoch auch Herausforderungen dar, insbesondere in Bezug auf Skalierbarkeit und Flexibilität. Mit der wachsenden Komplexität und den sich ändernden Anforderungen ihrer mobilen Apps wurde klar, dass eine neue Lösung erforderlich war.
Phase 1: Einführung von GraphQL
Der Übergang zu GraphQL
Im Sommer 2020 waren viele UI-Ingenieure bei Netflix bereit, zu GraphQL zu wechseln. Anstatt eine vollständige Migration von oben nach unten durchzuführen, erstellte Netflix einen GraphQL Shim auf ihrer bestehenden Falcor API. Dies ermöglichte es den Client-Ingenieuren, schnell auf GraphQL umzusteigen, Client-seitige Bedenken wie Cache-Normalisierung zu klären, mit verschiedenen GraphQL-Clients zu experimentieren und die Client-Leistung zu untersuchen, ohne durch serverseitige Migrationen blockiert zu werden. Dies war ein entscheidender Schritt, um die Vorteile von GraphQL zu nutzen und gleichzeitig das Risiko einer umfassenden Migration zu minimieren.
Exkurs: Was ist GraphQL?
GraphQL Definition
Stell dir vor, du hättest einen Übersetzer, der zwischen dir und deinen Daten spricht und dir eine vollständige und verständliche Beschreibung der Daten in deiner API gibt. Dieser Übersetzer ermöglicht es dir, genau das zu fragen, was du brauchst, und nichts mehr. Dieser Übersetzer ist GraphQL, eine Abfragesprache für APIs und eine Laufzeitumgebung, die es dir ermöglicht, diese Abfragen mit deinen vorhandenen Daten auszuführen.
GraphQL wurde 2012 von Facebook entwickelt, um die Probleme zu lösen, die sie mit traditionellen REST-APIs hatten, insbesondere in Bezug auf Effizienz und Geschwindigkeit für mobile Anwendungen. Im Jahr 2015 wurde es öffentlich gemacht und hat seitdem die Art und Weise, wie wir APIs entwickeln und nutzen, revolutioniert.
Im Gegensatz zu SQL ist GraphQL keine Datenbankabfragesprache. Es ist eine Abfragesprache für APIs. Es bietet eine effizientere und leistungsfähigere Alternative zu REST und ermöglicht es Clients, genau das zu bekommen, was sie benötigen. Es ist wie ein Buffet, bei dem du nur das nimmst, was du wirklich essen willst, anstatt ein festes Menü zu bekommen.
Unternehmen wie Facebook, Pinterest, Shopify und Twitter haben GraphQL implementiert. Bei Facebook beispielsweise wird es verwendet, um Daten effizient an seine mobilen Plattformen zu liefern. Bei Pinterest wird es verwendet, um die Effizienz ihrer Datenabfragen zu verbessern und die Leistung ihrer Anwendungen zu steigern.
Einer der größten Vorteile von GraphQL ist seine Effizienz und Flexibilität. Es ermöglicht es Clients, genau das zu bekommen, was sie benötigen, was zu schnelleren und effizienteren Anwendungen führt. Ein Nachteil könnte sein, dass es eine Lernkurve gibt, um es effektiv zu nutzen, und es kann Overkill für einfache APIs sein.
Wer verwendet GraphQL?
Du fragst dich vielleicht, wer GraphQL in der realen Welt verwendet? Nun, eine ganze Reihe von Unternehmen haben es in ihre Tech-Stacks aufgenommen. Facebook, der Erfinder von GraphQL, nutzt es natürlich, um Daten effizient an seine mobilen Plattformen zu liefern. Aber auch andere Unternehmen wie Pinterest und Shopify haben es implementiert, um die Effizienz ihrer Datenabfragen zu verbessern und die Leistung ihrer Anwendungen zu steigern. Bei Shopify beispielsweise wird es verwendet, um Entwicklern eine effiziente und flexible Methode zur Interaktion mit ihrer Plattform zu bieten.
GraphQL vs REST
Vielleicht hast du schon von REST gehört, einer anderen API-Design-Architektur. Im Vergleich dazu bietet GraphQL einige entscheidende Vorteile. Während REST auf Standard-HTTP-Protokollen basiert und verschiedene HTTP-Methoden wie GET, POST, DELETE usw. verwendet, ermöglicht GraphQL es Clients, genau das zu spezifizieren, was sie benötigen, was die Effizienz verbessert. Und im Gegensatz zu REST, das mehrere Endpunkte benötigt, um Daten abzurufen, benötigt GraphQL nur einen einzigen Endpunkt, um alle Daten abzurufen. Es ist wie der Unterschied zwischen einem Supermarkt mit vielen verschiedenen Abteilungen und einem One-Stop-Shop, bei dem du alles an einem Ort finden kannst.
Einführung in Federated GraphQL
Federated GraphQL, auch bekannt als Apollo Federation, ist eine Architektur, die es ermöglicht, mehrere GraphQL-APIs in einen einheitlichen Supergraphen zu kombinieren. Dieses Konzept ist besonders nützlich, wenn du eine große Anzahl von Teams und Diensten hast, die jeweils ihren eigenen Teil des Supergraphen besitzen und verwalten.
Das Konzept der Föderation: Ein Einkaufszentrum-Analogie
Stell dir das Konzept der Föderation wie ein großes Einkaufszentrum vor. Anstatt in mehrere kleine Geschäfte zu gehen, um alles zu finden, was du brauchst, gehst du einfach in ein großes Einkaufszentrum, das alles unter einem Dach hat. In einer föderierten Architektur werden deine einzelnen GraphQL-APIs als Subgraphen bezeichnet und sie werden zu einem Supergraphen zusammengesetzt. Durch Abfragen des Routers deines Supergraphen kannst du Daten von all deinen Subgraphen mit einer einzigen Anfrage abrufen.
Deklaratives Programmiermodell in Apollo Federation
Apollo Federation verwendet ein deklaratives Programmiermodell, das es jedem Subgraphen ermöglicht, nur den Teil des zusammengesetzten Supergraphen zu implementieren, für den er verantwortlich ist. Dieses Modell ermöglicht es, den Graphen über mehrere komponierbare Dienste zu verteilen, anstatt einen einzigen, monolithischen GraphQL-Server zu haben.
Verwalteter Modus und Apollo Studio
Ein weiterer Vorteil der Apollo Federation ist die Unterstützung eines kostenlosen verwalteten Modus mit Apollo Studio. Dies ermöglicht es dir, deine Subgraphen hinzuzufügen, zu entfernen und zu refaktorisieren, ohne Ausfallzeiten für deinen Produktionsgraphen zu benötigen.
Struktur der Apollo Federation
Die Apollo Federation besteht aus einer Sammlung von Subgraphen, die jeweils ein eigenes GraphQL-Schema definieren, und einem Gateway, das die Subgraphen zu einem föderierten Daten-Graphen zusammenfügt und Abfragen über mehrere Subgraphen ausführt. Die Apollo Server-Bibliotheken unterstützen sowohl die Rolle eines Subgraphen als auch die eines Gateways, aber diese Komponenten können in jeder Sprache und jedem Framework implementiert werden.
Schrittweise Einführung der Apollo Federation
Ein wichtiger Aspekt der Apollo Federation ist das Prinzip der schrittweisen Einführung. Wenn du derzeit einen monolithischen GraphQL-Server verwendest, kannst du seine Funktionalität nach und nach aufteilen. Wenn du derzeit eine andere föderierte Architektur verwendest, kannst du die Unterstützung für die Föderation nach und nach zu deinen bestehenden Diensten hinzufügen. In beiden Fällen werden alle deine Clients während deiner schrittweisen Migration weiterhin funktionieren.
Die Apollo Federation fördert ein Designprinzip namens Trennung der Anliegen. Dies ermöglicht es verschiedenen Teams, an verschiedenen Produkten und Funktionen innerhalb eines einzigen Daten-Graphen zu arbeiten, ohne sich gegenseitig zu stören.
Ein weiterer wichtiger Aspekt der Apollo Federation ist die Möglichkeit, ein Schema, das von einem Subgraphen definiert wird, zu erweitern. Zum Beispiel kann der Review-Subgraph den User-Typ erweitern, indem er ein Review-Feld hinzufügt. Ein Subgraph muss die @key-Direktive zu einer Typdefinition hinzufügen, damit andere Subgraphen diesen Typ referenzieren oder erweitern können. Diese Direktive teilt anderen Subgraphen mit, welche Felder zur eindeutigen Identifizierung einer bestimmten Instanz des Typs verwendet werden sollen.
Apollo Federation bieten eine leistungsstarke Möglichkeit, einen einheitlichen Datengraphen zu erstellen und zu skalieren, indem sie die Zusammenarbeit mehrerer Teams und Dienste ermöglicht. Sie bietet eine flexible und effiziente Möglichkeit, komplexe Datenstrukturen zu verwalten und gleichzeitig die Unabhängigkeit und Autonomie der einzelnen Teams zu gewährleisten.
Phase 2: Abschaffung des GraphQL Shim Service und des Legacy API Monolith
Federated GraphQL
Netflix wollte nicht, dass die Legacy Falcor API für immer bestehen bleibt, daher setzten sie auf Federated GraphQL, um eine einzelne GraphQL API mit mehreren GraphQL-Servern zu betreiben. Federated GraphQL ermöglichte es den Domänenteams, bestimmte Abschnitte der API unabhängig zu verwalten und zu besitzen, was zu einer verbesserten Skalierbarkeit und Flexibilität führte. Dies war ein großer Schritt in Richtung einer dezentralisierten API-Struktur, die es den Teams ermöglichte, schneller und effizienter zu arbeiten.
Teststrategien
AB-Tests, Replay-Tests und Sticky Canaries
Netflix verwendete verschiedene Teststrategien, um die Migration sicher durchzuführen. Dazu gehörten AB-Tests, Replay-Tests und Sticky Canaries. Jede dieser Strategien hatte ihre eigenen Vor- und Nachteile und wurde je nach Anforderungen eingesetzt. Diese umfangreichen Tests waren entscheidend, um sicherzustellen, dass die Migration reibungslos verlief und die Qualität und Leistung der neuen GraphQL-APIs gewährleistet waren.
Weiterführende Informationen, Quellen und Links
Für weitere Informationen über die Migration von Netflix zu GraphQL, besuche den Netflix TechBlog, wo du detaillierte technische Einblicke und Hintergrundinformationen finden kannst.
Zusammenfassung
Die Migration von Netflix zu GraphQL war ein komplexer Prozess, der sorgfältige Planung und umfangreiche Tests erforderte. Durch den Einsatz von AB-Tests, Replay-Tests und Sticky Canaries konnte Netflix sicherstellen, dass die Migration sicher und effizient durchgeführt wurde, ohne die Erfahrung ihrer Kunden zu beeinträchtigen. Dieser Prozess ist ein hervorragendes Beispiel für die erfolgreiche Anwendung von GraphQL in einer großen und komplexen Anwendungsumgebung. Entdecke die Welt der APIs mit GraphQL bei Esono. Wir bieten professionelle Beratung und Umsetzung von GraphQL APIs für E-Commerce-Lösungen und Headless-Software. Außerdem kümmern wir uns um den zuverlässigen Betrieb deiner API-Plattformen.