Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Horizontal Scaling meistern: Der Leitfaden für moderne CloudOps-Teams

By Josh PalmerJun 24, 202613 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

TL;DR: Horizontal Scaling verteilt die Last auf zusätzliche Server-Instanzen, statt einzelne Maschinen aufzurüsten. Es ist das Fundament einer zuverlässigen, kosteneffizienten Cloud-Architektur für unvorhersehbaren Traffic – bringt aber Komplexität bei State-Management, Load Balancing und Autoscaling-Konfiguration mit sich, die Teams einplanen sollten, bevor sie an Kapazitätsgrenzen stoßen.

Jede Anwendung hat eine Obergrenze. Eine Zeit lang lässt sich diese Grenze durch Hardware-Upgrades nach oben schieben: mehr CPU, mehr RAM, schnellerer Storage. Doch irgendwann kommt ein einzelner Server nicht mehr hinterher, und die Upgrade-Kosten übersteigen den Nutzen. Spätestens dann verschiebt sich die Frage vom Scale-up zum Scale-out.

Scale-out – also mehr Server zur Lastverteilung statt eines immer größeren Servers – ist die Architektur, auf der die meisten modernen Cloud-Anwendungen laufen. So fangen Anwendungen Traffic-Spitzen ab, ohne in die Knie zu gehen, so bauen Teams Redundanz auf, ohne Engineering-Heldentaten zu brauchen, und so bleiben die Infrastrukturkosten proportional zur tatsächlichen Nachfrage statt zu Worst-Case-Prognosen.

Dieser Leitfaden zeigt, wie Horizontal Scaling funktioniert, wo es passt und wo nicht – und wie CloudOps-Teams es auf AWS, Google Cloud und Kubernetes umsetzen, ohne Zuverlässigkeit gegen Komplexität einzutauschen.

Was ist Horizontal Scaling und wie funktioniert es?

Horizontal Scaling bedeutet, weitere Instanzen einer Ressource bereitzustellen, um workloads auf mehrere Nodes zu verteilen, statt die Kapazität einer einzelnen Node zu erhöhen. Während Vertical Scaling einen einzelnen Server aufrüstet (mehr CPU-Kerne, mehr Arbeitsspeicher), vervielfacht Horizontal Scaling die Anzahl der Server, die Requests bearbeiten. Vor der Flotte sitzt ein Load Balancer, der eingehenden Traffic auf die verfügbaren Instanzen verteilt, damit keine einzelne Node zum Engpass wird.

Die Mechanik unterscheidet sich je nach Plattform leicht, das Muster bleibt aber gleich. Auf AWS überwachen Auto Scaling Groups CloudWatch-Metriken und starten oder beenden EC2-Instanzen automatisch, sobald die Auslastung definierte Schwellenwerte überschreitet. Auf Kubernetes beobachtet der Horizontal Pod Autoscaler (HPA) die CPU- und Memory-Auslastung (oder Custom Metrics) und passt die Anzahl der laufenden Pods entsprechend an. Auf Google Cloud übernehmen Managed Instance Groups dieselbe Aufgabe für Compute-Engine-workloads. In jedem Fall trifft eine Controller-Ebene die Skalierungsentscheidung, sodass die Engineers das nicht selbst tun müssen.

Was bedeutet das für Performance und Kapazität?

Horizontal Scaling verwandelt das Kapazitätsmodell von einer festen Obergrenze in einen dynamischen Bereich. Ein vertikal skaliertes System stößt an eine harte Grenze, sobald der größte verfügbare Instanztyp die Last nicht mehr bewältigt. Ein korrekt konfiguriertes, horizontal skaliertes System kann so lange weitere Instanzen hinzufügen, bis Architektur oder Budget weiteres Wachstum begrenzen.

