TL; DR: Redundant, modular erstellen; Verfügbarkeit prüfen; genau überwachen.
Nachdem ich erkannt habe, dass der Versuch, eine Erklärung einzudrücken, sehr lange dauern kann, werde ich alle Beobachtungen aufschreiben, die ich gemacht habe.
Die Prämisse in Frage stellen
Cloud-System ist Allheilmittel
Selbst wenn Sie bei einem Top-Cloud-Anbieter vollständig auf die Cloud umsteigen möchten, müssen Sie Ihre Anwendung grundsätzlich auf Ausfallsicherheit ausrichten. AWS ersetzt möglicherweise Ihre VM, Ihre Anwendung sollte jedoch neu gestartet werden können, wenn sie sich mitten in der Berechnung befindet.
Wir wollen wegen x / y / z kein Cloud-System verwenden
Wenn Sie kein sehr großes Unternehmen sind, sind Sie mit Cloud-Systemen besser dran. Top-3-Cloud-Systeme (AWS, MSFT, Google) beschäftigen Tausende von Ingenieuren, um Ihnen versprochene SLAs und das einfach zu verwaltende Dashboard zu bieten. Es ist eigentlich ein gutes Geschäft, sie zu verwenden, anstatt einen Cent für dieses Inhouse auszugeben.
Probleme bei Umfang und Design
Das Definieren, Quantifizieren und anschließende kontinuierliche Messen der Verfügbarkeit eines Dienstes ist eine größere Herausforderung als das Schreiben einer Lösung für Verfügbarkeitsprobleme.
Das Definieren und Messen der Verfügbarkeit ist schwieriger als erwartet
Mehrere Stakeholder haben unterschiedliche Ansichten zur Verfügbarkeit, und was passieren kann, ist die Definition, die von einer Person mit dem höchsten Gehalt bevorzugt wird, die andere Definition übertrifft. Dies ist manchmal eine korrekte Definition, aber oft ist das Ökosystem nicht darauf ausgelegt, dasselbe zu messen, da diese ideale Definition sehr schwierig zu messen ist, geschweige denn in Echtzeit zu überwachen. Wenn Sie eine Definition der Verfügbarkeit haben, die nicht in Echtzeit überwacht werden kann, werden Sie feststellen, dass Ihr selbst durchgeführtes ähnliches Projekt immer wieder unheimliche Ähnlichkeiten aufweist. Halten Sie sich an etwas, das Sinn macht und das leicht überwacht werden kann.
Die Menschen unterschätzen die Komplexität des immer verfügbaren Systems.
Um den Elefanten im Raum anzusprechen, lassen Sie mich Folgendes sagen: "Kein Multi-Computer-System ist zu 100% verfügbar, möglicherweise in Zukunft, aber nicht mit der aktuellen Technologie." Hier beziehe ich mich nach der aktuellen Technologie auf unsere Unfähigkeit, Signale schneller als mit Lichtgeschwindigkeit und dergleichen zu senden. Alle Comp-Sci-Ingenieure, die ihr Geld wert sind, kennen die Einschränkungen des verteilten Rechnens , und die meisten von ihnen werden dies in Besprechungen nicht erwähnen, weil sie befürchten, dass sie wie Noobs aussehen werden. Um all diejenigen auszugleichen, die die Einschränkungen des verteilten Rechnens nicht erwähnen, werde ich sagen, dass es kompliziert ist, aber Computern nicht immer vertraut .
Die Leute überschätzen die Fähigkeiten ihres Ingenieurs
Leider fällt die Verfügbarkeit in die Kategorie, in der Sie nicht wissen, was Sie wollen, aber wissen, was Sie nicht wollen. Es ist etwas kniffliger, die Kategorie "Kenne die Wünsche" wie die Benutzeroberfläche zu kennen. Es erfordert ein wenig Erfahrung und viel Lesen, um aus den Erfahrungen anderer zu lernen und vieles mehr.
Aufbau eines verfügbaren Systems von Grund auf
Stellen Sie sicher, dass Sie jedem Architektur- und Designteam die richtige Priorität der Verfügbarkeit als Systemanforderung mitteilen.
Attribute des Systems, die die Verfügbarkeit unterstützen
Folgende Systemmerkmale haben nachweislich zur Systemverfügbarkeit beigetragen:
Redundanz
Einige Beispiele hierfür sind, niemals nur eine einzige VM hinter einem VIP zu haben oder niemals nur eine einzige Kopie Ihrer Daten zu speichern. Dies sind die Fragen, die eine gute IAAS für Sie leichter zu lösen erleichtert, aber Sie müssen diese Entscheidungen noch treffen.
Modularität
Ein modularer REST ist besser als eine monolithische SOA. Ein noch modularer Mikroservice ist tatsächlich verfügbarer als der übliche HATEOS REST . Die Argumentation finden Sie in der Ertragsdiskussion im nächsten Abschnitt. Wenn Sie eine Stapelverarbeitung durchführen, ist es besser, eine Stapelverarbeitung in einer angemessenen Charge von 10 Sekunden durchzuführen, als mit einer Charge von 1.000.000.
Elastizität
"I am always angry"
- Hulk
Ein ausfallsicheres System ist immer zur Wiederherstellung bereit. Diese Ausfallsicherheit gilt für Instanzen wie das Bestätigen von ACK für einen Schreibvorgang erst nach dem Schreiben auf eine RAID-Festplatte und möglicherweise über mindestens zwei Rechenzentren. Ein weiterer aktueller Trend ist die Verwendung konfliktfreier Datenstrukturen , bei denen die Datenstruktur die Verantwortung für die Lösung von Konflikten übernimmt, wenn zwei verschiedene Versionen angezeigt werden. Ein System kann nachträglich nicht belastbar sein, es muss vorhergesagt und eingebaut werden. Ein Ausfall ist langfristig garantiert, daher sollten wir immer auf einen Plan zur Wiederherstellung vorbereitet sein.
Log Trail
Dies ist technisch gesehen ein Subtyp von Resilience, aber ein ganz besonderer, da alle Funktionen erfasst werden. Trotz aller Bemühungen können wir das Muster der Nichtverfügbarkeit möglicherweise nicht vorhersagen. Wenn möglich, führen Sie genügend Protokollspuren der Systemaktivitäten, um Systemereignisse wiedergeben zu können. Auf diese Weise können Sie sich zu hohen manuellen Kosten von unvorhergesehenen Situationen erholen.
Attribute der Verfügbarkeit
Die nicht erschöpfende Top-of-Mind-Attributliste "Verfügbarkeit": Nehmen wir zur Diskussion an, die Frage, die der Benutzer stellt, lautet: "Wie viele Artikel habe ich in meinem Warenkorb?"
Richtigkeit
Haben Sie müssen eine möglichst genaue Antwort produzieren , oder ist es in Ordnung , Fehler zu machen? Nur als Referenz: Wenn Sie Geld am Geldautomaten abheben, kann nicht garantiert werden, dass es korrekt ist. Wenn die Bank feststellt, dass ein Fehler aufgetreten ist, können Sie die Transaktionen möglicherweise rückgängig machen. Wenn Ihr System Primzahlen erzeugt, möchten Sie wahrscheinlich immer die richtigen Antworten.
Ausbeute
Überspringen Sie diesen Punkt, wenn Sie die Frage zum vorherigen Thema immer richtig beantwortet haben. Manchmal muss die Antwort auf Fragen nicht präzise sein, z. B. wie viele Freunde habe ich gerade auf Facebook? Es wird jedoch erwartet, dass die Antwort die ganze Zeit im Stadion +/- 1 liegt. Wenn Sie das erwartete Ergebnis erzielen, beträgt Ihre Ausbeute 100.
Konsistenz
Ihre Antwort mag zu einem bestimmten Zeitpunkt richtig sein, aber bis das Licht den Bildschirm verlassen und in die Netzhaut des Betrachters eingedrungen ist, könnten sich die Dinge geändert haben. Macht es Ihre Antwort falsch? Nein, es macht es nur inkonsistent. Die meisten Anwendungen sind letztendlich konsistent, aber der Trick besteht darin, zu definieren, welche Art von Konsistenzmodell Ihre Anwendung bereitstellen wird. Durch Zufall kann Ihre Anwendung auf einem einzelnen Computer ausgeführt werden. Sie können diese schöne Lektüre des CAP-Theorems überspringen .
Kosten
Viel hängt davon ab, welche Auswirkungen kurzfristige Auswirkungen (Umsatzverlust) und langfristige Auswirkungen (schlechter Ruf, Kundenbindung) insgesamt haben. Je nach Kundentyp (Bezahlen / Kostenlos, Wiederholen / Einzigartig, Gefangen) und Ressourcenverfügbarkeit sollten unterschiedliche Verfügbarkeitsgarantien eingebaut werden.
Auf dem Weg zur Verbesserung der Verfügbarkeit eines bestehenden Systems
Das Betriebsmanagement einzelner Maschinen und eines Netzwerks ist so komplex, dass ich davon ausgehe, dass Sie es dem Cloud-Anbieter überlassen haben oder bereits kompetent genug sind, um zu wissen, was Sie tun. Ich werde andere Themen unter Verfügbarkeit berühren. Für die langfristige Strategie Define-Measure-Analyze-Control ist ein himmlisches Spiel, etwas, das ich selbst gesehen habe.
- Definieren Sie, was für Ihre Stakeholder verfügbar ist
- Wie werden Sie messen, was Sie definiert haben?
- Ursachenanalyse Engpässe zu identifizieren
- Aufgaben für Verbesserungen
- Kontinuierliche Überwachung ( Kontrolle ) des Systems
Ursachen der Nichtverfügbarkeit
Da wir uns einig waren, dass das Betriebsmanagement, das jedes physische Infrastrukturmanagement abdecken würde, von Fachleuten durchgeführt werden sollte, werde ich der Vollständigkeit halber andere Ursachen für die Nichtverfügbarkeit ansprechen. Die IMO-Verfügbarkeit sollte auch das Fehlen eines erwarteten Verhaltens beinhalten. Wenn dem Benutzer die erwartete Erfahrung nicht angezeigt wird, ist etwas nicht verfügbar. In Anbetracht dieser umfassenden Definition kann Folgendes zur Nichtverfügbarkeit führen: - Codefehler - Sicherheitsvorfälle - Leistungsprobleme