Netflix zum Erstellen von Diensten, die über Millionen von Benutzern hinaus skalieren

Millionen von Menschen weltweit streamen jeden Monat Videos von Netflix im Wert von mehr als zwei Milliarden Stunden.

In den letzten sieben Jahren ist Netflix von Online-Filmen für einige Tausend Mitglieder zu einem Punkt gewachsen, an dem seine Streaming-Dienste im vergangenen Jahr 34 Prozent des nachgelagerten Spitzenverkehrs in den USA ausmachten.

Für jede Person, die über Netflix Filme oder Fernsehen sieht, liefert der Dienst noch mehr Informationen darüber, was und wie angesehen wird. In diesen Anzeigedaten wird angegeben, welche Titel ein Konto angesehen hat, zu welchem ​​Zeitpunkt jemand die Anzeige eines Titels beendet hat und was zu diesem Zeitpunkt noch auf einem Konto gestreamt wird.

Netflix kann die Milliarden von Instanzen der täglich generierten Anzeigedaten verarbeiten. Das Unternehmen ist jedoch der Ansicht, dass es seine Systeme neu entwickeln muss, um mit der ständig steigenden Nachfrage Schritt zu halten.

"Um auf die nächste Größenordnung zu skalieren, überdenken wir die Grundlagen unserer Architektur", sagte Philip Fisher-Ogden, technischer Direktor bei Netflix, in einem Blogbeitrag.

Microservices

Im Rahmen der Überarbeitung beabsichtigt Netflix, Elemente, die das Anzeigen von Daten verarbeiten, in entkoppelte Komponenten zu zerlegen, die als Microservices bezeichnet werden.

Microservices markieren eine Abkehr vom Erstellen von Anwendungen als monolithische Einheit, z. B. eine serverseitige Anwendung, die HTTP-Anforderungen verarbeitet, Domänenlogik ausführt und Daten aus einer Datenbank abruft und aktualisiert. Der Nachteil des Einbaus dieser verschiedenen Verantwortlichkeiten in eine einzige ausführbare Datei besteht darin, dass für jede kleine Codierungsänderung eine neue Version der serverseitigen Anwendung erstellt und bereitgestellt werden muss.

Im Gegensatz dazu bevorzugt der Microservice-Ansatz die Erstellung einer einzelnen Anwendung als Suite kleiner Services, die jeweils in einem eigenen Prozess ausgeführt werden und mit einfachen Mechanismen kommunizieren, häufig einer HTTP-Ressourcen-API.

Das Erstellen von Anwendungen auf diese Weise bietet zahlreiche Vorteile: Jeder Service kann an genau definierte Geschäftsanforderungen angepasst und neue Instanzen automatisch bereitgestellt werden, wenn die Nachfrage steigt. Da jeder Dienst diskret ist, können sie auch in verschiedenen Programmiersprachen geschrieben werden und auf unterschiedlichen Datenspeichertechnologien basieren. Das Debuggen und Refactoring von Code kann auch einfacher sein, wenn Anwendungen aus Microservices bestehen.

Netflix plant separate Dienste für die Erfassung, Verarbeitung und Bereitstellung von Anzeigedaten mit entkoppelter Kommunikation zwischen Komponenten unter Verwendung von Signalen, die über eine Ereigniswarteschlange gesendet werden.

Polyglotte Persistenz

Die andere architektonische Änderung von Netflix wird eine Verlagerung auf polyglotte Persistenz sein. Dieser Ansatz bedeutet, dass je nach Datentyp oder Verwendungsart unterschiedliche Datenbanken oder Speichertechnologien zum Speichern von Daten verwendet werden. Die Datennutzung kann sich auf verschiedene Weise unterscheiden, z. B. in Bezug auf das gespeicherte Volume oder die maximal zulässige Latenz zum Lesen oder Schreiben dieser Daten in den Speicher. Durch die Polyglot-Persistenz können Daten an eine ergänzende Speichertechnologie angepasst werden.

Netflix wird die Open Source, verteilte NoSQL-Datenbank Cassandra für Schreibvorgänge mit hohem Volumen und geringer Latenz und die Open Source-NoSQL-Datenbank Redis für Lesevorgänge mit hohem Volumen und geringer Latenz verwenden.

