Über ein Jahrzehnt später: Die Entwicklung von Instant Purge™

CTO, Fastly

Staff Software Engineer, Edge-Protokolle

Die sofortige cachen-Invalidierung ist für die dynamische Inhaltsauslieferung unerlässlich. Eilmeldungen, Live-Event-Updates und E-Commerce-Promotions hängen alle davon ab, veraltete Informationen schnell zu bereinigen.
Warum ist Instant Purge™ heute genauso schwer zu lösen wie vor über 10 Jahren, als wir es in Angriff genommen haben? Nun, moderne Edge-Netzwerke sind weltweit verteilt. Die Sicherstellung einer nahezu gleichzeitigen Invalidierung über alle diese Cache Nodes hinweg ist keine leichte Aufgabe. Wir müssen Invalidierungsereignisse innerhalb von Millisekunden an jeden aktiven Knoten übermitteln. Außerdem gibt es ein ständiges Jonglieren zwischen Zuverlässigkeit, Geschwindigkeit, Skalierung und Reichweite. Wir müssen die Latenz minimieren, ohne die Konsistenz des Caches zu beeinträchtigen, und gleichzeitig die Leistung so steigern, dass sie wirklich „sofort“ ist. Das ist eine große Aufgabe. Kein Wunder, dass es über ein Jahrzehnt gedauert hat, bis andere versucht haben, aufzuholen.
Zentralisieren oder Dezentralisieren?
Als wir dieses Problem vor vielen Jahren angingen, erkannten wir, dass es zwei Hauptansätze gibt, um es zu lösen: zentralisiert oder dezentralisiert. Die typische Lösung besteht darin, Bereinigungsanforderungen an ein zentrales System zu senden, das dann die Entfernung von Inhalten aus Caches weltweit koordiniert. Obwohl diese Methode einfach erscheinen mag, führt sie zu einem Single Point of Failure und erhöhter Latenz – kaum ideal, um sofortige Ergebnisse zu erzielen.
Wir haben begonnen, diese Herausforderung anders zu betrachten. Anstatt uns auf eine zentralisierte Befehlsstruktur zu verlassen, fragten wir uns: Was wäre, wenn wir das Löschen als ein verteiltes Nachrichtenproblem betrachten würden, das dezentral gelöst werden könnte? Warum sollten Sie die Bereinigungsanfragen nicht am Rand abfangen und die Logik direkt dort nutzen, um sie schnell zu verteilen, anstatt sie an eine zentrale Stelle zu schicken?
Nun, dieser dezentrale Ansatz ist nicht ohne seine Herausforderungen. Der Build ist schwieriger und erhöht die Komplexität. Server könnten vorübergehend den Kontakt zueinander verlieren, oder Nachrichten könnten während des Transits verloren gehen oder verzögert werden. Aber wir haben einen Weg gefunden, das zu lösen.
Wie funktioniert Instant Purge™?
Wir haben unser System auf einem Algorithmus namens Bimodal Multicast basiert. Es ist schnell, verständlich und garantiert, dass Nachrichten schließlich ausgeliefert werden. Praktisch gesehen funktioniert es folgendermaßen: Wenn ein Cache-Server eine Bereinigungsanforderung erhält, sendet er die Nachricht sofort per UDP an alle anderen Server. Bei typischen Paketverlustraten von unter 0,1 % zwischen unseren POPs wird die Bereinigung-Latenz oft nur durch die Netzwerkverzögerung begrenzt.
Ein Schlüsselkonzept unseres Systems: Wir verlangen keine Bestätigung für Bereinigungsnachrichten. Indem wir diesen Schritt überspringen, können wir die Latenz um bis zur Hälfte reduzieren. Wir versuchen auch nicht, beim Routing zu clever zu sein. Stattdessen verbreiten wir die Bereinigung überall. Dies mag ineffizient erscheinen, aber es vereinfacht die Dinge tatsächlich. Alle unsere Knoten sind gleichermaßen in der Lage, denselben Traffic zu bedienen. Das bedeutet, dass wir Bereinigungsanforderungen überallhin senden können, ohne komplexe Karten der Inhaltsstandorte verwalten zu müssen. Es ist ein einfacherer, robusterer Ansatz, der sich gut in der Skalierung verhält, wenn unser Netzwerk wächst.
Unser Ansatz zur Netzwerkarchitektur verschafft uns ebenfalls einen Vorteil: Wir haben unsere POPs für maximalen Edge-Cache-Storage und intelligentere programmgesteuerte Kontrolle entwickelt. Indem wir absichtlich weniger, aber leistungsfähigere POPs betreiben, verringern wir die Komplexität unseres Netzwerks und minimieren die Anzahl der Server, die Bereinigungsnachrichten empfangen müssen. Diese architektonische Entscheidung bietet erhebliche Advantages für die sofortige Bereinigung. Außerdem ermöglicht uns unser softwaredefiniertes Netzwerk, unser Reinigungssystem in Echtzeit anzupassen und zu optimieren, ohne durch Hardwarebeschränkungen eingeschränkt zu sein.
Wie hat sich das entwickelt?
Jetzt fragen Sie sich sicher: „Hat sich dieses System gut skaliert?“ Hat es weiterhin gut funktioniert, als wir immer mehr Kunden und Traffic hinzugefügt haben? Hat sich Ihr Ansatz als erfolgreich herausgestellt?“ Nun, die kurze Antwort lautet: Ja… Wie wir es von unserem ursprünglichen Entwurf her erwartet hatten, mussten wir unser Bereinigungssystem iterieren, um den Traffic, den wir bewältigen können, zu erhöhen und weiterhin zu skalieren. Im Laufe der Zeit sind wir von 2.000–3.000 Bereinigungen pro Sekunde im Jahr 2018 auf etwa 60.000 Bereinigungen pro Sekunde heute gestiegen. Als wir Bimodal Multicast zum ersten Mal implementierten, stammte es fast direkt aus den akademischen Abhandlungen, aber es gab Skalierungslimits. Im Laufe der Zeit ist unser System zu unserem eigenen geworden und ist nicht mehr wirklich reines Bimodal Multicast mehr.
Im Laufe der Jahre gab es drei Zeitpunkte, an denen wir Optimierungen und Änderungen an der Art und Weise vorgenommen haben, wie wir die Bereinigung durchführen. Einige Jahre nach der ursprünglichen Einführung unserer Bereinigungsfunktion stießen wir auf Skalierungs- und Zuverlässigkeitsprobleme, als wir unser Netzwerk erweiterten und mit den allgegenwärtigen Alltagsprobleme des Internets zu kämpfen hatten. Ursprünglich haben wir alle Knoten in einem POP als gleichrangige Peers ohne Hierarchie eingerichtet, wobei jeder Knoten jede Bereinigungsanforderung erhielt und die Aufgabe hatte, Pakete an alle anderen Knoten zu verteilen. Um die Skalierung bei steigender Knotenzahl und die Zuverlässigkeit in Bezug auf Paketverluste durch Alltagsprobleme des Internets zu optimieren, überlegten wir: Anstatt Bereinigungsnachrichten an alle Knoten in einem POP zu senden, könnten wir sie an einen Knoten senden und ihn die Nachrichten an die restlichen Knoten im POP weiterleiten lassen.
Dadurch konnten wir unsere Skalierung erheblich steigern und die Gesamtzahl der Betrieb reduzieren. Bereinigungsanforderungen werden in UDP-Pakete gekapselt, die an mindestens zwei fehlerfreie Knoten an jedem POP des Clusters übermittelt werden, die die Pakete dann an benachbarte Knoten im lokalen Netzwerk weiterleiten. Dieser "double-delivery"-Mechanismus ist unsere erste Layer der Zuverlässigkeit und verringert erheblich die Wahrscheinlichkeit, dass eine Anforderung während des Transits aufgrund von Alltagsprobleme des Internets verloren geht.
Und schließlich haben wir letztes Jahr an der Batch-Bereinigung gearbeitet, die enorme Auswirkungen auf die Skalierbarkeit hatte (und Benachrichtigungen beseitigt hat, die einige von uns nachts weckten!). Unsere API hat es Kunden schon immer ermöglicht, eine Batch-Bereinigung mit einer Reihe von Surrogate Keys durchzuführen, aber das war keine echte „Batch-Bereinigung“. Das System würde den Stapel in einzelne Bereinigungen aufteilen, die bei großen Mengen das System überfluten könnten, was uns alarmiert und uns zwingt, Rate Limiting anzuwenden, um die Performance nicht zu beeinträchtigen. Nicht ideal für unsere Kunden oder für uns. Also haben wir das System so modifiziert, dass es echtes und wahres Batch-Purging abwickelt, was die Skalierbarkeit verbessert und Benachrichtigungen sowie manuelles Rate Limiting eliminiert. Wir sind jetzt zuversichtlich, dass wir auf Hunderttausende von Bereinigungen pro Sekunde skalieren können.
Die Zukunft von Instant Purge
Mit Blick auf die Zukunft arbeiten wir daran, unser Bereinigungssystem noch leistungsfähiger und skalierbarer zu gestalten, und zwar immer, bevor wir es benötigen. Wir möchten der Nachfrage stets einen Schritt voraus sein, mit dem 10-fachen der Kapazität, die wir aktuell benötigen. Unser Ziel ist es, die Kapazität von Hunderttausenden von Anfragen pro Sekunde auf Millionen pro Sekunde zu erhöhen, und wir sind überzeugt, dass wir die bereits implementierten Optimierungen und Techniken zur Gruppierung von Elementen erweitern können, um die nächste Stufe der Performance und Skalierung zu erreichen. Es ist ein kontinuierlicher Innovationsprozess, um den wachsenden Anforderungen stets einen Schritt voraus zu sein.
Letztendlich geht es darum, eine dynamische Architektur zu schaffen, die sich an verändernde Anforderungen anpassen und skalieren kann. Indem wir das Problem anders angehen und auf Dezentralisierung setzen, haben wir ein System geschaffen, das das Versprechen einer wirklich sofortigen Bereinigung ausliefern. Dieser Artikel enthält „zukunftsgerichtete“ Aussagen, die auf den Überzeugungen und Annahmen von Fastly sowie auf Informationen beruhen, die Fastly zum Zeitpunkt der Veröffentlichung dieses Artikels zur Verfügung standen. Zukunftsgerichtete Aussagen können bekannte und unbekannte Risiken, Ungewissheiten und andere Faktoren beinhalten, die dazu führen können, dass unsere tatsächlichen Ergebnisse, Leistungen oder Errungenschaften erheblich von denjenigen abweichen, die in den zukunftsgerichteten Aussagen zum Ausdruck gebracht oder impliziert wurden. Diese Aussagen umfassen unter anderem Aussagen über die zukünftige Produkt Performance und unsere Vision und Ziele für zukünftigen Betrieb. Sofern nicht gesetzlich vorgeschrieben, übernimmt Fastly keine Verpflichtung, diese zukunftsgerichteten Aussagen öffentlich zu aktualisieren oder die Gründe zu aktualisieren, aus denen die tatsächlichen Ergebnisse wesentlich von den in den zukunftsgerichteten Aussagen erwarteten abweichen könnten, selbst wenn in Zukunft neue Informationen verfügbar werden. Wichtige Faktoren, die dazu führen könnten, dass die tatsächlichen Ergebnisse von Fastly erheblich abweichen, werden von Zeit zu Zeit in den Berichten, die Fastly bei der Securities and Exchange Commission (SEC) einreicht, detailliert beschrieben, so auch in unserem Jahresbericht auf Formular 10-K für das am 31. Dezember 2024 endende Geschäftsjahr und in unseren Quartalsberichten auf Formular 10-Q. Kopien der bei der SEC eingereichten Berichte werden auf der Fastly Website veröffentlicht und sind bei Fastly kostenlos erhältlich.