WordPress Multisite ist ein architektonisches Fundament für modernes Platform Engineering, doch der Betrieb von mehr als 1.000 Websites auf einer gemeinsamen Codebasis offenbart Fehlermuster, die bei einzelnen Instanzen nicht auftreten. Bei dieser Größenordnung wandelt sich die Netzwerkadministration von der Inhaltspflege zur Steuerung verteilter Systeme. Ohne stringente technische Governance führt ein geteilter Zustand zwischen Mandanten zu kaskadierenden Datenbanksperren, unkontrollierten Cache-Invalidierungsstürmen, gegenseitiger Ressourcenbelastung und unübersichtlichem Plugin-Wildwuchs.
Der Betrieb eines Unternehmensnetzwerks verlangt eine strikte Trennung von Zuständigkeiten, automatisierte Infrastruktur, programmatisches Mandanten-Provisioning und klare Durchsetzung von Laufzeitgrenzen. Ob für weltweite Konzernabteilungen, E-Commerce-Portfolios mit mehreren Marken oder Hochschulen mit tausenden Fakultätsseiten: Stabilität im großen Maßstab erfordert, das WordPress-Netzwerk als kontrollierten Infrastruktur-Cluster zu betreiben.
Architektur von WordPress Multisite Netzwerken
Um eine verlässliche Governance über ein vierstelliges Netzwerk aufzubauen, müssen Ingenieure das Routing an der Netzwerkgrenze präzise auf die Datenbankstrukturen abstimmen. WordPress Multisite unterstützt nativ zwei strukturelle Topologien: Subdomain-Konfigurationen und Subdirectory-Konfigurationen.
Subdomains im Vergleich zu Subdirectories
Die Wahl zwischen Subdomains (tenant.network.com) und Subdirectories (network.com/tenant/) bestimmt das Reverse-Proxy-Routing, das SSL-Zertifikatsmanagement, den Pfad-Routing-Overhead und den Gültigkeitsbereich von Cookies.
In einer Subdomain-Netzwerktopologie:
- Wildcard-DNS-Einträge (
*.network.com) und automatisierte Let’s Encrypt Zertifikate über ACME-Daemons leiten den Datenverkehr sauber an Edge-Knotenpunkte. - Die Cookie-Isolierung bleibt gewahrt: Session-Tokens und Sicherheits-Nonces von
tenant-a.network.comfließen niemals in den Kontext vontenant-b.network.comein. - Web Application Firewalls (WAF) und CDN-Regeln können granulare Sicherheitsrichtlinien an einzelne Hostnamen koppeln.
- Reverse-Proxy-Konfigurationen in Nginx oder Envoy mappen eingehende Host-Header mit minimalem Aufwand direkt auf Backend-Upstreams.
In einer Subdirectory-Netzwerktopologie:
- Jede Anfrage passiert die primäre Apex-Domain. Dadurch werden alle für den Root-Pfad gesetzten Cookies an sämtliche Sub-Sites übertragen, sofern kein expliziter Pfadfilter in
wp-config.phpgreift. - Reverse-Proxy-Regeln müssen präzise zwischen Kern-Endpunkten (
/wp-admin,/wp-includes,/wp-json), statischen Asset-Verzeichnissen (/wp-content) und Permalinks einzelner Mandanten (/tenant-slug/*) unterscheiden. - Seiten-Caches erfordern komplexe Regex-Regeln, um zu verhindern, dass gecachte Seiten benachbarter Subdirectories fehlerhaft ausgeliefert werden.
- Namenskonflikte zwischen reservierten WordPress-Routen und Mandantenpfaden erzwingen eine strikte Sperrliste bei der Registrierung neuer Websites.
Für Netzwerke mit über 1.000 Mandanten bietet die Subdomain-Topologie überlegene Sicherheitsisolation, einfachere Proxy-Routing-Tabellen und eindeutige Grenzen für Edge-Cache-Invalidierungen.
Datenbankschema und zentrale Netzwerk-Tabellen
Multisite ersetzt das relationale Standard-Layout von MySQL durch ein mandantenfähiges Mehrschicht-Schema. Der Zustand des Gesamtsystems wird über zwei zentrale Tabellen gesteuert:
wp_site: Definiert die Netzwerk-Instanz selbst und speichert Hauptdomain sowie Basispfad der Installation (vor allem relevant, wenn mehrere Netzwerke überWP_ALLOW_MULTISITEbetrieben werden).wp_blogs: Das verbindliche Verzeichnis sämtlicher Mandanten. Jede Zeile repräsentiert eine Site mit Feldern wieblog_id,site_id,domain,path,registered,last_updated,public,archived,mature,spam,deletedundlang_id.
Trifft ein HTTP-Aufruf auf WordPress, fragt ms_load_current_site_and_network() die Tabelle wp_blogs basierend auf Domain und Pfad ab, um das globale Objekt $current_blog zu initialisieren und die Variable $blog_id festzulegen.
Über die Verzeichnistabellen hinaus trennt Multisite Benutzeridentitäten von Inhalten. Benutzerkonten werden in globalen Tabellen konsolidiert:
wp_users: Geteilt über das gesamte Netzwerk. Jedes Benutzerkonto existiert global genau einmal.wp_usermeta: Speichert Benutzer-Metadaten inklusive rollenbezogener Berechtigungen pro Website. Berechtigungen sind dynamisch über den Blog-Präfix geschlüsselt (beispielsweisewp_capabilitiesfür Site 1,wp_2_capabilitiesfür Site 2 undwp_1042_capabilitiesfür Site 1042).
Alle Inhaltsdaten replizieren sich mandantenspezifisch mit numerischem Präfix: wp_{blog_id}_posts, wp_{blog_id}_postmeta, wp_{blog_id}_options, wp_{blog_id}_comments, wp_{blog_id}_commentmeta, wp_{blog_id}_terms und wp_{blog_id}_term_relationships. Bei 1.200 Sites umfasst das relationale Schema mehr als 12.000 Tabellen. Dieser Umfang erfordert gezieltes Tuning von MySQL-Parametern, insbesondere table_open_cache (mindestens 32.000), innodb_open_files (mindestens 64.000) sowie innodb_file_per_table=1, um eine Erschöpfung von Datei-Handles im Betriebssystem auszuschließen.
Geteilte Benutzertabellen und Authentifizierungsgrenzen
Die Bündelung von Benutzerkonten in den globalen Tabellen wp_users und wp_usermeta führt bei großen Netzwerken zu spezifischen Engpässen und Sicherheitsrisiken.
Skalierung von Benutzertabellen und Metadaten
In einem Netzwerk mit über 1.000 Websites und hunderttausenden registrierten Nutzern wächst wp_usermeta schnell auf zweistellige Millionenzahlen an Zeilen an. Da Rollenberechtigungen als serialisierte Arrays unter Blog-Präfixen (wp_{blog_id}_capabilities) gespeichert sind, lösen Berechtigungsprüfungen Abfragen auf nicht indexierte Meta-Keys aus.
Gegenmaßnahmen gegen Performance-Einbrüche:
- Zusammengesetzte Indizes: Ergänzen Sie Datenbank-Indizes für
(user_id, meta_key(191))inwp_usermeta, um Rollenabfragen beim Login-Handshake zu beschleunigen. - Externe Verzeichnisanbindung: Verlagern Sie die Authentifizierung vollständig auf Identitätsanbieter via SAML 2.0 oder OpenID Connect (OIDC) wie Okta, Microsoft Entra ID oder Keycloak. Benutzer authentifizieren sich extern, und WordPress erstellt Sessions Just-In-Time (JIT) ohne lokale Passwort-Hashes.
- SCIM-Synchronisation: Implementieren Sie SCIM-Schnittstellen zur automatischen Rechte-Deprovisionierung. Verlässt ein Mitarbeiter das Unternehmen, entzieht die Deaktivierung in Entra ID sofort den Zugang zu allen 1.000+ Websites.
Super-Admin-Rechte und Rollensegmentierung
Die Berechtigung manage_network verleiht uneingeschränkte Kontrolle über die gesamte Plattform. Ein Super-Admin kann beliebigen Programmcode ausführen, Optionen in jeder Website ändern und ungeprüfte Plugins aktivieren.
Richtlinien für administrative Privilegien:
- Keine regulären Super-Admin-Accounts im Alltag: Der Super-Admin-Zugang muss CI/CD-Dienstkonten und Notfall-Accounts vorbehalten sein, die durch hardwarebasierte FIDO2/WebAuthn-Sicherheitsschlüssel geschützt sind.
- Eigene Zwischenrollen: Definieren Sie granulare Rollen wie
Cluster AdministratoroderAuditor, die spezifische Aufgaben wahrnehmen (manage_sites), ohne Zugriff aufmanage_network_pluginsoderunfiltered_htmlzu erhalten. - Vier-Augen-Prinzip: Verlangen Sie für risikoreiche Operationen wie Massenänderungen an Datenbanken oder Website-Löschungen kryptografische Freigaben zweier autorisierter Ingenieure.
Objekt-Cache-Architektur und globale Gruppen
Der Einsatz von Redis oder Memcached als persistenter Objekt-Cache ist für WordPress im Unternehmenseinsatz zwingend. Ohne saubere Gruppierung der Cache-Schlüssel führt die Standardkonfiguration jedoch zu Dateninkonsistenzen oder Speicherüberläufen.
Konfiguration globaler Cache-Gruppen
WordPress nutzt Cache-Gruppen zur logischen Strukturierung von Objekten. In Multisite werden Standardgruppen (posts, post_meta, options, terms) automatisch mit der aktuellen blog_id versehen. Globale Daten müssen dagegen allen Websites zur Verfügung stehen.
Die Funktion wp_cache_add_global_groups() registriert Gruppen, die ohne Site-Präfix im gemeinsamen Cache verwaltet werden:
// In wp-content/object-cache.php oder einem fruehen mu-plugin
wp_cache_add_global_groups([
"users",
"user_meta",
"user_logins",
"useremail",
"userslugs",
"site-transient",
"site-options",
"blog-lookup",
"blog-id-cache",
"networks",
"sites",
"global-posts",
]);Fehlen Gruppen wie blog-lookup oder site-options, muss WordPress bei jedem eingehenden HTTP-Request die MySQL-Datenbank abfragen, um die aufgerufene Domain einer Blog-ID zuzuordnen. Dies führt zu massiven Latenzspitzen.
Cache-Invalidierungsstürme und Speicherisolation
Wenn 1.000 Websites einen gemeinsamen Redis-Cluster nutzen:
- Verdrängungsstrategie: Konfigurieren Sie Redis mit
volatile-lruoderallkeys-lruund stellen Sie ausreichend Arbeitsspeicher bereit (mindestens 8 GB für große Netzwerke). - Cache-Salz pro Umgebung: Setzen Sie
WP_CACHE_KEY_SALTinwp-config.phpfür Staging und Produktion eindeutig, damit Schlüssel bei Deployment-Synchronisationen nicht kollidieren. - Kein globales Cache-Leeren: Führen Sie im Produktivbetrieb niemals
redis-cli flushdboderwp_cache_flush()aus. Das vollständige Leeren des Caches über 1.000 Sites führt zu schlagartigen Cache-Stampedes (Dogpiling), bei denen tausende gleichzeitige Datenbankabfragen den MySQL-Verbindungspool überlasten. Invalidieren Sie stattdessen gezielt einzelne Gruppen oder Schlüssel.
Performance-Probleme von switch_to_blog bei Stapelverarbeitung
Die häufigste Ursache für Speichererschöpfung und Systemabstürze bei Multisite-Wartungsarbeiten ist der fehlerhafte Einsatz von switch_to_blog().
Mechanik des Kontextwechsels
Wird switch_to_blog( $new_blog_id ) aufgerufen, durchläuft WordPress eine Kette globaler Zustandsänderungen:
- Sichert die aktuelle Site-ID, Tabellenpräfixe und Datenbank-Handles auf dem internen Stack
$GLOBALS["_wp_switched_stack"]. - Aktualisiert
$wpdb->blogidund setzt Tabellenreferenzen neu (z. B.$wpdb->postsaufwp_{new_blog_id}_posts). - Passt die Upload-Pfade über
wp_upload_dir()an. - Schaltet Cache-Zeiger der Options-Tabelle um und lädt mandantenspezifische Optionen.
Nach Abschluss der Arbeiten stellt restore_current_blog() den vorherigen Zustand vom Stack wieder her und korrigiert die Präfixe.
Speicherlecks in switch_to_blog Schleifen
Für einzelne Aufrufe unproblematisch, erzeugt eine Schleife über 1.000 Websites mit switch_to_blog() erhebliche Speicherlecks:
// ANTIPATTERN: Diese Schleife fuehrt bei 1.000 Sites zu Memory-Exhaustion
$sites = get_sites(["number" => 1500]);
foreach ($sites as $site) {
switch_to_blog($site->blog_id);
// Abfragen, Options-Updates, Taxonomien
restore_current_blog();
}Gründe für den Speicherüberlauf:
- Anwachsende interne Arrays: Kernfunktionen legen Metadaten, SQL-Queries und registrierte Post-Types in globalen Speicher-Arrays ab (
$wp_object_cache,$wpdb->queries,$wp_filter), die während des laufenden Prozesses nicht aufgeräumt werden. - Verbleibende Filter und Hooks: Während eines Site-Kontexts registrierte Hooks verbleiben häufig in globalen Filter-Arrays und feuern fälschlicherweise in nachfolgenden Sites weiter.
- Abfrage-Logging: Ist
SAVEQUERIESaktiv, speichert$wpdb->queriesjedes ausgeführte SQL-Statement aller 1.000 Websites und belegt innerhalb weniger Minuten hunderte Megabyte RAM.
Sicheres Muster für Batch-Operationen mit Speicherrückgewinnung
Um tausende Websites stabil zu verarbeiten, müssen Wartungsskripte in Batches aufgeteilt und interne Caches zyklisch geleert werden:
// ROBUSTES MUSTER: Batch-Verarbeitung mit Speicherbereinigung
$site_ids = get_sites([
"fields" => "ids",
"number" => 0,
"archived" => 0,
"deleted" => 0,
]);
$batch_size = 50;
$chunks = array_chunk($site_ids, $batch_size);
foreach ($chunks as $chunk) {
foreach ($chunk as $blog_id) {
switch_to_blog($blog_id);
// Wartungsoperation fuer die jeweilige Website ausfuehren
process_site_maintenance($blog_id);
restore_current_blog();
}
// In-Memory-Caches zwischen den Batches gezielt zuruecksetzen
if (function_exists("wp_cache_flush_runtime")) {
wp_cache_flush_runtime();
} elseif (is_object($GLOBALS["wp_object_cache"]) && method_exists($GLOBALS["wp_object_cache"], "flush")) {
$GLOBALS["wp_object_cache"]->flush();
}
// SQL-Abfrageprotokoll zuruecksetzen
if (isset($GLOBALS["wpdb"]) && is_object($GLOBALS["wpdb"])) {
$GLOBALS["wpdb"]->queries = [];
}
// PHP Garbage Collection explizit ausloesen
gc_collect_cycles();
}Bei umfangreichen Migrationen ist es am sichersten, auf In-Process-Kontextwechsel komplett zu verzichten und jede Website in einem isolierten WP-CLI-Subprozess zu verarbeiten.
Richtlinien für die Netzwerk-Aktivierung von Plugins und Themes
Das Management von Software über 1.000 Websites erfordert strenge Governance über Plugin-Lebenszyklen. Dürfen lokale Seitenbetreiber beliebige Plugins aktivieren, entstehen Sicherheitslücken, Performance-Verluste und Schema-Konflikte.
Netzwerk-Aktivierung im Vergleich zur lokalen Aktivierung
In WordPress Multisite existieren Plugins in drei operativen Zuständen:
- Netzwerkweit aktiviert (Network Activated): Im Netzwerk-Admin global aktiviert. Das Plugin läuft auf jeder Website des Netzwerks und kann von Site-Administratoren weder deaktiviert noch lokal umgangen werden.
- Im Netzwerk verfügbar: Liegt im Verzeichnis
wp-content/pluginsund kann von lokalen Website-Administratoren nach Bedarf im Dashboard aktiviert werden. - Must-Use (
mu-plugins): Werden von der PHP-Laufzeitumgebung automatisch auswp-content/mu-pluginsvor regulären Plugins geladen. Sie können im WordPress-Dashboard unter keinen Umständen deaktiviert werden.
Best Practices für unternehmensweite Plugin-Richtlinien
Für maximale Systemstabilität in Großnetzwerken:
- Keine manuelle Installation im Dashboard: Deaktivieren Sie Dateiänderungen und Plugin-Installationen über das Dashboard vollständig mittels
define("DISALLOW_FILE_MODS", true);inwp-config.php. - Kern-Architektur in mu-plugins: Platzieren Sie Governance-, Sicherheits-, SSO-, Cache- und Logging-Logik in
wp-content/mu-plugins, damit diese Schutzschichten nicht umgangen werden können. - Mandantensegmentierung per Metadaten: Benötigt eine Teilgruppe spezifische Plugins (z. B. E-Commerce auf 50 von 1.000 Sites), steuern Sie die Aktivierung über Site-Metadaten und Code-Filter statt manueller Klicks:
// In mu-plugins/tenant-feature-flags.php
add_filter("option_active_plugins", function ($plugins) {
$blog_id = get_current_blog_id();
$tier = get_site_meta($blog_id, "tenant_tier", true);
if ($tier === "ecommerce") {
$plugins[] = "woocommerce/woocommerce.php";
}
return array_unique($plugins);
});Dadurch bleibt die Softwareverteilung vollständig über Git-Repositories und zentrale Datenbank-Metadaten steuerbar.
WP-CLI-Automatisierung und Netzwerkverwaltung
Die manuelle Verwaltung von mehr als 1.000 Websites über das Web-Dashboard ist unmöglich. Die Automatisierung mittels WP-CLI bildet das Rückgrat des Multisite-Betriebs.
Netzwerkbefehle und Batch-Workflows
WP-CLI bietet umfassende native Unterstützung für Multisite über die Befehlsfamilien wp site und wp network.
Wichtige Steuerungsbefehle:
# Alle aktiven Blog-IDs in eine Liste exportieren
wp site list --field=blog_id --archived=0 --deleted=0 > active_sites.txt
# Parallele Pruefung des Plugin-Status mittels xargs
cat active_sites.txt | xargs -n 1 -P 4 -I {} wp plugin is-active redis-cache --url="$(wp site get {} --field=url)"
# Strukturierte Suchen-und-Ersetzen-Operation ueber alle Tabellen
wp site list --field=url | while read site_url; do
echo "Verarbeite Website: $site_url"
wp search-replace "https://alte-domain.de" "https://neue-domain.de" --url="$site_url" --precise --skip-columns=guid --recurse-objects
doneParallele Wartungsläufe mit xargs
Das sequentielle Abarbeiten von 1.000 Websites nimmt bei rechenintensiven Aufgaben wie Index-Aktualisierungen oder Cache-Aufwärmungen viele Stunden in Anspruch. Die Nutzung von System-Parallelität senkt die Laufzeit um bis zu 90%:
#!/usr/bin/env bash
# Paralleler Wartungslaeufer fuer Multisite-Netzwerke
set -euo pipefail
WP_PATH="/var/www/html"
CONCURRENCY=8
mapfile -t BLOG_IDS < <(wp site list --path="$WP_PATH" --field=blog_id --archived=0 --deleted=0)
echo "Starte Wartung fuer ${#BLOG_IDS[@]} Websites mit Parallelitaet $CONCURRENCY"
printf "%s
" "${BLOG_IDS[@]}" | xargs -I {ID} -P "$CONCURRENCY" bash -c '
SITE_URL=$(wp site get "{ID}" --field=url --path="'"$WP_PATH"'")
wp transient delete --expired --url="$SITE_URL" --path="'"$WP_PATH"'" --quiet
wp cache flush --url="$SITE_URL" --path="'"$WP_PATH"'" --quiet
'
echo "Netzwerkwartung erfolgreich abgeschlossen."Durch das Starten eigenständiger CLI-Prozesse pro Website verfügt jeder Durchlauf über einen frischen Speicherbereich, wodurch kumulative Speicherlecks vermieden werden.
Automatisiertes Mandanten-Provisioning mit Blueprints und WP-CLI
Das Skalieren auf über 1.000 Websites erfordert kontinuierliche und fehlerfreie Neuanlagen von Mandanten. Der Bereitstellungsprozess muss deterministisch und vollständig reproduzierbar sein.
Moderne Blueprint-Architektur
Die manuelle Erstellung von Websites im Administrationsbereich birgt das Risiko von Konfigurationsfehlern und Sicherheitslücken. Zeitgemäßes Platform Engineering setzt auf automatisierte Blueprints, die über Webhooks oder interne Entwicklerportale ausgelöst werden.
Eine vollständige Bereitstellungspipeline umfasst folgende Schritte:
- Validierung: Prüfung der gewünschten Subdomain oder Pfad-Verfügbarkeit gegen geschützte Systemnamen.
- Mandantenregistrierung: Ausführung von
wp site createmit definierten Metadaten-Flags. - Schemainitialisierung: Einspielen von Datenbank-Migrationen und Setzen von Standardoptionen (Zeitzone, Permalinks, Sprache).
- Asset-Isolation: Zuweisung dedizierter S3-Bucket-Präfixe für Medien-Uploads.
- Rollenzuweisung: Verknüpfung der zuständigen Administratoren über den zentralen SSO-Identitätsanbieter.
- Verifikationstests: Automatisierte Überprüfung von HTTP-Statuscode, TLS-Zertifikat und Sicherheits-Headern.
Bereitstellungsskript für Produktivumgebungen
#!/usr/bin/env bash
# Automatisiertes Provisioning fuer neue Mandanten
set -euo pipefail
SUBDOMAIN="$1"
SITE_TITLE="$2"
ADMIN_EMAIL="$3"
TIER="${4:-standard}"
NETWORK_DOMAIN="enterprise.internal"
FULL_SLUG="${SUBDOMAIN}.${NETWORK_DOMAIN}"
echo "Starte automatisiertes Provisioning fuer ${FULL_SLUG}..."
# 1. Website im Multisite-Verzeichnis anlegen
NEW_BLOG_ID=$(wp site create --slug="$SUBDOMAIN" --title="$SITE_TITLE" --email="$ADMIN_EMAIL" --porcelain)
echo "Website registriert mit blog_id: $NEW_BLOG_ID"
# 2. Standardoptionen konfigurieren
SITE_URL="https://${FULL_SLUG}"
wp option update permalink_structure "/%postname%/" --url="$SITE_URL"
wp option update blogdescription "" --url="$SITE_URL"
wp option update default_comment_status "closed" --url="$SITE_URL"
wp option update default_ping_status "closed" --url="$SITE_URL"
wp option update timezone_string "Europe/Berlin" --url="$SITE_URL"
# 3. Metadaten in der Datenbank hinterlegen
wp site meta set "$NEW_BLOG_ID" tenant_tier "$TIER"
wp site meta set "$NEW_BLOG_ID" provisioning_timestamp "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
# 4. Standard-Theme aktivieren
wp theme activate "enterprise-core-theme" --url="$SITE_URL"
# 5. Caches der neuen Website leeren
wp cache flush --url="$SITE_URL"
echo "Provisioning erfolgreich abgeschlossen fuer $SITE_URL (ID: $NEW_BLOG_ID)"Die Einbindung dieses Skripts in GitOps-Pipelines ermöglicht es Entwicklungsteams, vollständig konforme und sichere WordPress-Instanzen in unter 15 Sekunden bereitzustellen.
Ring-Deployments und Canary-Release-Pipelines
Die gleichzeitige Aktualisierung von Core, Themes oder Plugins auf 1.000 Websites stellt ein untragbares Betriebsrisiko dar. Ein einziger fataler Fehler in einem Template kann den Geschäftsbetrieb lahmlegen.
Progressive Rollout-Architektur
Unternehmensweite Governance nutzt gestufte Ring-Deployments (Canary Releases):
+--------------------------------------------------------------+
| Ring 0: Synthetische Test-Websites (Playwright E2E-Tests) |
+--------------------------------------------------------------+
| Erfolgreich
v
+--------------------------------------------------------------+
| Ring 1: Interne Staging-Mandanten (10 interne Team-Websites) |
+--------------------------------------------------------------+
| Beobachtung (2 Stunden)
v
+--------------------------------------------------------------+
| Ring 2: Canary-Mandanten (5% unkritische Produktiv-Websites) |
+--------------------------------------------------------------+
| Beobachtung (24 Stunden)
v
+--------------------------------------------------------------+
| Ring 3: Allgemeiner Rollout (Verbleibende 95% des Netzwerks) |
+--------------------------------------------------------------+GitOps-Automatisierung und Qualitäts-Gates
CI/CD-Pipelines (GitHub Actions, GitLab CI) steuern Rollouts anhand von Echtzeit-Telemetrie:
- Die Pipeline stellt den aktualisierten Code-Stand auf dem Staging-Cluster bereit.
- Eine automatisierte Playwright-Testsuite überprüft kritische Nutzungspfade auf repräsentativen Seitentypen.
- Die Pipeline aktualisiert die Metadaten für Websites in Ring 1 und schaltet die neue Version über Code-Filter frei.
- Monitoring-Systeme (Prometheus, Datadog) überwachen PHP-Fehlerraten, 5xx-Antworten und Datenbanklatenzen.
- Übersteigt die Fehlerrate 0,05%, setzt die Pipeline die Metadaten automatisch zurück, wodurch der Datenverkehr sofort wieder auf die stabile Vorgängerversion geleitet wird, ohne Code auf den Servern zurückrollen zu müssen.
Fazit
Die Skalierung von WordPress Multisite auf über 1.000 Websites ist eine anspruchsvolle Aufgabe im Platform Engineering, die exakte Datenbankoptimierung und durchgängige Automatisierung erfordert. Durch die Ablösung manueller Dashboard-Abläufe durch WP-CLI-Skripte, die richtige Konfiguration globaler Cache-Gruppen, das Vermeiden von Speicherfallen bei switch_to_blog und die Etablierung progressiver Canary-Rollouts verwandeln Entwicklerteams WordPress in eine verlässliche und sichere Mandantenplattform auf Enterprise-Niveau.







