Vorteile von Skalierung

Autor: Adrian Schweizer, Datum: 22. August 2022

Eine skalierbare IT Infrastruktur ist oft eines der Hauptziele bei einer Cloud-Transformation. In diesem Blog-Post sollen verschiedene Situationen aufgezeigt werden, in welchen eine skalierbare Infrastruktur von Vorteil sein kann. Zusätzlich wird jeweils noch erläutert, wie eine ausschliesslich auf Serverless-Diensten basierte Infrastruktur in der jeweiligen Situation abschneidet.

Tag/Nacht Zyklus

Graph, welcher die Anzahl Requests pro Sekunde über eine Periode von 24h auf ein lokales Webshop darstellt Viele lokale Webseiten zeigen eine tägliche Lastkurve auf, die eine grosse Spanne zwischen dem Minimal- und dem Maximalwert aufweist. Oft läuft in der Nacht fast gar nichts und am Abend zwischen 17 und 22 Uhr passieren fast die Hälfte aller Zugriffe. Ein einzelner Webserver ist also entweder während geraumer Zeit am Däumchen drehen oder kann dann in der Hauptphase des Betriebs nicht mehr alle Anfragen bedienen. Da man die zweite Situation natürlich möglichst vermeiden möchte, muss stets dafür gesorgt werden, dass die maximale Tageslast abgedeckt ist. Man sieht leicht, dass im gezeigten Diagramm ein Server, welcher die Maximallast abdecken könnte, mind. die Hälfte seiner Rechenleistung nicht nutzen würde. Tatsächlich wäre dieser Wert noch höher, da man natürlich nach oben noch etwas Luft einplanen sollte.

Um die tägliche Lastschwankung besser abzudecken, empfiehlt es sich, horizontale Skalierung (Anzahl Instanzen in der Flotte erhöhen) einzusetzen. Vertikale Skalierung (Grösse der Instanzen erhöhen) wäre theoretisch auf AWS auch möglich, empfiehlt sich hier aber nicht, da die Instanzgrösse immer um den Faktor 2 wächst oder schrumpft, und somit die Lastkurve nicht optimal abgedeckt werden kann.

Falls auf eine Serverless Architektur gesetzt wird, kann die Lastkurve noch granularer angenähert werden. Dies liegt daran, dass EC2 Instanzen auch für angebrochene Stunden den vollen Preis kosten, und es somit keinen Sinn macht, zeitlich viel schneller aufzulösen. Die Serverless-Dienste wie z.B. AWS Lambda hingegen werden nur für die tatsächliche Nutzung abgerechnet, und können somit sekundenschnell auf Lastwechsel reagieren.

Lastschwankungen aufgrund wechselnder Popularität

Graph, welcher die Anzahl Requests pro Tag über eine Periode von einem Monat auf ein lokales Webshop darstellt Diese meist langsamen und gleichmässigen Wechsel der Zugriffe können im Prinzip auch in normalen Rechenzentren durch regelmässiges Austauschen der Hardware ausgeglichen werden. Allerdings wird wegen abnehmender Last ein Hardwareverkäufer den nun zu leistungsfähigen Server vermutlich nicht zurücknehmen. Auch gemietete Server sind meist zeitlich an längere Perioden gebunden und somit nicht wirklich geeignet, um an abnehmende Last zeitnah angepasst werden zu können. Ebenfalls ist es natürlich so, dass die Granularität einer solchen Skalierung relativ schlecht ist, da es sich aufgrund von Platz und Anschlüssen nicht lohnt, mit kleinsten Servereinheiten zu arbeiten.

Auf AWS kann man langfristige Lastschwankungen sowohl mit virtuellen Instanzen, als auch Serverless sehr granular folgen. Im ersten Fall eignet sich dabei eine Kombination aus horizontaler und vertikaler Skalierung, damit man einerseits eine gute Granularität hinbekommt, und gleichzeitig mit Reserved Instances von grossen Kostenersparnissen profitieren kann.

