Antworten:
Ich vermute, dass sie die neueste Version ihres Codes bereitstellen, was erfordert, dass sie die Anwendung neu starten (und hoffentlich einige Tests ausführen, bevor sie den Zugriff wieder aktivieren). Aus dieser Sicht handelt es sich eher um ein StackOverflow-Problem als um ein ServerFault-Problem.
Ich denke, es ist möglich, ein Hot-Patching-System zu erstellen, aber es wäre notwendigerweise unglaublich kompliziert. Soweit ich weiß, besteht eine MMO-Server- "Anwendung" aus mehreren verschiedenen Komponenten:
Anmeldeserver - Ermöglicht die Authentifizierung und fungiert als "Hub" zwischen den Gameplay-Servern. Sobald ein Client im Spiel ist, interagiert er nicht mehr mit dem Anmeldeserver. In einem solchen System können Sie Patches anwenden und den Anmeldeserver neu starten, ohne das Gameplay zu beeinträchtigen (obwohl Sie einen Zeitraum haben, in dem sich Benutzer nicht anmelden können).
Gameplay-Server - Cluster von Maschinen, die zu logischen unabhängigen Einheiten ("Welten" usw.) zusammengefasst sind. Es wird davon ausgegangen, dass jedes Gameplay-Cluster eine Art internes Kommunikationsprotokoll verwendet, um dem jeweiligen Status zu entsprechen. Sie müssen wahrscheinlich jeden Cluster auf einmal patchen. Eine Möglichkeit, dies zu tun, besteht darin, ein Warm-Failover zu patchen. Dann müssten Sie beides können
Datenbankserver - Eine Art persistenter Datenspeicher, z. B. ein RDBMS. Hoffentlich nehmen Sie nicht so oft Änderungen am Datenspeicher vor. Vermutlich hat jeder Gameplay-Server / Cluster einen unabhängigen Datenspeicher. Möglicherweise können Sie denselben Trick bei einem warmen Failover anwenden (und den Gameplay-Servern anweisen, die Verbindung zu trennen, auf die Synchronisierung der alten und der Failover-Datenbank zu warten und dann die Verbindung zum Failover wiederherzustellen), aber das scheint mir ziemlich riskant zu sein.
Alle oben genannten Fälle erhöhen die Komplexität eines bereits komplexen Systems und führen eine Reihe von Stellen ein, an denen ein Codefehler zu Datenverlust oder Beschädigung führen kann.
Eine andere Lösung ist die Verwendung einer Sprache, die für eine 100% ige Verfügbarkeit ausgelegt ist und über integrierte Funktionen zum Hotpatching von laufendem Code verfügt. Erlang ist eine gute Wahl ( Hotpatching-Beispiel ), und Java verfügt über ähnliche Funktionen .
Hat sonst noch niemand Erfahrung damit? Huh.
Es gibt mehrere Gründe, die sowohl Code als auch Systeme überbrücken. Denken Sie zunächst daran, dass die meisten der aktuellen 'großen' MMO-Engines vor einigen Jahren programmiert wurden und trotz Grafik- und Technologie-Upgrades noch immer davon abhängen, wie viele dieser Systeme im Jahr 2000 oder so geschrieben wurden. Eve-Online zum Beispiel läuft immer noch auf einer großen Microsoft SQL Server-Instanz, weshalb sie immer versuchen, mehr herauszuholen, indem sie die Hardware aktualisieren.
Ein Beispiel für eine Verbesserung seit dem Start von WoW und EVE ist die Arbeit in verteilten Schlüssel- / Wertedatenbanken wie Google MapReduce (und seiner Open-Source-Implementierung Hadoop), extrem schnellen Warteschlangendiensten für die positive Antwortverarbeitung (Amazon SQS) und anderen. " Cloud "-orientierte Technologien.
Ich habe die meiste Erfahrung mit EVE (ich bin eher ein Laser- als ein Kampfaxt-Typ), daher sind einige dieser Beispiele eher EVE-orientiert.
Was die Gründe von Systems angeht:
Was die Gründe für die Software angeht:
Eine Wirtschaft mit geschlossenen und offenen Kreisläufen zu betreiben, ist ein Problem für MMO-Betreiber - wenn Sie mir nicht glauben, lesen Sie einige der wissenschaftlichen Artikel, die über Spielewirtschaft geschrieben wurden, und einige der Studien älterer Spiele wie Ultima Online hatte relativ primitive Volkswirtschaften. Die Analyse, die durchgeführt werden muss, um die offenen Schleifen aufzufüllen und um Betrug und andere negative wirtschaftliche Aktivitäten zu identifizieren, muss offline mit einer Momentaufnahme der Daten erfolgen, die manchmal nur durchgeführt werden kann, während die Datenbank vollständig gesperrt ist.
Wenn Sie bemerken, findet die Wartung von Eve in England zu Mittag statt, wo sich das primäre Rechenzentrum befindet.
Ich vermute, dass die Gesamtzeit, die Blizzard (ich schätze, dass es ein Dienstagmorgen ist, an dem Sie Ihre Frage stellen) für die Wartung des gesamten Clusters gilt. Nicht jeder Server benötigt so viel Zeit, um Arbeiten auszuführen.
Es könnte zwar möglich sein, einzelne Server schneller wieder hochzufahren, dies würde jedoch Schreie der Bevorzugung von Spielern verbieten, deren Bereiche früher in den Zeitplan fielen. Als solche halten sie alles nieder, bis die ganze Arbeit erledigt ist; Mit Hunderten von Realms, an denen gearbeitet werden muss, erledigen sie wahrscheinlich einen Großteil der Arbeit parallel, serialisieren jedoch immer noch eine letzte Überprüfung, bevor sie die Dinge wieder online stellen. Wenn Sie ein Hardware-Upgrade durchführen, wird dieses wahrscheinlich in so vielen Rechenzentren wie möglich serialisiert.
In Bezug auf die Gründe für die Durchführung der Wartung kann es sich zum Teil nur um einen Neustart der Leistung handeln. Es wäre zwar großartig, wenn solche Neustarts nicht erforderlich wären, aber die Kosten dafür im Vergleich zu den Auswirkungen, die sich daraus ergeben, können hier die Entscheidung treffen.
Wenn Sie sich ansehen, warum sie die Prozesse nicht in Clustern zusammenfassen und fortlaufende Wartungen durchführen können, deuten die wenig bekannten Kenntnisse der WoW-Infrastruktur darauf hin, dass für jeden Bereich mehrere Computer Dienste bereitstellen (einer für die Welt, einer für Instanzen und Schlachtzüge, einer für Schlachtfelder) , usw.) Sie verwenden keine vom Status gemeinsam genutzte Aktiv-Aktiv-Prozesskonfiguration. Es gibt keine Weitergabe des Live-Status, nur persistenter Daten über eine Datenbank.
Letztendlich stellen die Mechanismen der Bereitstellung eines statusbehafteten Onlinedienstes für eine so große Abonnentenbasis einige der Best Practices in Frage, die wir möglicherweise vertreten, wenn es um eine Website oder einen anderen herkömmlichen internetbasierten Dienst geht.
Bei einigen der kürzlichen längeren Ausfallzeiten in EvE Online ging es darum, neue Hardware wie ein schnelleres SAN zu installieren. Während ein Großteil der Daten technisch verschoben werden kann, indem eine neue Dateigruppe auf dem neuen Laufwerk erstellt und dann die Hauptdateigruppe geleert wird, hätte dies aufgrund konstanter E / A-Vorgänge zu einem längeren Zeitraum mit verringerter Leistung geführt. Deshalb haben sie sich dafür entschieden , die 1,1-TB-Datenbank zu trennen und sie auf einmal zu verschieben.
Die Antwort auf diese Frage hängt auch von der spezifischen Anwendung ab. Beispielsweise kann ein Server, der ein bestimmtes Sternensystem verwaltet, nicht im laufenden Betrieb ausgetauscht werden, ohne dass das Spiel unterbrochen wird. Daher wird die Ausfallzeit verwendet, um leistungsstärkere Server potenziellen Hotspots zuzuweisen. Zusätzlich werden die Eigentumsberechnungen (Souveränität) von Sternensystemen berechnet. Dies hängt von den zehn verschiedenen Variablen ab, die sich alle in Abhängigkeit von den Aktionen des Spielers ändern können. Es ist unnötig zu erwähnen, dass dies zu übermäßigem Sperren und / oder anderen Problemen im Zusammenhang mit der Parallelität führen kann. Um diese Probleme zu lösen, ist es am besten, den Stack-Overflow zu überlassen .
In einem aktuellen Thema Wie oft sollte ich Linux-Server neu starten ? Ein weiterer wichtiger Punkt wurde angesprochen, um sicherzustellen, dass beim Neustart oder nach einer (größeren) Konfigurationsänderung alles ordnungsgemäß startet.
Ich habe eine MMO-Architektur in Erlang implementiert, die Hot-Code-Upgrades und -Verteilung unterstützt. Beispielsweise kann ein "GamePlay Server" auf einer beliebigen Anzahl von Computern ausgeführt werden. Wenn ein Hardware-Upgrade erforderlich ist, können seine Objekte (in Echtzeit) auf die anderen Computer übertragen werden. Dies ermöglicht Upgrades der Software-Hardware ohne Ausfallzeiten.
Sie können meine Website unter http://www.next-gen.cc überprüfen .
Ich bin der Überzeugung, dass das Wartungsfenster auch den routinemäßigen Austausch von Hardware ermöglicht, um sicherzustellen, dass Komponenten nicht ausfallen.