Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
Wenn das System mit der steigenden Last nicht mehr zurechtkommt, gibt es zwei grundlegende Möglichkeiten, seine Leistung zu steigern: vertikale und horizontale Skalierung.
Auf den ersten Blick sind das IT-Begriffe, aber das Prinzip ist tatsächlich sehr einfach und findet sich sogar im normalen Bauwesen.
Kurz gesagt:
Vertikale Skalierung — ein Element leistungsfähiger machen.Horizontale Skalierung — mehr von denselben Elementen hinzufügen.
Vertikale Skalierung
Vertikale Skalierung (vertical scaling oder scale up) bedeutet, die Leistung eines bereits vorhandenen Components zu erhöhen.
Zum Beispiel haben wir einen Server mit:
- 4 CPU;
- 16 GB RAM;
- 500 GB SSD.
Das System beginnt langsam zu arbeiten. Anstatt einen weiteren Server hinzuzufügen, können wir installieren:
- 16 CPU;
- 64 GB RAM;
- eine schnellere SSD.
Der Server bleibt ein, wird aber deutlich leistungsfähiger.
Das ist vertikale Skalierung.
Beispiel aus dem Bauwesen
Stellen wir uns ein Gebäude vor, das mehr Last tragen muss.
Der vertikale Ansatz — die bestehende Struktur zu verstärken:
- dickere Balken verwenden;
- den Querschnitt der Säulen vergrößern;
- Bewehrung hinzufügen;
- das Fundament stärker machen.
Wir bauen kein zweites Gebäude. Wir machen das bestehende Gebäude stärker.
Beispiel aus der Solarenergie
Es gibt ein Solarsystem mit einem 5 kW Wechselrichter.
Wenn mehr Leistung benötigt wird, könnte der vertikale Ansatz darin bestehen, ihn durch einen 10 kW Wechselrichter zu ersetzen.
War:
5 kW → 1 Wechselrichter
Wurde:
10 kW → 1 leistungsstärkerer Wechselrichter
Das Gleiche kann mit der Batterie gemacht werden: Statt einer 5 kWh Batterie eine größere, zum Beispiel eine mit 10 kWh, installieren.
Horizontale Skalierung
Horizontale Skalierung (scale out) funktioniert anders.
Anstatt einen einzelnen Component leistungsfähiger zu machen, fügen wir neue Components hinzu.
Zum Beispiel arbeitet ein Server bereits an der Grenze seiner Möglichkeiten.
Anstatt von 4 CPU auf 16 CPU zu wechseln, können wir drei weitere identische Server installieren.
War:
[ Server ]
Wird:
[ Server ] [ Server ] [ Server ] [ Server ]
Jeder Server für sich kann nicht sehr leistungsfähig sein, aber zusammen können sie deutlich mehr Anfragen verarbeiten.
Bau: zweites Gebäude
Hier ist die horizontale Skalierung ebenfalls leicht vorstellbar.
Angenommen, ein Gebäude reicht nicht aus, um Menschen unterzubringen.
Der vertikale Ansatz:
ein höheres Gebäude bauen oder es größer machen.
Der horizontale:
ein weiteres Gebäude bauen.
Zum Beispiel kann man anstelle eines großen Lagers mit 10.000 m² zwei Lager mit je 5.000 m² haben.
Der Vorteil dieses Ansatzes ist, dass, wenn ein Objekt ausfällt, das andere weiterarbeiten kann.
Diese Eigenschaft ist in der IT sehr wichtig.
Solarenergie: mehr Panels oder leistungsstärkerer Wechselrichter?
Hier ist der Unterschied besonders gut zu erkennen.
Stellen wir uns ein System vor:
10 Solarpanels × 500 W = 5 kW
Wenn wir mehr Erzeugung benötigen, gibt es zwei Optionen.
Vertikaler Ansatz
Leistungsstärkere Panels installieren.
Zum Beispiel:
10 × 700 W = 7 kW
Die Anzahl der Panels bleibt gleich, aber jedes wird leistungsfähiger.
Das ist analog zu scale up.
Horizontaler Ansatz
Die Panels mit 500 W beibehalten, aber 4 weitere hinzufügen:
14 × 500 W = 7 kW
Wir haben ungefähr die gleiche installierte Leistung erreicht, aber die Anzahl der Elemente erhöht.
Das ist scale out.
Natürlich ist es in einem realen Solarsystem komplizierter: Man muss die Spannung der Strings, MPPT, den maximalen Strom des Wechselrichters, die Dachfläche, die Ausrichtung der Panels und andere Einschränkungen berücksichtigen.
Aber das Prinzip bleibt dasselbe.
IT: das offensichtlichste Beispiel
Stellen wir uns eine Website vor, die 100 Anfragen pro Sekunde bedient.
Ein Server arbeitet mit 90% CPU.
Scale up
Wir nehmen diesen Server und erhöhen seine Leistung:
4 CPU → 16 CPU
Jetzt kann ein Server beispielsweise 400 Anfragen pro Sekunde verarbeiten.
Der Vorteil — die Architektur bleibt relativ einfach.
Aber es gibt ein Problem: ein bestimmter Server hat eine physische Grenze.
Man kann die Anzahl von CPU und RAM nicht unbegrenzt erhöhen.
Scale out
Eine andere Option ist, Server hinzuzufügen.
Zum Beispiel:
1 Server × 100 Anfragen/s
wird zu:
4 Server × 100 Anfragen/s = 400 Anfragen/s
Vor den Servern wird ein Load Balancer installiert, der die Anfragen zwischen ihnen verteilt.
Zum Beispiel:
┌── Server 1
│
Users → Load Balancer ── Server 2
│
├── Server 3
│
└── Server 4
Wenn die Last noch weiter steigt, können neue Server hinzugefügt werden.
100 → 200 → 300 → 400 → 500 Server...
Das ist die Hauptstärke der horizontalen Skalierung.
Was passiert, wenn ein Server ausfällt?
Das ist einer der wichtigsten Unterschiede.
Bei der vertikalen Skalierung haben wir oft einen großen Single Point of Failure.
Users ↓ [ GROSSER SERVER ]
Wenn dieser Server ausfällt, kann das gesamte System nicht mehr funktionieren.
Bei der horizontalen Skalierung:
┌── Server 1
├── Server 2
Users → LB ──┼── Server 3
└── Server 4
Wenn Server 2 ausfällt, kann der Load Balancer aufhören, den Traffic dorthin zu leiten.
Die anderen Server werden weiterhin arbeiten.
Deshalb wird die horizontale Skalierung oft nicht nur für Leistung, sondern auch für Fehlertoleranz verwendet.
Aber horizontale Skalierung ist komplizierter
Auf den ersten Blick mag es so erscheinen, als wäre scale out immer besser.
Das ist in Wirklichkeit nicht der Fall.
Wenn wir einen Server haben, kann die Anwendung Daten lokal speichern:
Application
↓
Local disk
Wenn es zehn Server gibt, stellt sich die Frage:
Wo sollen die Daten gespeichert werden?
Wenn ein Benutzer eine Datei auf Server 1 hochgeladen hat und die nächste Anfrage auf Server 7 landet — Server 7 muss diese Datei irgendwie erhalten.
Deshalb muss man bei der horizontalen Skalierung oft hinzufügen:
- Load Balancer;
- Shared Storage;
- eine separate Datenbank;
- Cache;
- Message Queues;
- Synchronisationsmechanismen;
- Monitoring;
- Automatische Skalierung.
Das bedeutet, wir erhalten mehr Möglichkeiten, aber auch mehr architektonische Komplexität.
Warum nicht nur horizontale Skalierung verwenden?
Weil nicht alles einfach zwischen mehreren Maschinen aufgeteilt werden kann.
Zum Beispiel kann eine Datenbank schwieriger horizontal skaliert werden als ein Webserver.
Wenn eine Website 20 Server hat, bedeutet das noch nicht, dass man ebenso leicht 20 Kopien der Datenbank aufstellen und 20-fache Leistung erzielen kann.
Daher verwenden reale Systeme oft beide Ansätze gleichzeitig.
Zum Beispiel:
Load Balancer
↓
┌────────────┼────────────┐
↓ ↓ ↓
Server Server Server
└────────────┼────────────┘
↓
Database
↓
Storage
Zuerst kann die Leistung einzelner Server erhöht werden (scale up), und wenn das nicht mehr ausreicht, können neue Server hinzugefügt werden (scale out).
Die einfachste Analogie
Stellen Sie sich die Kassen in einem Supermarkt vor.
Wenn eine Kasse mit den Kunden nicht zurechtkommt, gibt es zwei Optionen.
Vertikale Skalierung:
eine Kasse schneller machen — einen schnelleren Scanner installieren, die Zahlung automatisieren usw.
Horizontale Skalierung:
5 weitere Kassen öffnen.
Im ersten Fall verbessern wir eine Ressource.
Im zweiten Fall erhöhen wir die Anzahl der Ressourcen.
Genau dieser Unterschied liegt den Konzepten scale up und scale out zugrunde.
Und obwohl die Begriffe am häufigsten in der IT vorkommen, ist dasselbe Prinzip buchstäblich überall zu sehen: von Servern und Datenbanken bis hin zu Gebäuden, Produktionslinien und Solarkraftwerken.
Gefällt dir?Reagieren
🧵
Dieser Beitrag hat noch keine Ergänzungen vom Autor.