Beim Skalieren von Containern handelt es sich um mehr, als einfach einen Proxy vor einen Dienst zu setzen und sich dann zurückzuziehen. Zur Skalierung gehört mehr als nur die Verteilung. In der schnelllebigen Welt der Container sind zur Sicherstellung der Skalierbarkeit fünf verschiedene Funktionen erforderlich: Wiederholungsversuche , Leistungsschalter, Erkennung , Verteilung und Überwachung .
In diesem zweiten Beitrag zur Kunst der Container-Skalierung befassen wir uns mit Leistungsschaltern.
Thomas Edison, der bekanntermaßen Tausende von Geräten erfand, die nicht funktionierten, und einige berühmte, die funktionierten, bescherte uns bereits 1879 in einer Patentanmeldung das Konzept eines Leistungsschalters. Ja, Patente gab es schon damals. Während Edisons Version Sicherungen verwendete, die ausgetauscht werden mussten (einige von uns erinnern sich vielleicht noch daran, wie sie in ihren alten Autos verzweifelt danach gesucht haben), sind modernere Versionen so konstruiert, dass sie „auslösen“ und den Stromfluss unterbrechen. Sie können dann zurückgesetzt werden, um den normalen Durchfluss und Betrieb wiederherzustellen.
Im Kontext der Skalierung funktionieren Leistungsschalter nach dem gleichen Prinzip. Sie erkennen einen „Überlauf“ und unterbrechen ihn absichtlich, um eine Überlastung der Dienste am anderen Ende der Verbindung zu vermeiden. Sie können auch zurückgesetzt werden, wodurch anschließend der normale Fluss von Anfragen und Antworten wiederhergestellt wird.
Leistungsschalter sind schon seit geraumer Zeit ein Bestandteil von Proxys zum Lastenausgleich. Dabei galt die Prämisse, dass ein Dienst außer Betrieb ist, wenn er nach X Versuchen immer noch nicht erreichbar ist. Es gibt einen Grund, immer wieder etwas anzufordern, das es Ihnen nicht geben kann, und dadurch werden nur Ressourcen beim Proxy und im Netzwerk verschwendet. Nach einer (normalerweise) konfigurierbaren Anzahl von Fehlern wird ein Proxy die Verbindung „unterbrechen“ und weitere Verbindungsversuche ablehnen.
Dies ist nicht dasselbe wie ein erneuter Versuch, der Vorgang scheint jedoch ähnlich. Bei Wiederholungsversuchen wird davon ausgegangen, dass die Anforderung letztendlich erfolgreich sein wird. Ein Leistungsschalter geht davon aus, dass die Anforderung fehlschlägt, und daher soll eine Verschwendung von Zeit und Ressourcen vermieden werden.
Sobald das Problem behoben ist, kann der Leistungsschalter „zurückgesetzt“ und der normale Durchfluss wiederhergestellt werden.
Anfangs erfolgte dieser Vorgang manuell. Ein Operator musste den Reset durchführen, nachdem sichergestellt war, dass der Zieldienst tatsächlich wieder betriebsbereit war. In den letzten Jahren wurde dieser Prozess durch den Einsatz von Gesundheitsüberwachung automatisiert. Dazu gehören normalerweise regelmäßige Versuche, den Dienst zu erreichen. Bei Erfolg wird der Leistungsschalter zurückgesetzt, um den Normalbetrieb wieder zu ermöglichen.
In einer containerisierten Microservices-Umgebung sind Leistungsschalter aufgrund des hohen Datenverkehrsvolumens von und zu und zwischen den Diensten besonders wichtig. Während manche Fehler schnell erkannt werden, fallen andere erst auf, wenn es aufgrund von Problemen im Netzwerkstapel zu einem längeren TCP-Timeout kommt. Durch Timeouts kommt es zu unerwünschten Latenzen. Daher sollten bei der Unterbrechung der Verbindung und bei erneuten Verbindungsversuchen die allgemeinen Toleranzen (bzw. Intoleranzen) der Anwendung in Bezug auf Latenzen berücksichtigt werden. Bei der Konfiguration solcher Werte müssen Timeout-Werte und die Unternehmenserwartungen hinsichtlich der Leistung berücksichtigt werden. Eine geringe Latenztoleranz kann weniger Wiederholungsversuche und ein schnelleres Unterbrechungsverhalten erfordern.