Der Performance-Vorteil potenziert sich mit geografischer Verteilung. Wenn Instanzen über mehrere Availability Zones laufen, legt der Ausfall einer einzelnen Zone die Anwendung nicht lahm – der Traffic wird um die betroffene Zone herum geleitet, während Ersatzinstanzen hochfahren. Der Trade-off ist die Inter-Node-Latenz: Verteilte Instanzen, die miteinander kommunizieren müssen, zahlen einen Netzwerk-Roundtrip, den ein Single-Server-Setup nicht hat – das fällt bei latenzkritischen Operationen ins Gewicht.

Wie wirkt sich Horizontal Scaling auf Kosten und Ressourcenmanagement aus?

Horizontal Scaling richtet die Infrastrukturkosten enger an der tatsächlichen Nachfrage aus als Vertical Scaling. Ein vertikal skalierter Server läuft unabhängig vom Traffic in seiner bereitgestellten Größe. Eine horizontal skalierte Flotte kann in lastschwachen Phasen schrumpfen und bei Spitzen wachsen – sie zahlt On-Demand-Preise für temporäre Kapazität und Reservierungspreise für die planbare Grundlast.

Dieser Vorteil greift allerdings nur, wenn die Autoscaling-Policies sauber abgestimmt sind. Fehlkonfigurierte Scale-out-Schwellenwerte, die zu früh auslösen, oder Scale-in-Policies, die Instanzen nicht schnell genug abbauen, machen aus dem Kostenvorteil Waste. Für die meisten Teams ergibt sich das beste Kostenprofil aus Commitment-basiertem Pricing für die Grundlast (AWS Savings Plans, GCP Committed Use Discounts) kombiniert mit On-Demand-Kapazität für Spitzen.

Speziell bei Kubernetes-workloads ist das Right-Sizing von Pod-Requests und -Limits genauso wichtig wie die Skalierungs-Policy selbst. Pods mit aufgeblähten Resource Requests blockieren effizientes Bin-Packing – der Cluster braucht dann mehr Nodes, als der workload eigentlich erfordert. DoiT PerfectScale for Kubernetes deckt diese Right-Sizing-Potenziale automatisch auf und zeigt, wo Pod-Requests nicht zum tatsächlichen Nutzungsverhalten passen.

Welche operative Komplexität bringt Horizontal Scaling mit sich?

Mehr Instanzen heißt mehr Angriffsfläche im Betrieb. Configuration Drift, Patching über eine ganze Flotte, Log-Aggregation und Distributed Tracing – all das wird in der Breite schwieriger als auf einem einzelnen Server. Teams, die nicht dafür gebaut haben, merken das schnell: wenn ein Bug auf einem Instanztyp auftritt, auf einem anderen aber nicht, oder wenn Logs aus 40 Pods korreliert werden müssen, um einen einzigen Request nachzuvollziehen.

Infrastructure-as-Code-Tools (Terraform, Pulumi, CloudFormation) sind die Basisabsicherung. Immutable-Infrastructure-Patterns – Instanzen werden aus einem geprüften Image ersetzt statt nachträglich verändert – eliminieren Configuration Drift. Zentralisiertes Logging und Distributed Tracing machen Debugging über mehrere Instanzen hinweg überhaupt erst handhabbar.

Horizontal vs. Vertical Scaling: Was bedeutet das für CloudOps-Teams?

Vertical Scaling (Scale-up) und Horizontal Scaling (Scale-out) schließen sich nicht aus. Die meisten Produktionsarchitekturen nutzen beides: passend dimensionierte Instanzen, die innerhalb einer horizontal skalierten Flotte laufen. Die Frage ist, an welchem Hebel man zuerst zieht, wenn Kapazität zum Engpass wird.

Vertical Scaling lässt sich schneller umsetzen und erfordert keine Anwendungsänderungen. Mehr CPU und RAM für eine bestehende Instanz, ggf. ein Neustart – fertig. Das funktioniert gut für workloads, die sich schwer verteilen lassen: Single-Threaded-Prozesse, Anwendungen mit engen State-Abhängigkeiten oder Legacy-Systeme, die nicht für den Multi-Instance-Betrieb gebaut wurden. Die Obergrenze ist der größte verfügbare Instanztyp, und die Kosten skalieren nicht proportional zur Nachfrage.

