Die Anforderungen: Eine praktische Lösung, die für Clouds oder jede Art von Umgebung geeignet ist, in der kein Zugriff auf Hardware-Load-Balancer, BGP-Protokolle und all diese Dinge möglich ist.
Die Nummer der Einkommensanfrage einer Anwendung ist unbekannt, sollte jedoch hoch genug sein, um eine erhöhte Lasterwartung ohne Angst zu erfüllen.
Lassen Sie uns eine Anwendung mit ähnlicher Last finden, z. B. Protokollierungsspeicher und Such-App. Ich habe einen gefunden .
Was sie wollen:
- Verteilen Sie die Last auf die Kollektoren
- Bieten Sie Fehlertoleranz, damit wir weiterhin Daten erfassen können, wenn einer der Kollektoren stirbt oder Probleme auftreten
- Skalieren Sie horizontal mit dem Wachstum unserer Protokollvolumina
Was haben sie versucht und über ELB gelernt:
- Funktioniert nicht wie erwartet
- Latenzprobleme aufgrund erhöhter Last
- Nicht genügend Überwachungsmöglichkeit
- Zu viele Einschränkungen (offene Ports und Protokollnummer)
Warum haben sie sich für Route53 entschieden:
- "Round Robin ist ein ziemlich einfacher Lastausgleich, aber unter Effizienzgesichtspunkten funktioniert er gut für uns."
- "Wir nutzen die Route 53-Failover-Integritätsprüfungen."
- "Wenn es ein Problem mit einem Sammler gibt, wird es von Route 53 automatisch aus dem Dienst genommen. Unsere Kunden sehen keine Auswirkungen."
- Bei Route 53 ist kein Vorwärmen erforderlich
Die Route 53 erwies sich für Loggly als die beste Möglichkeit, unsere Hochleistungssammler zu nutzen, da das Holzvolumen, die unvorhersehbaren Schwankungen und das stetige Wachstum unseres Geschäfts enorm sind. Es entspricht den Hauptzwecken der Kollektoren: Daten mit verlustfreier Netzwerkleitungsgeschwindigkeit zu erfassen und von der Elastizität aller AWS-Services zu profitieren, die wir bei Loggly verwenden.
Dieses spezielle Beispiel zeigt, dass in einigen Szenarien (Protokollkollektor, Werbedienst oder ähnliches) der Load Balancer redundant ist und die "DNS-Health-Check-Round-Robin-Lösung" ihre Aufgabe sehr gut erfüllt.
Mal sehen, was AWS zum DNS-Failover sagt :
Mit DNS Failover kann Route 53 einen Ausfall Ihrer Website erkennen und Ihre Endbenutzer an von Ihnen angegebene alternative oder Sicherungsspeicherorte umleiten. Route 53 DNS-Failover basiert auf Integritätsprüfungen, bei denen regelmäßig Internetanforderungen an Ihre Anwendungsendpunkte von mehreren Standorten auf der ganzen Welt gestellt werden, um festzustellen, ob jeder Endpunkt Ihrer Anwendung aktiv oder inaktiv ist.
Diese Technik macht ELB (nicht erforderlich, nur für eine Notiz) robuster, wiederum basiert es auf RR + Health Check:
Route 53 DNS-Failover behandelt alle diese Fehlerszenarien durch Integration in ELB hinter den Kulissen. Nach der Aktivierung konfiguriert und verwaltet Route 53 automatisch Integritätsprüfungen für einzelne ELB-Knoten.
Mal sehen, wie es hinter den Kulissen funktioniert . Die offensichtliche Frage ist, wie mit DNS-Caching umgegangen werden soll:
Das DNS-Caching kann hier jedoch immer noch ein Problem sein (siehe unseren vorherigen Beitrag, in dem das "Long Tail" -Problem behandelt wird), wenn TTL nicht von allen Ebenen zwischen Ihrem Client und Route 53 eingehalten wird. Sie können dann eine "Cache Busting" -Technik anwenden: Senden Sie eine Anfrage an eine eindeutige Domain
("http://<unique-id>.<your-domain>")
und definieren Sie eine Platzhalterressource
Record "*.<your-domain>" to match it.
Algolia hat eine "Client-Wiederholungsstrategie" eingeführt, die ziemlich gut funktioniert, wenn Ihr Client (in Ihrem Fall JS) damit umgehen kann:
Am Ende haben wir eine grundlegende Wiederholungsstrategie in unseren API-Clients implementiert. Jeder API-Client wurde entwickelt, um auf drei verschiedene Computer zugreifen zu können. Jeder Benutzer wurde von drei verschiedenen DNS-Einträgen repräsentiert: USERIDID-1.algolia.io, USERID-2.algolia.io und USERID-3.algolia.io. Unsere erste Implementierung bestand darin, einen der Datensätze zufällig auszuwählen und im Fehlerfall erneut mit einem anderen zu versuchen.