Die kurze Antwort
Ein dedizierter Gameserver ist betriebsbereit, wenn die Menschen, die ihn betreiben werden, ihn ohne den Entwickler, der ihn geschrieben hat, bauen, deployen, konfigurieren, beobachten, zurückrollen und wiederherstellen können. Solange das nicht zutrifft, ist der Server ein funktionierendes Programm, aber noch kein Service.
Diese Definition ist kurz vor dem Release oder vor dem Start von LiveOps nützlich, weil sie ein vages Gefühl („läuft auf Staging, wird schon passen“) in überprüfbare Nachweise übersetzt. Jeder der folgenden Bereiche verlangt etwas Konkretes: eine Pipeline, ein Dokument, ein Dashboard, ein geübtes Verfahren. Fehlt der Nachweis, ist der Bereich nicht fertig, ganz gleich, wie gut der Server in Playtests läuft.
Der Artikel geht die Bereiche in der Reihenfolge durch, in der sie typischerweise scheitern, und fasst sie am Ende in einer Checkliste zusammen, mit Zuständigkeit und einer „Erledigt, wenn“-Bedingung pro Zeile.
Zwei Zuständige, eine Grenze
Die meisten Übergabeprobleme sind Zuständigkeitsprobleme. Zwei Rollen sind beteiligt, auch wenn dasselbe Unternehmen beide ausfüllt:
- Der Spieleentwickler verantwortet, was innerhalb des Prozesses läuft: den Headless-Server-Build, den Start-Vertrag, spielspezifische Health-Signale, Logs und Metriken, die Versionskompatibilität und das Verhalten eines Matches, wenn etwas schiefgeht.
- Der Infrastrukturbetreiber verantwortet, wo und wie der Prozess läuft: Hosting-Accounts, Regionen, Hosts oder Cluster, die Container-Registry, Secrets, Log- und Metrik-Pipelines, das Routing von Alerts, Kapazität und Budget sowie die Rufbereitschaft.
Die Grenze zwischen beiden ist ein Vertrag: wie der Server gestartet wird, welche Konfiguration er erwartet, welche Signale er ausgibt, wie er gestoppt werden muss und was „gesund“ bedeutet. Halten Sie diesen Vertrag früh schriftlich fest. Der Großteil der Checkliste prüft, ob beide Seiten ihren Teil eingehalten haben.
1. Ein reproduzierbarer Build
Alles andere hängt davon ab, ob Sie genau den Server erzeugen können, den Sie betreiben wollen. In der Praxis heißt das:
- Der Headless-Server wird von einem automatisierten Job aus einem getaggten Commit gebaut und nicht aus dem Editor einer einzelnen Person exportiert.
- Engine-Version, Pakete und Build-Einstellungen sind fixiert, sodass derselbe Tag auch in einem Monat dasselbe Ergebnis liefert.
- Jeder Build trägt eine Build-ID (Version, Commit, Build-Nummer), die der Server beim Start ausgibt und an seine Logs anhängt.
- Server-spezifische Codepfade und entfernte Assets werden in diesem Build getestet, statt vom Client darauf zu schließen.
Der typische Fehler ist leise: ein Server, der sich nur auf einem Rechner bauen lässt, oder ein Hotfix, der nicht reproduzierbar ist, weil niemand weiß, welche lokale Änderung darin steckt.
2. Deployment
Ein Deployment sollte eine wiederholbare Aktion sein, keine Abfolge manueller Befehle auf einem Server. Bei containerisierten Servern liegt die Image-Definition im Repository, das Image ist mit der Build-ID getaggt, und Staging und Produktion werden über denselben Mechanismus mit unterschiedlichen Eingaben deployt.
Der Spieleentwickler ist dafür verantwortlich, dass das Image mit dokumentierten Eingaben sauber startet. Der Betreiber ist für Registry, Deployment-Plattform und Zugänge verantwortlich. Ein guter Test dieser Grenze: Kann der Betreiber einen neuen Build allein anhand der Dokumentation auf Staging deployen?
3. Konfiguration
An der Konfiguration scheitert „läuft auf Staging“ in der Produktion am häufigsten. Listen Sie jede Einstellung auf, die der Server liest: Ports, Regions- oder Umgebungsnamen, Backend-Endpunkte, Match-Regeln, Tick- oder Simulationseinstellungen, Log-Level, Zugangsdaten. Halten Sie für jede Einstellung fest: Standardwert, Wert pro Umgebung, ob es sich um ein Secret handelt und wer sie ändern darf.
Zwei Verhaltensweisen machen Konfiguration sicher. Der Server validiert seine Konfiguration beim Start und verweigert mit einer klaren Log-Meldung den Start, wenn etwas fehlt oder ungültig ist. Und Secrets kommen aus dem Secret Store des Betreibers, niemals aus dem Image oder dem Repository.
4. Regionen und Kapazitätsannahmen
In diesem Bereich ist die Versuchung am größten, eine Zahl zu nennen. Widerstehen Sie ihr, solange die Zahl keinen Nachweis hat. Kapazität hängt von der Spielsimulation, dem Hosting-Modell, der Hardware und dem tatsächlichen Spielerverhalten ab. Eine Zahl aus einem anderen Spiel oder aus einem ruhigen Playtest sagt deshalb sehr wenig aus.
Führen Sie statt einer Zahl ein kurzes Annahmenregister. Jeder Eintrag enthält:
- die Annahme (zum Beispiel Spieler pro Match, Matches pro Host, Speicher und CPU pro Match, Zielregionen, erwartete Spitzenzeiten),
- ihre Grundlage: gemessen (mit Link zum Test und zur Build-ID), geschätzt (mit Begründung) oder unbekannt,
- das Datum und den Build, für den sie gilt,
- die zuständige Person und den Test, der sie durch eine Messung ersetzen wird.
Für Kosten gilt dieselbe Regel: Dokumentieren Sie die Kostentreiber (Instanz- oder Host-Typ, Regionen, ungenutzte Kapazität, ausgehender Traffic, Aufbewahrung von Logs und Metriken) und von welchen Annahmen sie abhängen, statt eines einzelnen Monatsbetrags, den niemand nachvollziehen kann. Der Spieleentwickler misst, welche Ressourcen ein Match benötigt; der Betreiber leitet daraus Host-Dimensionierung, Kontingente und Budget ab.
5. Logs, Metriken und Crash-Observability
Ein Spieler meldet einen Verbindungsabbruch am Samstag um 21:40 Uhr. Kann der Betreiber dieses Match finden, das Server-Log lesen und sehen, was der Prozess gerade getan hat? Dieses Szenario ist ein besserer Test als jeder Dashboard-Screenshot.
- Logs sind strukturiert und enthalten in jeder Zeile Build-ID, Server- oder Match-ID und Region. Aufbewahrung und Zugriff sind festgelegt.
- Metriken decken den Prozess (CPU, Speicher, Neustarts) und das Spiel ab (Frame- oder Tick-Zeit des Servers, verbundene Spieler, Match-Status, fehlgeschlagene Verbindungen). Der Spieleentwickler legt fest, welche Spielmetriken zählen; der Betreiber verantwortet Erfassung, Speicherung und Alert-Routing.
- Crashes erzeugen einen Report oder Dump, und die Debug-Symbole jedes veröffentlichten Builds werden aufbewahrt, damit der Report später lesbar ist. Die Neustart-Policy ist explizit, damit eine Crash-Schleife sichtbar wird, statt still Kapazität zu verbrauchen.
- Alerts starten mit vorsichtigen, dokumentierten Anfangsschwellen, und jeder verweist auf einen Runbook-Eintrag. Ein Alert, auf den niemand zu reagieren weiß, ist Rauschen.
6. Versionierung
Client, Server, Netzwerkprotokoll und Content-Versionen brauchen eine festgelegte Kompatibilitätsregel. Der Session- oder Matchmaking-Flow sollte einen Client nur zu einem Server schicken, mit dem er kommunizieren kann, und ein Client mit unpassender Version sollte eine definierte Meldung erhalten statt eines Timeouts. Schreiben Sie die Regel auf: Welche Versionsänderungen erfordern ein abgestimmtes Client- und Server-Release, und welche können unabhängig ausgeliefert werden?
7. Rollout und Rollback
Dedizierte Server hosten laufende Matches, deshalb ist „eine neue Version deployen“ nie nur ein Neustart. Entscheiden und dokumentieren Sie:
- ob neue Matches auf der neuen Version starten, während laufende Matches auf der alten zu Ende gehen (Draining), und wie lange das Draining dauern darf;
- wie der Server auf ein Terminierungssignal reagiert: keine neuen Spieler annehmen, das Match sauber beenden oder abschließen, Logs schreiben und innerhalb der Grace Period beenden;
- wie ein Rollback funktioniert: Das vorherige Image bleibt erhalten, das Verfahren ist dokumentiert und auf Staging geübt;
- wer über einen Rollback entscheidet und anhand welcher Signale.
Der Spieleentwickler legt Kompatibilitätsgrenzen und Shutdown-Verhalten fest; der Betreiber führt Rollouts und Rollbacks durch.
8. Fehlerszenarien
Listen Sie die erwarteten Fehler und das gewünschte Verhalten für jeden auf. Eine kurze Tabelle genügt: Szenario, Verhalten für Spieler, Erkennungssignal, Runbook-Schritt. Typische Einträge sind ein Server-Crash mitten im Match, der Ausfall eines Hosts, eine nicht erreichbare Region, ein ausgefallener Backend-Dienst (Sessions, Authentifizierung, Persistenz), ein fehlerhafter Konfigurationswert und fehlende Kapazität zu Spitzenzeiten.
Vor dem Release werden Sie nicht alle üben. Üben Sie die mit der größten Auswirkung, und sorgen Sie dafür, dass die übrigen zumindest ein Erkennungssignal und eine zuständige Person haben.
9. Zuständigkeit und Runbook
Das Runbook ist die Übergabe. Es enthält den Architekturüberblick, die Verfahren für Deployment, Rollback und Skalierung, die Konfigurationsreferenz, die Dashboards und wie der Normalzustand darauf aussieht, die Tabelle der Fehlerszenarien, das Annahmenregister, bekannte Grenzen, die Kostentreiber und den Eskalationsweg, einschließlich dessen, was außerhalb der Arbeitszeiten passiert.
Der laufende Betrieb nach der Übergabe ist eine eigene Entscheidung. Bleibt der Entwickler beteiligt, werden Umfang und Reaktionserwartungen ausdrücklich vereinbart. Falls nicht, muss der Betreiber allein mit dem Runbook arbeiten können.
Die Übergabe-Checkliste
Nutzen Sie diese Tabelle im Readiness-Review vor dem Release oder vor LiveOps. „Entwickler“ ist das Team, das Servercode und Build verantwortet; „Betreiber“ ist das Team, das Hosting und den täglichen Betrieb verantwortet.
| Bereich | Erforderlicher Nachweis | Zuständig | Erledigt, wenn |
|---|---|---|---|
| Reproduzierbarer Build | Automatisierter Headless-Server-Build aus einem getaggten Commit; fixierte Engine- und Paketversionen; eingebettete Build-ID | Entwickler | Jemand, der die Pipeline nicht geschrieben hat, baut denselben Server aus einem Tag, und der Server loggt die Build-ID beim Start |
| Container-Image | Image-Definition im Repository; mit Build-ID getaggtes Image; dokumentiertes Base-Image und Laufzeitabhängigkeiten | Entwickler (Inhalt); Betreiber (Registry und Image-Richtlinien) | Das Image startet auf Staging nur mit dokumentierten Eingaben |
| Deployment | Skriptbasiertes oder deklaratives Deployment für Staging und Produktion; keine manuellen Schritte auf Hosts | Betreiber (Plattform und Zugänge); Entwickler (Start-Vertrag) | Der Betreiber deployt einen neuen Build anhand der Dokumentation ohne Hilfe des Entwicklers auf Staging |
| Konfiguration | Referenz aller Einstellungen: Standardwert, Wert pro Umgebung, Secret oder nicht, wer sie ändern darf | Entwickler definiert; Betreiber liefert Werte und Secrets | Der Server startet bei fehlender oder ungültiger Konfiguration nicht und loggt, welcher Wert falsch ist |
| Health und Shutdown | Readiness- und Liveness-Signale; Meldung des Match-Status; dokumentierte Grace Period beim Beenden | Entwickler | Das Stoppen eines Servers während eines Testmatches folgt auf Staging dem dokumentierten Verhalten |
| Regionen und Kapazität | Annahmenregister mit Grundlage (gemessen, geschätzt, unbekannt), Datum, Build und zuständiger Person; Liste der Kostentreiber | Entwickler (Ressourcen pro Match); Betreiber (Dimensionierung, Kontingente, Budget) | Jede Kapazitäts- oder Kostenzahl im Plan verweist auf eine Messung oder ist als Annahme mit ersetzendem Test markiert |
| Logs | Strukturierte Logs mit Build-ID, Server- oder Match-ID und Region; Aufbewahrung und Zugriff festgelegt | Entwickler erzeugt; Betreiber erfasst und bewahrt auf | Der Betreiber findet alle Logs eines Matches anhand einer Spielermeldung |
| Metriken und Alerts | Prozess- und Spielmetriken; Dashboard; dokumentierte Anfangsschwellen | Entwickler (Spielmetriken); Betreiber (Pipeline, Routing, Rufbereitschaft) | Jeder Alert verweist auf einen Runbook-Eintrag und wurde auf Staging mindestens einmal ausgelöst |
| Crashes | Crash-Erfassung, aufbewahrte Symbole pro veröffentlichtem Build, explizite Neustart-Policy | Entwickler (Symbole, Analyse); Betreiber (Erfassung, Speicherung, Neustarts) | Ein absichtlicher Crash auf Staging liefert einen lesbaren Report, der einer Build-ID zugeordnet ist |
| Versionierung | Schriftliche Kompatibilitätsregel für Client, Server, Protokoll und Content; im Session-Flow durchgesetzt | Entwickler | Ein Client mit unpassender Version wird mit einer definierten Meldung abgewiesen, getestet |
| Rollout und Rollback | Rollout-Strategie mit Draining; Rollback-Verfahren; vorheriges Image aufbewahrt; Entscheider benannt | Betreiber führt aus; Entwickler definiert Grenzen | Ein Rollback wurde auf Staging geübt, einschließlich des Umgangs mit laufenden Matches |
| Fehlerszenarien | Szenariotabelle: Verhalten für Spieler, Erkennungssignal, Runbook-Schritt | Gemeinsam | Jedes Szenario hat eine zuständige Person und ein Signal; die wichtigsten sind geübt |
| Runbook und Zuständigkeit | Runbook, Eskalationsweg, bekannte Grenzen, Supportvereinbarung oder ausdrücklich „kein Support“ | Gemeinsam, von beiden Seiten abgenommen | Der Betreiber führt ein Deployment, einen Rollback und eine Störungsübung allein mit dem Runbook durch |
Worauf wir uns stützen
Unsere eigene Referenz ist Bad Goons, die aktuelle Eigen-IP von Sourcegarden Studio, die sich in aktiver Entwicklung befindet. Das Spiel betreibt Unity-Headless-Builds auf autoritativen dedizierten Linux-Servern mit containerisiertem Deployment, und Kapazität, Shutdown, Health, Logs und Versions-Rollout behandeln wir als Themen des Spiels selbst, nicht als Infrastrukturproblem anderer. Bad Goons ist auf Matches mit 64 Spielern ausgelegt; das ist ein Designziel, keine gemessene Kapazität, und genau deshalb empfiehlt dieser Artikel ein Annahmenregister statt einer plakativen Zahl.
Die Checkliste ist eine allgemeine fachliche Empfehlung, die auf dieser Arbeit aufbaut. Sie ist keine Aussage darüber, dass jeder Punkt bereits unter realem Spieler-Traffic erprobt wurde.
Wo das im Projekt hingehört
Die Checkliste steht am Ende eines Prozesses, der deutlich früher beginnt. Sind die Grenzen zwischen dem Echtzeit-Match und den Services darum herum noch unklar, beginnen Sie mit dem Netzwerkmodell auf der Seite zur Multiplayer-Entwicklung und mit der Frage, was Sie vor einer Schätzung für ein Game-Backend klären sollten. Am günstigsten vereinbaren Sie Zuständigkeiten vor dem ersten Deployment, nicht in der Woche vor dem Launch.
Läuft Ihr Server bereits, sind die oben genannten Nachweise aber dünn, zeigt eine kurze Prüfung anhand dieser Tabelle meist, wo Sie ansetzen sollten. Genau solche Arbeit leisten wir in der Game-Backend-Entwicklung: Deployment, Observability und eine Übergabe, mit der Ihr Team den Betrieb selbst übernehmen kann.