Horizontal Scaling setzt voraus, dass die Anwendung dafür bereit ist. Stateless Services – jeder Request bringt seinen gesamten Kontext mit, und zwischen Requests bleibt kein lokaler State bestehen – lassen sich über beliebig viele Instanzen verteilen. Stateful Services, bei denen die Anwendung Session-Daten oder In-Process-State lokal hält, brauchen zusätzliche Architekturarbeit, um über eine Flotte hinweg sauber zu funktionieren.

Warum sind Stateless Applications ideal für Horizontal Scaling?

Stateless Applications sind der natürliche Fit für Horizontal Scaling, weil jede Instanz jeden Request bearbeiten kann. Ein Load Balancer kann Traffic per Round-Robin verteilen, ohne dass eine Routing-Logik über reine Verfügbarkeitsprüfungen hinausgeht. Bei Traffic-Spitzen fahren neue Instanzen hoch und übernehmen sofort Last. Bei sinkendem Traffic werden Instanzen beendet, ohne dass laufender State davon betroffen ist.

Die meisten modernen Web-Anwendungs-Tiers, API-Layer und Microservices sind by Design stateless. Eine REST-API, die aus einer gemeinsamen Datenbank liest, kümmert sich nicht darum, welcher Server den Request verarbeitet. Ein containerisierter Microservice, der aus einer Queue liest und Ergebnisse in Object Storage schreibt, skaliert ohne zusätzliche Koordination horizontal – und Autoscaling hält die Kapazität proportional zur Nachfrage, ganz ohne manuelles Eingreifen.

Wo machen Datenbanken und Stateful workloads Schwierigkeiten?

Datenbanken und Stateful Services skalieren nicht von Haus aus horizontal. Eine relationale Datenbank auf einer einzelnen Primary-Instanz lässt sich nicht einfach über fünf Nodes replizieren, um den fünffachen Write-Durchsatz zu erreichen. Reads lassen sich über Read Replicas horizontal skalieren, Writes laufen aber weiterhin über die Primary – schreiblastige workloads bleiben ein Engpass, egal wie viele Replicas es gibt.

Teams umgehen das, indem sie State in eine gemeinsame Schicht auslagern – eine Managed Database, einen verteilten Cache wie Redis oder einen Object Store –, auf die alle Instanzen zugreifen. Session-Daten wandern nach Redis oder DynamoDB. File-Uploads gehen nach S3 oder Cloud Storage. Diese Shared-State-Architektur macht die Anwendungsebene tatsächlich stateless, ohne dass die benötigten Daten verloren gehen.

In Kubernetes nutzen Stateful workloads, die persistenten Storage benötigen, StatefulSets statt Deployments. StatefulSets geben jedem Pod eine stabile Netzwerk-Identität und ein Persistent Volume Claim – entscheidend für Datenbanken, Queues und andere geordnete, stateful Dienste.

Wann funktioniert Horizontal Scaling – und wann nicht?

Horizontal Scaling spielt seine Vorteile unter bestimmten Bedingungen aus: unvorhersehbare oder spike-lastige Traffic-Muster, stateless Application-Tiers, verteilte Microservices und workloads, bei denen die Verfügbarkeitsanforderungen Redundanz erzwingen. Unter anderen Bedingungen liefert es weniger Wert – und schafft mitunter neue Probleme.

Containerisierte workloads und Microservices passen am besten. Jeder Service skaliert unabhängig nach eigener Nachfrage – ein Spike in einem Teil des Systems überdimensioniert nicht den Rest. Ein Kubernetes-Cluster mit 20 Microservices kann jeden Service einzeln autoskalieren und so die Ressourcenauslastung durchgehend hoch halten, statt alles auf Spitzenlast zu dimensionieren. Der Kubernetes Horizontal Pod Autoscaler gibt Teams feingranulare Kontrolle über diese Scaling-Policies, inklusive Custom Metrics jenseits von CPU und Memory.