Warum ändern?

Laut Fisher-Ogden von Netflix sind die Änderungen auf den Wunsch zurückzuführen, die Schwachstellen in der aktuellen Architektur zu beheben, die auf der Cloud-Plattform Amazon Web Services (AWS) ausgeführt wird.

Derzeit können Netflix-Konten aus dem Speicher verschiedener "Stateful Nodes" - speicheroptimierter R3-Instanzen im EC2-Dienst von AWS - auf ihre neuesten Anzeigedaten zugreifen.

"Der größte Nachteil dieses Ansatzes war, dass ein Ausfall eines einzelnen zustandsbehafteten Knotens verhindern würde, dass ein Fünftel der Mitgliederbasis in ihren Betrachtungsverlauf schreibt oder daraus liest", sagte Fisher-Ogden.

Nach Ausfällen implementierte das Netlix-Team auch eine zustandslose Schicht, mit der veraltete Daten als Fallback abgerufen werden können, wenn ein zustandsbehafteter Knoten nicht erreichbar ist.

Es sind die Komponenten, die in der Stateful-Architektur kombiniert wurden, die Ogden-Fisher im Rahmen des Redesigns als "in Services aufteilen" bezeichnete.

"Wir haben den Anzeigedienst erstellt, um den Bereich der Anzeige, Verarbeitung und Bereitstellung von Daten zu erfassen", sagte er und fügte hinzu, dass der Dienst im Laufe der Zeit mehr Funktionen erhalten hat.

"Diese Komponenten wären einfacher zu entwickeln, zu testen, zu debuggen, bereitzustellen und zu betreiben, wenn sie in ihre eigenen Dienste extrahiert würden."

Wenn Netflix-Benutzer auf diese Stateful-Ebene zugreifen, wird die Nachfrage auf verschiedene Weise zwischen Computern aufgeteilt, wodurch Hotspots entstehen können. Dabei sind bestimmte Computer für das Speichern und Bereitstellen einer unverhältnismäßig hohen Daten- und Anforderungsmenge verantwortlich, was die Latenz und Leistung verschlechtert.

Die Bausteine ​​der Netflix-Architektur der nächsten Generation Image: Netflix

Als Netflix von der Ausführung in einer einzelnen auf mehrere AWS-Regionen, den Standorten, an denen AWS-Services gehostet werden, expandierte, musste das Unternehmen auch einen benutzerdefinierten Mechanismus für die Kommunikation zwischen Stateful Tiers in verschiedenen Regionen erstellen.

"Dies fügte unserem Gesamtsystem eine erhebliche, unerwünschte Komplexität hinzu", sagte Ogden-Fisher.

Wenn es um das Speichern dieser Anzeigedaten geht, verwendet Netflix derzeit Cassandra als primären Datenspeicher für alle persistenten Daten, wobei Memcached über Cassandra als garantierter Pfad mit geringer Latenz zum Lesen von möglicherweise veralteten Daten liegt.

Der Wechsel von memcached zu Redis für Lesevorgänge mit hohem Volumen und geringer Latenz lohnt sich, sagte Ogden-Fisher, da "die erstklassige Datentypunterstützung von Redis Schreibvorgänge besser unterstützen sollte als das Lesen, Ändern und Schreiben in memcached".

"Wir haben die Stateful-Ebene erstellt, weil wir die Speichergeschwindigkeit für unsere Lese- / Schreibanwendungsfälle mit dem höchsten Volumen nutzen wollten", sagte Ogden-Fisher und fügte hinzu, dass Cassandra in seinen Versionen vor 1.0 nicht auf Solid-State-Laufwerken ausgeführt wurde kann Daten unter AWS viel schneller lesen und schreiben als sich drehende Festplatten.

"Wir dachten, wir könnten ein einfaches, aber robustes verteiltes Stateful-System entwerfen, das genau auf unsere Bedürfnisse zugeschnitten ist, haben jedoch eine komplexe Lösung gefunden, die weniger robust ist als ausgereifte Open Source-Technologien."

© Copyright 2021 | pepebotifarra.com