Vitess für horizontale MySQL-Skalierung: Sharding ohne Anwendungsumbau
AI generated
InnoDB
SQL
MySQL · Vitess · Sharding · Skalierung
Vitess für horizontale MySQL-Skalierung
Sharding, ohne die Anwendung umzubauen

Irgendwann stößt ein einzelner, noch so gut getunter MySQL-Server an Grenzen, sei es beim Datenvolumen, bei der Schreiblast oder bei der Anzahl gleichzeitiger Verbindungen. Vitess löst dieses Problem, indem es eine Proxy-Schicht vor die eigentlichen MySQL-Instanzen legt, die Sharding transparent verbirgt: Die Anwendung verbindet sich weiterhin wie gewohnt über das MySQL-Protokoll und merkt im Idealfall nichts von der Verteilung der Daten über mehrere Shards. Ob dieser Ansatz sinnvoll ist, hängt stark von der tatsächlichen Datengröße und Traffic-Größenordnung ab, denn die Komplexität von Vitess ist erheblich.

13 Min. Lesezeit Vitess · VTGate · VTTablet Sharding · Horizontale Skalierung

1. Wann klassisches MySQL an die Grenzen vertikaler Skalierung stößt

Solange Datenvolumen und Traffic wachsen, lässt sich ein MySQL-Server zunächst vertikal skalieren: mehr Arbeitsspeicher für einen größeren Buffer Pool, schnellere NVMe-Speicher, mehr CPU-Kerne. Diese Strategie funktioniert gut, hat aber eine harte Obergrenze, die durch die größte verfügbare Hardware-Instanz vorgegeben ist, und irgendwann steigen die Kosten für die nächstgrößere Instanz überproportional zum tatsächlichen Nutzen.

Read-Replicas lindern reine Leselast, helfen aber nicht bei Schreiblast, denn alle Schreibzugriffe müssen weiterhin über den einen primären Server laufen. Wenn selbst ein großzügig dimensionierter Primary bei Schreibdurchsatz oder Verbindungszahl an seine Grenzen stößt, bleibt als nächster Schritt nur die horizontale Skalierung, also die Aufteilung der Daten auf mehrere unabhängige MySQL-Instanzen, das sogenannte Sharding.

2. Was Vitess ist: Herkunft und Architekturüberblick

Vitess wurde ursprünglich bei YouTube entwickelt, um dessen MySQL-Infrastruktur horizontal skalierbar zu machen, und ist heute ein bei der Cloud Native Computing Foundation gegraduierter Open-Source-Standard für MySQL-Sharding. Statt Sharding-Logik in jede einzelne Anwendung einzubauen, kapselt Vitess sie vollständig in einer eigenen Infrastrukturschicht zwischen Anwendung und den tatsächlichen MySQL-Instanzen.

Die zentralen Bausteine sind VTGate als zustandsloser Query-Router, mit dem sich die Anwendung über das gewöhnliche MySQL-Protokoll verbindet, VTTablet als Vorschaltprozess vor jeder einzelnen MySQL-Instanz, der Verbindungspooling, Query-Rewriting und Health-Checks übernimmt, sowie ein Topology Service, meist etcd, in dem Metadaten zu Keyspaces und Shards abgelegt sind. Für Administration und Orchestrierung kommen zusätzlich vtctld und vtorc zum Einsatz.

3. Transparentes Sharding: wie die Anwendung weiterhin normales MySQL sieht

Aus Sicht der Anwendung ändert sich beim Einsatz von Vitess zunächst wenig: Verbindungen werden über einen MySQL-Treiber wie gewohnt aufgebaut, SQL-Abfragen werden in gewohnter Syntax formuliert und abgeschickt. VTGate empfängt diese Abfragen, konsultiert das VSchema, um zu bestimmen, auf welchem oder welchen Shards die relevanten Daten liegen, und leitet die Abfrage entsprechend an die zuständigen VTTablet-Instanzen weiter.

Bei Abfragen, die Daten aus mehreren Shards zusammenführen müssen, etwa eine Aggregation ohne expliziten Sharding-Key-Filter, führt VTGate ein sogenanntes Scatter-Gather durch: Die Abfrage wird an alle relevanten Shards parallel gesendet, und die Teilergebnisse werden anschließend zusammengeführt. Das funktioniert transparent, ist aber deutlich teurer als eine Abfrage, die dank passendem Sharding-Key gezielt nur einen einzigen Shard trifft.