Event-driven Architekturen skalieren horizontal besonders gut. Eine Worker-Flotte, die aus einer Queue konsumiert, kann je nach Queue-Tiefe wachsen und schrumpfen, Bursts ohne Verzögerung abarbeiten und Instanzen wieder freigeben, sobald die Queue leer ist. Tools wie KEDA (Kubernetes Event-Driven Autoscaling) bringen dieses Muster nativ in Kubernetes und skalieren Pods anhand externer Event-Quellen wie SQS-Queue-Länge oder Kafka-Consumer-Lag.

Welche Entscheidungen rund um Load Balancing und Traffic-Verteilung sind am wichtigsten?

Der Load Balancer ist der Eintrittspunkt für den gesamten Traffic einer horizontal skalierten Flotte – seine Konfiguration wirkt sich direkt auf das Anwendungsverhalten aus. Round-Robin-Verteilung funktioniert für Stateless Services, bei denen alle Instanzen gleichwertig sind. Least-Connection-Routing eignet sich besser, wenn die Verarbeitungszeit pro Request stark schwankt – neue Verbindungen gehen dann an die Instanz mit der größten freien Kapazität.

Health Checks sind das operative Rückgrat. Ein Load Balancer, der Traffic an eine unhealthy Instance schickt, konterkariert den ganzen Sinn einer Flotte. Health Checks sollten echte Application Readiness prüfen (ein echter HTTP-Endpoint, der die Verfügbarkeit der Abhängigkeiten verifiziert) – nicht nur, ob die Instanz auf eine TCP-Verbindung antwortet. Fehlkonfigurierte Health Checks, die entweder zu leicht durchgehen oder zu streng sind, führen zu Flapping und unnötigen Skalierungsereignissen.

Wie wirken sich Session-Management und Datenkonsistenz auf Horizontal Scaling aus?

Beim Session-Management scheitern viele Horizontal-Scaling-Implementierungen. Eine Anwendung, die Session-Daten im lokalen Speicher hält, läuft auf einem einzelnen Server problemlos. Über eine Flotte verteilt kann der zweite Request desselben Nutzers auf einer anderen Instanz landen, die nichts von der Session des ersten Requests weiß – das führt zu Authentifizierungsfehlern oder verlorenen Warenkörben.

Die Lösung: Session State auslagern. Redis und Memcached sind die Standardoptionen für verteilten Session-Storage. Die Anwendungsebene wird damit wirklich stateless und liest bzw. schreibt Session-Daten im gemeinsamen Cache statt im lokalen Speicher. Alle Instanzen sehen denselben Session-Status, egal welche den Request verarbeitet. Das fügt pro Session-Read einen Netzwerk-Roundtrip hinzu – in den meisten Anwendungen ein vertretbarer Trade-off für horizontale Skalierbarkeit.

Datenkonsistenz über verteilte Instanzen hinweg verlangt bei schreiblastigen workloads bewusste Architekturentscheidungen. Distributed Locking, Optimistic Concurrency Control oder Event-Sourcing-Patterns adressieren das Koordinationsproblem – je nach Konsistenzanforderung.

Welche Monitoring- und Autoscaling-Entscheidungen entscheiden über den Erfolg?

Autoscaling-Policies sind nur so gut wie die Metriken, die sie steuern. CPU-Auslastung ist bei den meisten Managed-Autoscaling-Services die Standardmetrik – für viele workloads aber ein nachlaufender Indikator. Eine Anwendung unter Memory-Druck oder mit Queue-Backlog kann eine ganz normale CPU-Auslastung zeigen, bis sie kippt. Custom Metrics (Request-Queue-Tiefe, Response-Latency-Perzentile, aktive Verbindungen) liefern Autoscaling-Policies frühere und präzisere Signale.

Scale-out-Policies sollten aggressiv sein – kurzfristige Überprovisionierung ist besser, als die User Experience während eines Traffic-Spikes leiden zu lassen. Scale-in-Policies sollten konservativ sein – mit Cooldown-Phasen und stufenweisem Abbau, damit nicht zu schnell nach einer Spitze Instanzen heruntergefahren werden. Eine Flotte, die bei Traffic-Mustern, die zwischen hoch und normal pendeln, zu schnell wieder skaliert, gerät ins Thrashing – Instanzen kommen und gehen permanent, und das kostet Geld.

