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 Beitrag zur Kunst der Container-Skalierung befassen wir uns mit der Überwachung.
Überwachung. In einer Zeit, in der scheinbar jeder auf alles hört und/oder alles beobachtet, von unserer Fahrgeschwindigkeit bis hin zu dem, was in unserem Kühlschrank ist, hinterlässt dieses Wort bei vielen einen üblen Nachgeschmack. Wir können stattdessen das Wort „Sichtbarkeit“ verwenden – und tun dies auch oft –, aber diese semantische Sophisterei ändert nichts an unserem Tun: Wir beobachten die Situation genau.
Beim Skalieren kommt es ausschließlich auf die Überwachung an; Sie müssen den Status der Ressourcen kennen, auf die Sie die Anfragen verteilen. Das Senden einer Anfrage an eine „tote Zone“, weil die Ressource abgestürzt ist oder vor Kurzem abgeschaltet wurde, ist vergleichbar mit dem Einbiegen in eine Sackgasse ohne Steckdosen. Es ist Zeitverschwendung.
Überwachung gibt es in vielen Varianten. Es gibt die „Kann ich Sie erreichen“-Überwachung eines Pings auf der Netzwerkebene. Es gibt die „Bist du zu Hause“-Überwachung einer TCP-Verbindung. Und dann gibt es noch die HTTP-Anfrage „Öffnen Sie die Tür?“. Dann gibt es noch die „Hast du schon deinen Kaffee getrunken“-Überwachung, die feststellt, ob der Dienst richtig antwortet oder nicht.
Neben der bloßen Überprüfung des Zustands und der Ausführung eines Dienstes geht es auch um eine Leistungsüberwachung. Wie schnell der Service geantwortet hat, ist entscheidend, wenn Sie Anfragen basierend auf Antwortzeiten verteilen. Plötzliche Leistungsänderungen können auf Probleme hinweisen, daher handelt es sich um historisch bedeutsame Daten, die ebenfalls überwacht werden müssen.
Es gibt aktives Monitoring (lassen Sie mich Ihnen eine echte Anfrage senden!), synthetisches Monitoring (lassen Sie mich Ihnen eine vorgetäuschte Anfrage senden) und passives Monitoring (ich sitze einfach hier und beobachte, was mit einer echten Anfrage passiert). Alle haben Vor- und Nachteile, und alle sind gültige Überwachungsmethoden. Entscheidend ist, dass der Proxy den Status bestimmen kann: Ist es aktiv? Ist es inaktiv? Hat es zusammen mit Elvis das Gebäude verlassen?
Erreichbarkeit, Verfügbarkeit und Leistung sind alles Aspekte der Überwachung und notwendig, um Skalierbarkeit sicherzustellen. Das heißt, es geht nicht nur um die Überwachung, sondern darum, sicherzustellen, dass die Lastausgleichs-Proxys über aktuelle Informationen zum Status jeder Ressource verfügen, an die sie möglicherweise eine Anforderung weiterleiten.
Wenn Sie über die Natur von Containern und die Neigung nachdenken, sie mit einer auf Mikroservices basierenden Architektur zu koppeln, können Sie erkennen, dass die Überwachung schnell zu einem Albtraumvorstellung wird. Das liegt daran, dass Forward- (und Sidecar-)Proxys das beliebteste Modell zum Lastausgleich in Containerumgebungen sind. Beides erfordert, dass jeder Knoten über den Zustand und die Funktionsfähigkeit jeder Ressource informiert ist, an die er möglicherweise eine Anfrage senden muss. Das bedeutet, dass praktisch jede Ressource überwacht werden muss.
Sie können sich vorstellen, dass es nicht wirklich effizient ist, wenn eine bestimmte Ressource ihre eigenen begrenzten Ressourcen darauf verwendet, fünfzehn oder zwanzig Forward-Proxys hinsichtlich ihres Status zu antworten. Die Überwachung in einem solchen Modell wirkt sich erheblich negativ auf Leistung und Kapazität aus, was die Skalierung noch schwieriger macht.
Noch nie zuvor hatte die Überwachung einen so großen Einfluss auf die Skalierung, wie wir es bei Containern sehen.
Und doch ist es – wie oben erwähnt – von entscheidender Bedeutung, denn wir möchten, wenn möglich, keine Zeit mit Sackgasse-Ressourcen verschwenden.
Die Herausforderungen der erforderlichen Überwachung sind einer der Gründe, warum das Service Mesh als zukünftiges Skalierungsmodell in Containerumgebungen immer beliebter wird (und an Bedeutung gewinnt).
Denn die Überwachung ist zwar keine Option, sollte aber auch keine Belastung darstellen.