4. Das VSchema-Konzept: Sharding-Keys und Vindexes

Das VSchema definiert pro Keyspace, ob eine Tabelle geshardet oder ungeshardet ist, und legt für geshardete Tabellen einen primären Vindex fest, eine Abbildungsfunktion, die aus dem Wert der Sharding-Spalte bestimmt, welchem Shard eine Zeile zugeordnet wird. Ein Hash-Vindex verteilt Werte beispielsweise gleichmäßig über alle Shards, unabhängig von der Verteilung der eigentlichen Werte.

Für Abfragen über Spalten, die nicht der primäre Sharding-Key sind, definiert man zusätzliche sekundäre Vindexes, häufig realisiert über eigene Lookup-Tabellen, die den Zusammenhang zwischen alternativer Spalte und Sharding-Key materialisieren. Ein gut entworfenes VSchema mit passenden Vindexes ist entscheidend dafür, dass möglichst viele Abfragen gezielt einzelne Shards treffen, statt teure Scatter-Gather-Operationen auszulösen.


-- Vereinfachtes VSchema-Fragment (JSON) für eine geshardete Tabelle
{
  "sharded": true,
  "vindexes": {
    "hash": { "type": "hash" }
  },
  "tables": {
    "sales_order": {
      "column_vindexes": [
        { "column": "customer_id", "name": "hash" }
      ]
    }
  }
}

5. Resharding ohne Downtime: wie Vitess Umverteilungen handhabt

Ein zentrales Versprechen von Vitess ist die Möglichkeit, die Anzahl der Shards nachträglich zu ändern, ohne die Anwendung offline zu nehmen. Über den Reshard-Workflow kopiert Vitess Daten aus den bestehenden Shards in eine neue Shard-Topologie, hält beide Zustände über VReplication synchron und schaltet den Traffic erst nach vollständigem Abgleich auf die neue Topologie um.

Auch das Verschieben einzelner Tabellen zwischen Keyspaces, etwa im Rahmen einer schrittweisen Migration von einer monolithischen zu einer geshardeten Struktur, funktioniert über denselben MoveTables-Mechanismus. Diese Fähigkeit, produktive Datenmengen im laufenden Betrieb umzuverteilen, ist einer der Hauptgründe, warum Teams überhaupt zu Vitess greifen, statt Sharding von Hand in der Anwendung zu implementieren.

6. Praktische Einordnung: ab welcher Größenordnung sich Vitess lohnt

Vitess entfaltet seinen Nutzen vor allem bei Datenmengen im Bereich mehrerer Terabyte oder Tabellen mit Milliarden Zeilen, bei denen selbst ein leistungsstarker Einzelserver mit den größten verfügbaren Instanztypen an Grenzen stößt, oder bei Abfragelasten von zehntausenden Queries pro Sekunde, die ein einzelner Primary nicht mehr sicher bedienen kann. Auch bei echten Multi-Tenant-Plattformen mit sehr vielen unabhängigen Mandanten kann Sharding nach Mandanten-ID sinnvoll sein.

Unterhalb dieser Größenordnung, also im Bereich weniger hundert Gigabyte bis niedriger einstelliger Terabyte mit moderater Schreiblast, lässt sich die gleiche Skalierung meist deutlich einfacher über einen gut getunten Primary mit mehreren Read-Replicas und gegebenenfalls einem Verbindungs-Proxy erreichen, ohne die betriebliche Komplexität von Vitess in Kauf nehmen zu müssen.

7. Komplexitätskosten: Betriebsaufwand und zusätzliche Abhängigkeiten

Der Betrieb von Vitess bringt spürbaren zusätzlichen Aufwand mit sich: Ein dediziertes Operations-Team muss VTGate, VTTablet-Instanzen, den Topology Service und die Orchestrierungswerkzeuge überwachen, aktualisieren und bei Störungen debuggen. In der Praxis wird Vitess häufig zusammen mit Kubernetes betrieben, meist über den offiziellen Vitess-Operator, was zusätzliches Kubernetes-Know-how im Team voraussetzt.