Der Leitfaden zur Kubernetes-Kostenoptimierung beschreibt im Detail, wie Sie Autoscaling-Konfiguration und Kosteneffizienz in Einklang bringen – inklusive Resource Quotas auf Namespace-Ebene und VPA-Integrationsmustern.

Wie setzen Sie Horizontal-Scaling-Patterns um und vermeiden typische Fehler?

Die Umsetzung folgt unabhängig von der Plattform einer einheitlichen Reihenfolge: Statelessness der Anwendung prüfen, Scaling Group konfigurieren, Policies setzen und testen, bevor Produktionsverkehr davon abhängt.

Auf AWS besteht der Stack aus Auto Scaling Groups mit EC2-Instanzen (oder ECS-Tasks für containerisierte workloads), einem Application Load Balancer und CloudWatch-Alarms, die die Scaling-Policies steuern. Die entscheidenden Stellschrauben sind die minimale und maximale Instanzanzahl, die Target-Utilization-Metrik und die Cooldown-Zeiten für Scale-in und Scale-out. Eine detaillierte EC2-Konfigurationsreferenz liefert der Leitfaden zu AWS-EC2-Kosten, -Vorteilen und Best Practices, der Instanzauswahl und Kostenoptimierung in der Tiefe behandelt.

Auf Google Cloud liefern Managed Instance Groups mit Autoscaling-Policies und ein Global External Application Load Balancer den äquivalenten Stack. GKE-Cluster setzen Kubernetes-natives Autoscaling obendrauf – der Cluster Autoscaler verwaltet die Node-Anzahl, der HPA unabhängig davon die Pod-Anzahl.

Auf Kubernetes – Cloud-übergreifend – kommt eine Abstraktionsebene hinzu. Deployments definieren den Soll-Zustand der Pods, der HPA passt die Replica-Anzahl anhand von Metriken an, und der Cluster Autoscaler oder Karpenter justiert die Node-Anzahl je nach Pod-Scheduling-Druck. Für Teams, die Kubernetes-Architektur von Grund auf aufbauen, ist Kubernetes architecture explained eine solide Grundlagenreferenz.

Die häufigsten Fehler liegen nicht in der Skalierungskonfiguration selbst, sondern in Anwendungsannahmen, die unter Verteilung brechen: hartkodierte Hostnames, Writes ins lokale Dateisystem, In-Process-Caches, die zwischen Instanzen auseinanderlaufen, und synchrone Aufrufe an Services, die nicht im gleichen Tempo mitskalieren. Wer diese Annahmen vor dem Produktivgang aufspürt, erspart sich die Debugging-Session, die sonst genau während eines Traffic-Spikes stattfindet.

DoiT Forward Deployed Engineers arbeiten direkt mit CloudOps-Teams an genau diesen Implementierungsmustern – sie validieren Architekturannahmen und konfigurieren Scaling-Policies, die zum tatsächlichen Traffic-Verhalten passen.

Wie unterstützt Horizontal Scaling einen widerstandsfähigen Cloud-Betrieb?

Horizontal Scaling ist die Infrastruktur für die Traffic-Realität, der die meisten Cloud-Anwendungen tatsächlich begegnen: schwer vorhersehbare Nachfrage, Spitzen ohne Vorwarnung und Verfügbarkeitsanforderungen, die keinen Single Point of Failure dulden. Eine Flotte, die bei einlaufendem Traffic wachsen und danach wieder schrumpfen kann, bewältigt das, ohne dass ein Engineer auf jedes Skalierungsereignis reagieren muss.

