Hallo!
Vor ungefähr zwei Jahren hat mein Kollege Maxim (max_posedon) veröffentlichte einen Artikel Wargaming Platform: Hello World , in dem er (wie er selbst bezeichnete) "versuchte" zu erklären, was die Wargaming Platform ist. Meine Kollegen und ich möchten weiterhin Informationen austauschen, und dieses Mal werden wir etwas tiefer in die Verbreitung eintauchen - wie der Titel des Artikels andeutet.
Jeder kennt den digitalen Vertrieb, wir nutzen ihn regelmäßig, wir haben in den 20 Jahren seines Bestehens alles gesehen, daher werde ich die Theorie und Beispiele des Marktes umgehen und mehr über die spezifische Implementierung und Erfahrung sprechen.
Verallgemeinertes Verteilungsschema für Wargaming
Beginnen wir gleich mit dem Bild: Sie können sowohl die Hauptkomponenten des Wargaming Distribution System (WDS) als auch den Datenfluss des Inhalts sehen.
Abbildung 1
Der Vorgang kann kurz wie folgt beschrieben werden: Das Game Studio (Game Studio) lädt die nächste Baugruppe des Spiels auf den WDS-Server hoch, der sie nach der erforderlichen Verarbeitung (mehr dazu im Abschnitt "Unter der Haube") über die Vertriebskanäle (blau markierte Komponenten) an den Client verteilt WGC-Anwendungen.
WGC (Wargaming Game Center) ist eine Desktop-Client-Anwendung, ein Mittel zur Benutzerinteraktion mit der Wargaming-Plattform, insbesondere mit dem Vertriebssystem. Die WGC lädt Aktualisierungen von derzeit verfügbaren Quellen auf den Computer des Benutzers herunter.
WDS hat drei Hauptvertriebskanäle :
- CDN — Content Delivery Network. CDN .
- Static Seeds — BitTorrent-, .
- p2p exchange — WGC ().
Ja, die BitTorrent-Technologie ist das Herzstück der Update-Bereitstellung. Ich muss sofort sagen, dass der P2P-Datenaustausch zwischen Clients in absoluten Zahlen der minimale Kanal in Bezug auf das Verkehrsaufkommen ist. Seine Hauptfunktion besteht darin, das Laden in lokalen Netzwerken mit einer großen Anzahl von WGC-Clients (z. B. Internetcafés) zu beschleunigen und die Belastung der externen Netzwerkschnittstelle zu verringern. Durch die Verwendung von BitTorrent ist es außerdem einfach, einen Präsenzpunkt an einem beliebigen Ort zu organisieren.
Der Vertriebskanal Static Seeds ist im historischen Kontext interessant. Schauen Sie sich das folgende Balkendiagramm an: Es zeigt die Dynamik der Mindestkosten des CDN-Verkehrs für die größten Verbraucher (d. H. Den Großhandel, den niedrigsten Preis).
Figur 2
Im Jahr 2010, zu Beginn von World of Tanks, kostete ein Gigabyte Verkehr für Bestellungen ab 10 PB etwa 0,2 US-Dollar. Mit regelmäßigen Updates von AAA-Spielen mit Millionen von Zuschauern sind die Kosten für den Datenverkehr ziemlich beeindruckend. Durch die Möglichkeit, Ihren Knoten einfach zu einem beliebigen Punkt hinzuzufügen (aus Sicht der Geografie / Anbieter), können Sie spürbare Verkehrsmengen dorthin ziehen. Abhängig vom Vorhandensein eines CDN zu dem einen oder anderen Zeitpunkt, der Belastung des Systems während der Veröffentlichungen, dem Volumen der Veröffentlichungen eines bestimmten Spiels hat ein solches Tool auch heute noch einen guten wirtschaftlichen Effekt.
Um das grundlegende Verteilungsschema vollständig verständlich zu machen, sollten einige Worte zu der Komponente gesagt werden, die in Abbildung 1 als Wargaming Distribution System-Backend bezeichnet wird. Die Hauptaufgaben der Komponente:
- Aktualisierungen vorbereiten und sicherstellen, dass die Mindestmenge an Inhalten vom Client heruntergeladen und installiert wird;
- Updates über Vertriebskanäle verteilen;
- Stellen Sie dem Client Informationen für Updates zur Verfügung.
Lassen Sie uns nun einen kurzen Blick auf die Verteilungsoptionen werfen.
Funktionalität
Mit der BitTorrent-Technologie und insbesondere der Implementierung von libtorrent (dank Arvid Norberg) können Sie "out of the box" mit minimalen Kosten implementieren:
- lokaler Retracker und Seeds - relevant für Benutzergruppen und Spielestudios ;
- Verbinden mehrerer CDNs - horizontale Skalierbarkeit;
- Gewichtungsfaktoren für verschiedene CDNs - ausgleichende "Ersatz" -CDNs;
- Integritätsprüfung und Wiederherstellung - Spieledateien können durch Nachlässigkeit, Reinigungsanwendungen, Virenschutz, Probleme mit Treibern oder physischen Medien beschädigt werden.
Unabhängig von libtorrent, aber auch über Downloads:
- Updates vorladen. Das Spielestudio kann Updates nur zum Download veröffentlichen (ohne Installation): Zum Zeitpunkt der Veröffentlichung der neuen Version werden sie angewendet, Benutzer beginnen früher mit dem Spielen der neuen Version.
- Preload Balancing. Bei großen Aktualisierungsvolumina können Sie den vorläufigen Empfang von Aktualisierungen gleichmäßig "verschmieren", um die Belastung der Verteilungsknoten zu verringern und den Peak zu glätten.
Spiele installieren / aktualisieren:
- Patches. Der Benutzer lädt nur die fehlenden Teile des Spiels herunter, gut komprimiert.
- DLC. Ein Teil des Inhalts kann optional nach Wahl des Benutzers oder abhängig von der Logik des Spiels heruntergeladen werden.
- Client-Typen. Das Spiel kann dem Benutzer die Wahl geben, welchen "Client-Typ" er herunterladen möchte (z. B. World of Tanks: Es gibt die Wahl zwischen Standardtexturen (SD) und hochauflösenden Texturen (HD), sodass Benutzer, die nicht über das System verfügen, die maximalen Grafikeinstellungen nicht unterstützen. ).
- Mini-Client. Durch die Möglichkeit, bis zur vollständigen Installation zu spielen, kann das Game Studio die Mindestanzahl von Dateien festlegen, die zum Starten des Spiels erforderlich sind.
Andere:
- Weiterverteilbare Dateien installieren.
- Ausführen beliebiger Installationsprogramme während der Installations- / Deinstallationsprozesse.
Unter der Haube
Teile & Patches
Das Spiel kann in Teile (Teile) unterteilt werden, die eine bestimmte Reihenfolge der Installation festlegen. Dies ermöglicht dem Spielestudio:
- Bereitstellung von Inhalten für den Benutzer nur für die ausgewählte Spielsprache;
- Implementiere den minimal notwendigen Teil des Gameplays, um das Spiel zu starten und es zuerst zu liefern.
- Bestimmen Sie einige Teile als DLC und erlauben Sie dem Spiel / Benutzer, sie separat anzufordern.
Um ein Teil zu installieren, müssen ein oder mehrere Patches geliefert und angewendet werden. Der Patch ist im Kern ein 7z-Archiv mit dem LZMA2-Codec. Die Komprimierungsstufe kann je nach Art des Spielinhalts geändert werden. Um ein Spiel von Grund auf neu zu installieren, muss ein Patch den gesamten Inhalt für einen bestimmten Teil des Spiels enthalten. Wenn es sich um ein Update handelt, enthält der Patch nur den erforderlichen Unterschied. Dieser Unterschied wird Datei für Datei mit den folgenden Algorithmen berechnet:
Der erste der Algorithmen ist blockbasiert und der zweite bietet die Möglichkeit, Teile beliebiger Länge zu kopieren und zu wiederholen. Abhängig von der Art der Änderungen (Einfügen, Löschen, Ersetzen), der Stelle in der Datei, an der sie vorgenommen wurden (Anfang, Ende, Mitte), ihrem Volumen, der Dateieredundanz kann einer der Algorithmen den anderen deutlich übertreffen, oder in Bezug auf die Größe der resultierenden Diff-Datei. oder durch die Geschwindigkeit seiner Anwendung auf dem Computer des Benutzers. WDS wählt den optimalen binären Differenzalgorithmus für einen bestimmten Fall.
Torrent
Um Patches herunterzuladen, werden Torrent-Dateien nach Version vorbereitet, der WGC-Client erhält die erforderlichen Informationen vom WDS-Backend und startet eine Torrent-Sitzung mit den erforderlichen Torrents.
Seeds sind, wie bereits indirekt erwähnt, CDNs (Webseeds), Static Seeds (speziell vorbereitete Maschinen mit Libtorrent-basierten Clients), die WGC-Clients selbst und alle Torrent-Clients mit den erforderlichen Torrents. Erhält diese Samen eine Torrent-Sitzung aus folgenden Quellen:
Einige Anbieter blockieren entweder das BitTorrent-Protokoll selbst oder den Download einer * .torrent-Datei. Da der Download von Webseeds über HTTP erfolgt und die * .torrent-Datei selbst über HTTPS heruntergeladen wird, sind solche Sperren für uns nicht kritisch. Das Spiel wird weiterhin ausgeliefert. Im schlimmsten Fall geht der Verkehr von Static Seeds und p2p verloren. In den USA gab es Fälle, in denen ein Anbieter die Installation seiner Zertifikate verlangte und filterte, einschließlich HTTPS-Verkehr (nicht sehr nett), dort eine Torrent-Datei fand und blockierte. Durch plötzliches Ändern der Erweiterung der Torrent-Datei konnte sie jedoch heruntergeladen werden, dh die Filter befanden sich nur auf der Ebene des Inhaltsnamens.
Die WGC baut derzeit bis zu 50 Vertriebskanalverbindungen auf. Auf demselben CDN können mehrere Verbindungen hergestellt werden, wodurch der Kanal zwischen seinem Knoten und dem Client effizienter genutzt werden kann. Darüber hinaus verwendet das Haupt-CDN den BBR- Überlastungssteuerungsalgorithmus, der als gierig angesehen wird und den Kanal recht gut nutzt. Diese Konfiguration bietet die höchste Bandbreitennutzung für eine schnelle Spielbereitstellung, aber natürlich kann der Komfort der Verwendung der Internetverbindung für andere Anwendungen bei Updates beeinträchtigt werden. Derzeit wird eine Reihe von Tests für alternative Konfigurationen durchgeführt, und in naher Zukunft können wir mit einer kontinuierlichen Verringerung der Anzahl der Verbindungen rechnen, wobei der Komfort zunimmt, ohne dass sich dies spürbar auf die Liefergeschwindigkeit auswirkt.
Für alle Fälle möchte ich hier noch einmal betonen, dass jede Netzwerkaktivität die Qualität des Datenverkehrs für den Spieleclient beeinträchtigen kann, für den sie von entscheidender Bedeutung ist. Aus diesem Grund führt der WGC während des Spiels keine Netzwerkoperationen aus, ohne dass dies ausdrücklich vom Spielclient benötigt wird (z. B. eine Autorisierungsoperation).
Installiere Updates
Das Herunterladen und Entpacken von Patches ist parallel organisiert und sieht folgendermaßen aus:
- Starten Sie den Download des Patches und ändern Sie die Download-Priorität auf das Teil mit dem Archiv-Header.
- Nach dem Empfang des vollständigen Headers des Archivs wird der Entpackvorgang gestartet und die vom Netzwerk empfangenen Daten werden sofort entpackt.
- Die entpackten Daten werden auf der Festplatte gespeichert.
- Der heruntergeladene Patch wird auch auf der Festplatte gespeichert, da nicht alle Fragmente zum Entpacken zum Zeitpunkt des Empfangs und zum Verteilen an andere benötigt werden.
- Nach der Verarbeitung kann die Patch-Datei je nach der vom Game Studio festgelegten Konfiguration entweder auf der Festplatte belassen oder sofort gelöscht werden.
Das Entpacken und Anwenden von Binärdifferenzen erfolgt in einem separaten Prozess, mit dem Sie das System und die E / A-Priorität über das Betriebssystem steuern können. Zusätzlich zu dieser Funktionalität gibt es eine benutzerdefinierte "Turbo" -Einstellung, die den Installationsprozess beschleunigt, aber stark mit anderen Anwendungen um Ressourcen konkurriert. Standardmäßig arbeitet der WGC in einem ressourcenarmen Modus, abhängig vom Komfort. Bei der ersten Installation erklärt der WGC dem Benutzer jedoch, dass er die Wahl hat.
Performance
Umfang der Updates
Das Minimieren der Menge der heruntergeladenen Daten ist eine der Hauptaufgaben unseres Systems. Im Gegensatz zum Steam-Ansatz, bei dem die Diskretion der verarbeiteten Daten des Spielclients 1 MB beträgt, arbeiten wir beim Erstellen binärer Differenzen häufig mit Bytes. Außerdem können Blöcke dieser Bytes entweder zu einem beliebigen Teil der Datei hinzugefügt oder daraus entfernt werden. Infolgedessen haben geplante Versionsaktualisierungen von World of Tanks und World of Warships normalerweise ein Volumen von 1 bis 2 GB, während für dieselben Versionen von Spielen, die auf Steam heruntergeladen wurden, etwa 5 GB heruntergeladen werden müssen. World of Warships wird über Steam verteilt, daher werden diese Daten regelmäßig empfangen, und für World of Tanks werden die Daten aus speziellen Testdownloads entnommen.
Erforderlicher Speicherplatz für Benutzer
Für die Mindestmenge an heruntergeladenen Daten und P2P müssen Sie mit dem Speicherplatz bezahlen, der für die Installation und Aktualisierung des Clients erforderlich ist. Im Moment benötigt der Benutzer mehr Speicherplatz als der Spielclient benötigt: Ein solcher Puffer kann bis zur Hälfte der Größe des Clients betragen. Wir arbeiten daran, diesen Wert zu reduzieren, und es ist in naher Zukunft möglich, ihn fest zu machen und 2 GB nicht zu überschreiten, was angesichts der Größe moderner Spiele durchaus akzeptabel wird. Aber es gibt noch ein weiteres wichtiges Feature: Um das Spiel zu aktualisieren (was in der modernen Welt eine regelmäßige Aktivität ist), reicht auch ein relativ kleiner Puffer aus, der für die meisten Spiel-Patches bereits etwa 4 GB beträgt. Gleichzeitig benötigen einige dieser Lösungen doppelt so viel Speicherplatz wie der Spielclient benötigt.
Wir haben eine Reihe von Messungen durchgeführt, um die Installationsgeschwindigkeit des World of Warships-Clients in WGC und Steam bei gleichen Netzwerkkanalgeschwindigkeiten zu vergleichen. Bei Verwendung des Standard-WGC-Installationsmodus zeigen beide Systeme nahezu identische Ergebnisse (soweit dies in solchen Experimenten möglich ist, selbst unter Berücksichtigung der saubersten Systeme, regelmäßigen Neustarts usw.). Bei Verwendung von "Turbo" liegt der durchschnittliche WGC-Gewinn für die Kammer im Bereich von 5 bis 7 Prozent der Zeit der vollständigen Installation. Wir müssen auch berücksichtigen, dass die Bandbreite der Netzwerkschnittstelle für beide Systeme unterschätzt werden musste, um die gleichen Bedingungen und eine mehr oder weniger stabile Bandbreite zu erhalten. Unter Berücksichtigung der Tatsache, dass die WGC den Netzwerkkanal stärker nutzt (siehe Abschnitt Torrent),Ohne zusätzliche Einschränkungen auf dem benutzerdefinierten Computer wird die Geschwindigkeit der Erstinstallation des Spiels spürbar höher.
Letztes Wort oder was nicht hier war
Die Wargaming-Plattform und insbesondere das Wargaming-Vertriebssystem sind große Softwaresysteme mit einer zehnjährigen Geschichte und Dutzenden verschiedener Technologien und Programmiersprachen. In diesem Artikel haben wir nur das allgemeine Verteilungsschema und seine Hauptmerkmale kennengelernt. Die Systemarchitektur, die meisten Technologien, Entwicklungsprozesse, Releases, Vorgänge, geografischen Verteilungsnuancen, die WGC-Anwendung selbst mit all ihren Nichtverteilungsfunktionen und vieles mehr blieben aufgrund des Artikels "Nicht-Gummi" außerhalb der Klammern. Dies bedeutet nur, dass ich auf Fragen zum Artikel und insbesondere zu dem warte, was in den Kommentaren nicht enthalten war. Guter Code, viel Glück euch allen!