Auch auf Anwendungsseite entsteht Aufwand: Ein sorgfältig entworfenes VSchema mit passenden Vindexes ist Voraussetzung dafür, dass Abfragen effizient bleiben, und Änderungen am Schema oder an Zugriffsmustern erfordern häufig eine erneute Überarbeitung des VSchema. Diese Lernkurve sollte nicht unterschätzt werden, bevor man sich für Vitess entscheidet.

8. Magento-Kontext: wann Vitess eher nicht und wann doch infrage kommt

Die weit überwiegende Mehrheit der Magento-Shops bewegt sich mit Datenbankgrößen im Bereich weniger Gigabyte bis niedriger dreistelliger Gigabyte und Abfragelasten, die ein einzelner, gut getunter MySQL- oder Percona-Server samt Read-Replicas problemlos bedient. Für diese Fälle wäre Vitess ein deutlicher Overkill, der operative Komplexität ohne entsprechenden Nutzen hinzufügt.

Relevant wird Vitess dagegen für sehr große B2B-Marktplätze mit enormem Bestellvolumen oder für SaaS-Plattformen, die viele unabhängige Händler auf einer gemeinsamen Infrastruktur mit echtem Sharding nach Mandanten-ID betreiben, insbesondere wenn einzelne Mandanten selbst schon beträchtliche Datenmengen erzeugen und horizontale statt vertikale Skalierung wirtschaftlicher wird.

9. Alternativen zu Vitess: Read-Replicas, ProxySQL und Anwendungs-Sharding

Bevor man sich für Vitess entscheidet, lohnt sich der Blick auf günstigere Zwischenschritte: Read-Replicas mit Lesetrennung auf Anwendungsebene lösen viele Leselast-Probleme ohne jede Sharding-Komplexität. ProxySQL kann Verbindungspooling, Read-Write-Splitting und Query-Routing übernehmen, ohne dass Daten tatsächlich über mehrere unabhängige Instanzen verteilt werden müssen.

Manuelles Anwendungs-Sharding, etwa eine Aufteilung nach Website oder Store View bei Multi-Site-Magento-Installationen, kann in vielen Fällen ausreichen, ohne die generische, aber komplexe Sharding-Infrastruktur von Vitess einzuführen. Auch konsequente Archivierung alter Bestell- und Logdaten reduziert oft schon die effektive Datenmenge so weit, dass horizontale Skalierung gar nicht erst nötig wird.


-- Einfache Lesetrennung ohne Vitess: Read-Replica gezielt für Reports nutzen
-- Schreibverbindung (Primary)
INSERT INTO sales_order_grid (...) VALUES (...);

-- Report-Abfrage bewusst gegen Read-Replica
SELECT store_id, COUNT(*) AS orders
FROM sales_order_grid
WHERE created_at >= CURDATE() - INTERVAL 30 DAY
GROUP BY store_id;
Vitess-Komponente Rolle Vergleichbar mit Betrieben von
VTGate Zustandsloser Query-Router, Verbindungseinstiegspunkt Datenbank-Proxy Ops-Team, mehrfach horizontal skaliert
VTTablet Vorschaltprozess je MySQL-Instanz, Pooling & Health-Checks Sidecar-Proxy Ops-Team, je Shard/Replica
Topology Service (etcd) Speichert Metadaten zu Keyspaces und Shards Service-Discovery Ops-Team, hochverfügbar betrieben
vtctld / vtorc Administration, Orchestrierung, Failover Cluster-Manager Ops-Team, zentral

Mironsoft

Datenbank-Performance, Index-Tuning und Magento-DB-Optimierung

Magento-Shop, der an langsamen Datenbankabfragen leidet?

Wir analysieren MySQL-Datenbanken auf Performance-Bremsen, optimieren Indizes und Abfragen gezielt und richten Backup- und Replikationsstrategien ein, die im Ernstfall wirklich funktionieren.

Performance-Audit

Slow Query Log und Explain-Pläne systematisch auf Engpässe untersuchen.

Index-Optimierung

Indizes gezielt für die tatsächliche Abfragelast des Shops aufbauen.

Backup-Strategie

Zuverlässige Backup- und Restore-Prozesse für produktive Magento-Datenbanken einrichten.

10. Zusammenfassung