Die operative Reife, die Horizontal Scaling überhaupt funktionieren lässt, ist keine einzelne Konfigurationsänderung. Es ist ein Bündel von Praktiken: Stateless Application Design, ausgelagertes State-Management, metrikgetriebenes Autoscaling, Infrastructure-as-Code und Observability-Tools, die eine verteilte Flotte überhaupt debuggbar machen. Teams, die diese Praktiken früh aufbauen, skalieren ohne Drama. Teams, die das überspringen, skalieren in Incidents hinein.

DoiT begleitet CloudOps-Teams in jeder Phase – von der initialen Kubernetes-Cluster-Architektur bis hin zu Right-Sizing und Autoscaling-Optimierung für etablierte Flotten. DoiT PerfectScale for Kubernetes analysiert Cluster-workloads kontinuierlich und liefert Right-Sizing- und Scaling-Empfehlungen, damit Teams weniger Zeit mit manuellem Tuning verbringen und mehr mit der Arbeit, die das Geschäft voranbringt. Sprechen Sie mit einem DoiT-Engineer und finden Sie heraus, wie der Ansatz zu Ihrer Architektur passt.

Häufige Fragen zu Horizontal Scaling

Was ist der Unterschied zwischen Horizontal und Vertical Scaling?

Horizontal Scaling fügt zusätzliche Instanzen einer Ressource hinzu (mehr Server, mehr Pods, mehr Nodes), um workloads zu verteilen. Vertical Scaling erhöht die Kapazität einer bestehenden Instanz (mehr CPU, mehr RAM). Horizontal Scaling bewältigt unvorhersehbare Nachfrage und bietet Redundanz. Vertical Scaling ist einfacher umzusetzen, hat aber eine harte Obergrenze bei der größten verfügbaren Instanzgröße.

Wann sollte ein CloudOps-Team Horizontal statt Vertical Scaling wählen?

Horizontal Scaling eignet sich am besten für stateless Application-Tiers, Microservices und workloads mit variablem oder unvorhersehbarem Traffic. Vertical Scaling passt besser zu Single-Threaded-Prozessen, Legacy-Anwendungen, die State nicht verteilen können, oder workloads, die kurzfristig mehr Kapazität brauchen, ohne dass die Anwendung verändert werden soll. Die meisten Produktionsarchitekturen nutzen passend dimensionierte Instanzen (vertikal) innerhalb einer horizontal skalierten Flotte.

Senkt Horizontal Scaling automatisch die Kosten?

Nicht automatisch. Horizontal Scaling bringt Kosten und Nachfrage besser in Einklang als ein fest dimensionierter großer Server – aber nur, wenn die Autoscaling-Policies sauber abgestimmt sind und die Grundlast mit Commitment-basiertem Pricing abgedeckt ist. Fehlkonfigurierte Scale-in-Policies, die Instanzen nach abklingendem Traffic weiterlaufen lassen, oder übervorsichtige Scale-out-Schwellenwerte, die manuelles Eingreifen während Spitzen erfordern, fressen den Kostenvorteil auf.

Wie handhabt Kubernetes Horizontal Scaling?

Kubernetes nutzt den Horizontal Pod Autoscaler (HPA), um die Anzahl der laufenden Pod-Replicas anhand von CPU-Auslastung, Memory oder Custom Metrics anzupassen. Der Cluster Autoscaler (oder Karpenter auf AWS) passt die Node-Anzahl an den Pod-Scheduling-Bedarf an. Beide Controller arbeiten zusammen: Der HPA skaliert die Anwendungsschicht, der Node-Autoscaler die darunterliegende Infrastruktur entsprechend mit.

Was ist der größte Implementierungsfehler, den CloudOps-Teams bei Horizontal Scaling machen?

Anzunehmen, die Anwendung sei stateless, obwohl sie es nicht ist. Writes ins lokale Dateisystem, In-Memory-Session-Storage und In-Process-Caches erzeugen versteckten State, der bricht, sobald die Requests desselben Nutzers auf unterschiedlichen Instanzen landen. Wer die Anwendung vor dem Skalieren auf solche Annahmen prüft, verhindert, dass dieses Fehlerbild erst in der Produktion sichtbar wird.