Die Serverless-Dienste von Amazon könnten langfristige Lastbewegungen eigentlich auch gut abdecken, und können im Gegensatz zu der Lösung mit virtuellen Instanzen auch nahtlos bis auf 0 runterfahren, ohne ihre (Hoch-)Verfügbarkeit einzubüssen. Da die Grundkosten für Serverless-Dienste allerdings höher sind, lohnt sich deren Einsatz nicht um ausschliesslich langfristige Schwankungen abzudecken. Wenn man allerdings sowieso schon aus anderen Gründen auf Serveless setzt, dann muss man sich um langfristige Laständerungen auch keine Gedanken machen.

Kurzfristige Lastspitzen aufgrund spezieller Ereignisse

Graph, welcher die Anzahl Requests pro Tag über eine Periode von 12 Tagen auf ein lokales Webshop darstellt Wer schon etwas länger in der IT-Welt unterwegs ist, kann sich vielleicht noch an den Slashdot-Effekt erinnern. Heute müsste es wohl eher Twitter-Effekt heissen. Damit ist gemeint, dass die Last auf eine Webseite innerhalb kurzer Zeit um einen grossen Faktor steigen kann, weil ein anderer populärer Dienst einen Link dazu verbreitet hat. Eine kurzfristige Lastspitze kann auch durch die Effekte eigener Marketingbemühungen oder externer Faktoren wie Black Friday usw. entstehen. Webseiten, die nicht auf solche Lastspitzen vorbereitet sind, stellen dabei den Dienst während der Dauer der Spitze oft nahezu vollständig ein, was neben den finanziellen Ausfällen auch zu einem grossen Imageschaden führen kann.

Je nach Grösse der Lastspitze kann es auch auf AWS mit einem einfachen Skalierungsplan eng werden. Es gibt nämlich standardmässig ein Limit für gleichzeitig laufende Instanzen pro Region (eigentlich ein vCPU Limit). Wenn man dieses Limit nicht im Vorfeld hat anheben lassen, kann es sein, dass der Slashdot-Effekt die skalierten Instanzen überlastet. Selbst wenn man dies gemacht hat, kann es sein, dass viele Anfragen nicht beantwortet werden können, denn es gibt beim Start einer neuen Instanz eine kurze Periode, während welcher sie hochfährt und vorbereitet wird, und noch keine Anfragen bedient werden. Ausserdem ist das Intervall, mit welchem Metriken, die für eine Skalierungsentscheidung verwendet werden können, mit einer Minute relativ lang. Wegen diesen Faktoren können auch mit dem besten auf EC2 Instanzen basierenden Skalierungsplan extreme Lastspitzen nicht vollständig abgedeckt werden.

Eine ganz auf Serverless-Dienste ausgerichtete Infrastruktur kommt auch mit sehr grossen Lastspitzen gut zurecht. Auch hier gibt es natürlich Verzögerungen, wenn skaliert werden muss, doch diese können viel kürzer gehalten werden, was bedeutet, dass eine Serverless Webapp viel schneller wachsen und schrumpfen kann, als jede andere hier beschriebene Lösung.

Ist es wirklich so einfach?

Dieser Artikel hat die Thematik auf einer stark vereinfachten Stufe betrachtet. In einem konkreten Fall gibt es natürlich noch einige weitere Faktoren zu berücksichtigen, welche die obigen Erkenntnisse völlig verändern können. Wenn eine Lastspitze z.B. fast ausschliesslich statische Ressourcen abfragt, kann bereits ein simples Setup mit einem CDN wie Cloudfront oder einem simplen HTTP Cache genügen, um sie abzufangen. Auch Memory-Caches wie Redis können die Ausgangslage schon wesentlich verändern. Ebenso wurden auf Containern basierte Infrastrukturen nicht eingeordnet. Diese sind im Rahmen dieses Artikels ungefähr mit einer Serverless Architektur gleichzusetzen, benötigen aber einen erheblich grösseren Konfigurations- und Administrationsaufwand.

Es gilt also auch im Umgang mit Lastschwankungen, dass es keine pfannenfertigen Patentlösungen gibt, und man jede IT Infrastruktur nur dann angemessen auf jede Lastsituation vorbereiten kann, wenn man eine an die individuellen Bedürfnisse und Gegebenheiten angepasste Lösung entwickelt.