Vitess in MySQL-Umgebungen: Das Wichtigste auf einen Blick

Grundidee

Vitess legt eine Proxy-Schicht aus VTGate und VTTablet vor MySQL, sodass die Anwendung über das normale MySQL-Protokoll spricht und von der Sharding-Logik nichts merkt.

VSchema

Definiert Sharding-Keys und Vindexes, die bestimmen, wie Zeilen auf Shards verteilt werden. Ein gutes VSchema hält Abfragen auf einzelne Shards begrenzt statt teure Scatter-Gather-Operationen auszulösen.

Wann sinnvoll

Ab mehreren Terabyte Daten, Milliarden Zeilen oder zehntausenden Queries pro Sekunde, oder bei echtem Multi-Tenant-Sharding nach Mandanten-ID.

Kosten

Erheblicher Betriebsaufwand, meist Kubernetes-Abhängigkeit und eine spürbare Lernkurve für VSchema-Design. Für typische Magento-Shops meist Overkill.

11. FAQ: Vitess in MySQL-Umgebungen: Das Wichtigste auf einen Blick

1Was macht Vitess grundsätzlich anders als klassisches MySQL-Sharding?
Vitess kapselt Sharding-Logik vollständig in einer eigenen Proxy-Schicht zwischen Anwendung und MySQL-Instanzen, sodass die Anwendung weiterhin über das normale MySQL-Protokoll spricht und keinen eigenen Sharding-Code enthalten muss.
2Welche Rolle spielt VTGate?
VTGate ist der zustandslose Query-Router, mit dem sich die Anwendung verbindet. Er konsultiert das VSchema, bestimmt die zuständigen Shards und leitet Abfragen entsprechend weiter.
3Was ist ein Vindex im VSchema?
Ein Vindex ist eine Abbildungsfunktion, die aus dem Wert einer Spalte bestimmt, welchem Shard eine Zeile zugeordnet wird. Der primäre Vindex nutzt meist den Sharding-Key, sekundäre Vindexes erlauben effiziente Abfragen über andere Spalten.
4Was ist ein Scatter-Gather in Vitess?
Wenn eine Abfrage nicht anhand eines Vindex auf einen einzelnen Shard eingegrenzt werden kann, sendet VTGate sie parallel an alle relevanten Shards und führt die Teilergebnisse zusammen, was deutlich teurer ist als eine gezielte Abfrage.
5Kann Vitess ohne Downtime resharden?
Ja, über den Reshard-Workflow und VReplication kopiert Vitess Daten in eine neue Shard-Topologie, hält beide Zustände synchron und schaltet den Traffic erst nach vollständigem Abgleich um.
6Ab welcher Datenmenge lohnt sich Vitess?
Der Nutzen wird meist erst bei mehreren Terabyte Daten, Tabellen mit Milliarden Zeilen oder Abfragelasten von zehntausenden Queries pro Sekunde spürbar, bei denen ein Einzelserver an Grenzen stößt.
7Braucht Vitess zwingend Kubernetes?
Technisch nicht zwingend, in der Praxis wird Vitess aber überwiegend zusammen mit Kubernetes betrieben, meist über den offiziellen Vitess-Operator, was entsprechendes Kubernetes-Know-how im Team voraussetzt.
8Ist Vitess für einen typischen Magento-Shop sinnvoll?
In den meisten Fällen nicht. Typische Magento-Datenbankgrößen lassen sich mit einem gut getunten Einzelserver samt Read-Replicas deutlich einfacher betreiben als mit der zusätzlichen Komplexität von Vitess.
9Welche Alternativen gibt es zu Vitess?
Read-Replicas mit Lesetrennung, ProxySQL für Verbindungspooling und Read-Write-Splitting sowie manuelles Anwendungs-Sharding nach Website oder Mandant lösen viele Skalierungsprobleme ohne die Komplexität von Vitess.
10Wann ist echtes Multi-Tenant-Sharding mit Vitess für Magento relevant?
Vor allem bei SaaS-Plattformen, die viele unabhängige Händler auf gemeinsamer Infrastruktur betreiben und bei denen einzelne Mandanten selbst schon beträchtliche Datenmengen erzeugen, sodass horizontale Skalierung wirtschaftlicher wird als vertikale.