salut!
Il y a environ deux ans, mon collègue Maxim (max_posedon) a publié un article Wargaming Platform: Hello World , dans lequel il "a essayé" (comme il l'a lui-même désigné) d'expliquer ce qu'est la Wargaming Platform. Mes collègues et moi voulons continuer à partager des informations et cette fois nous allons creuser un peu plus - comme le titre de l'article le suggère, la distribution.
Tout le monde est familier avec la distribution numérique, nous l'utilisons régulièrement, nous avons tout vu sur 20 ans de son existence, je vais donc contourner la théorie et les exemples du marché, et je parlerai plus de la mise en œuvre et de l'expérience spécifiques.
Schéma de distribution généralisé pour Wargaming
Commençons tout de suite par l'image: elle montre à la fois les principaux composants du Wargaming Distribution System (WDS) et le flux de données du contenu.
Figure 1
Le processus peut être brièvement décrit comme suit: le studio de jeu (Game Studio) télécharge la prochaine version du jeu sur le serveur WDS, qui après le traitement nécessaire (plus à ce sujet dans la section «Sous le capot») à travers les canaux de distribution (composants marqués en bleu) les distribue au client Applications WGC.
WGC (Wargaming Game Center) est une application client de bureau, un moyen d'interaction de l'utilisateur avec la plateforme Wargaming, en particulier avec le système de distribution. Le WGC télécharge les mises à jour sur la machine de l'utilisateur à partir des sources actuellement disponibles.
WDS dispose de trois canaux de distribution principaux :
- CDN — Content Delivery Network. CDN .
- Static Seeds — BitTorrent-, .
- p2p exchange — WGC ().
Oui, la technologie BitTorrent est au cœur de la livraison des mises à jour. Je dois dire tout de suite que l'échange de données p2p entre clients est, en termes absolus, le canal minimum en termes de volume de trafic. Sa fonction principale est d'accélérer le chargement dans les réseaux locaux avec un grand nombre de clients WGC (par exemple, les cybercafés) et de réduire la charge sur l'interface réseau externe. De plus, l'utilisation de BitTorrent permet d'organiser facilement un point de présence à n'importe quel endroit souhaité.
Le canal de distribution Static Seeds est intéressant dans un contexte historique. Regardez le graphique à barres ci-dessous: il montre la dynamique du coût minimum du trafic CDN pour les plus gros consommateurs (c'est-à-dire le prix de gros, le plus bas).
Figure 2
En 2010, à l'aube de World of Tanks, un gigaoctet de trafic coûtait environ 0,2 $ pour les commandes de 10 PB ou plus. Avec des mises à jour régulières des jeux AAA avec des millions d'audiences, le coût du trafic est assez impressionnant. La possibilité d'ajouter facilement votre nœud à n'importe quel point (du point de vue de la géographie / des fournisseurs) vous permet d'y attirer des volumes tangibles de trafic. En fonction de la présence d'un CDN à un moment ou à un autre, de la charge sur le système lors des sorties, du volume de sorties d'un jeu particulier, un tel outil a un bon effet économique encore aujourd'hui.
Pour rendre le schéma de distribution de base complètement clair, il convient de dire quelques mots sur le composant, qui dans la figure 1 est désigné comme le backend du système de distribution Wargaming. Les principales tâches du composant:
- préparer les mises à jour, en garantissant la quantité minimale de contenu téléchargé et installé par le client;
- distribuer des mises à jour via les canaux de distribution;
- fournir au client des informations pour les mises à jour.
Jetons maintenant un coup d'œil aux options de distribution.
Fonctionnalité
La technologie BitTorrent, et en particulier l'implémentation de libtorrent (grâce à Arvid Norberg), "out of the box" vous permet d'implémenter avec des coûts minimes:
- retracker et semences locaux - pertinents pour les groupes d'utilisateurs et les studios de jeux;
- connexion de plusieurs CDN - évolutivité horizontale;
- facteurs de pondération pour différents CDN - équilibrage, CDN "de réserve";
- vérification et restauration d'intégrité - les fichiers de jeu peuvent être endommagés par la négligence, le nettoyage des applications, les antivirus, des problèmes avec les pilotes ou les supports physiques.
Indépendamment de libtorrent, mais aussi des téléchargements:
- Préchargement des mises à jour. Le studio de jeu peut publier des mises à jour uniquement en téléchargement (sans installation): au moment de la sortie de la nouvelle version, elles seront appliquées, les utilisateurs commenceront à jouer à la nouvelle version plus tôt.
- Équilibrage de la précharge. Avec de grands volumes de mises à jour, vous pouvez uniformément «étaler» la réception préliminaire des mises à jour pour réduire la charge sur les nœuds de distribution et lisser le pic.
Installer / mettre à jour des jeux:
- Patchs. L'utilisateur ne télécharge que les parties manquantes du jeu, bien compressées.
- DLC. Une partie du contenu peut être chargée au choix de l'utilisateur ou selon la logique du jeu.
- Types de clients. Le jeu peut donner à l'utilisateur le choix du "type de client" à télécharger (par exemple, World of Tanks: il y a un choix entre les textures standard (SD) et les textures haute définition (HD), ce qui permet aux utilisateurs qui ne disposent pas du système de ne pas prendre en charge les paramètres graphiques maximum. ).
- Mini client. La possibilité de jouer jusqu'à l'installation complète, le studio de jeu a la capacité de déterminer l'ensemble minimum requis de fichiers pour démarrer le jeu.
Autre:
- Installation de redistribuables.
- Exécution d’installateurs arbitraires pendant les processus d’installation / désinstallation.
Sous la capuche
Pièces et patchs
Le jeu peut être divisé en parties (parties), qui spécifient une certaine séquence d'installation. Cela permet au studio de jeu de:
- fournir du contenu à l'utilisateur uniquement pour la langue de jeu sélectionnée;
- mettre en œuvre la partie minimale nécessaire du gameplay pour démarrer le jeu et le livrer en premier;
- Désignez certaines parties comme DLC et permettez au jeu / à l'utilisateur de les demander séparément.
Pour installer une pièce, un ou plusieurs correctifs doivent être livrés et appliqués. À la base, le patch est une archive 7z avec le codec LZMA2. Le niveau de compression peut être modifié en fonction du type de contenu du jeu. Pour installer un jeu à partir de zéro, un patch doit contenir tout le contenu d'une partie spécifique du jeu. S'il s'agit d'une mise à jour, le correctif contient uniquement la différence requise. Cette différence est calculée fichier par fichier à l'aide des algorithmes suivants:
Le premier des algorithmes est basé sur des blocs et le second offre la possibilité de copier des parties de longueur arbitraire et de les répéter. En fonction de la nature des modifications (insertion, suppression, remplacement), de l'endroit dans le fichier où elles ont été faites (début, fin, milieu), de leur volume, de la redondance des fichiers, l'un des algorithmes peut largement surpasser l'autre, ou en termes de taille du fichier diff résultant, ou la vitesse de son application sur la machine de l'utilisateur. WDS choisit l'algorithme de différence binaire optimal pour un cas particulier.
Torrent
Pour télécharger des correctifs, les fichiers torrent sont préparés par version, le client WGC reçoit les informations nécessaires du backend WDS et démarre une session torrent avec les torrents nécessaires.
Les semences sont, comme déjà indirectement mentionné, les CDN (webseeds), Static Seeds (machines spécialement préparées avec des clients basés sur libtorrent), les clients WGC eux-mêmes et tous les clients torrent avec les torrents nécessaires. Reçoit ces graines une session torrent à partir des sources suivantes:
Certains fournisseurs bloquent soit le protocole BitTorrent lui-même, soit le téléchargement d'un fichier * .torrent. Étant donné que le téléchargement à partir de Webseeds se fait via HTTP et que le fichier * .torrent lui-même est téléchargé via HTTPS, un tel blocage n'est pas critique pour nous, le jeu sera toujours livré. Dans le pire des cas, le trafic de Static Seeds et de p2p disparaîtra. Il y a eu des cas aux États-Unis où un fournisseur a demandé l'installation de ses certificats et filtré, y compris le trafic HTTPS (pas très agréable), y a trouvé un fichier torrent et l'a bloqué. Mais la modification soudaine de l'extension du fichier torrent a permis de le télécharger, c'est-à-dire que les filtres n'étaient qu'au niveau du nom du contenu.
Le WGC établit actuellement jusqu'à 50 connexions de canaux de distribution. Plusieurs connexions peuvent être établies sur le même CDN, ce qui permet une utilisation plus efficace du canal entre son nœud et le client. En plus de cela, le CDN principal utilise l' algorithme de contrôle d'encombrement BBR , qui est considéré comme gourmand et utilise assez bien le canal. Cette configuration fournit la plus grande utilisation de la bande passante pour une livraison rapide des jeux, mais bien sûr, le confort d'utilisation de la connexion Internet pour d'autres applications peut souffrir pendant les mises à jour. Une série de tests de configurations alternatives est actuellement en cours, et dans un proche avenir on peut s'attendre à une diminution du nombre de connexions de façon continue avec une augmentation du confort, mais sans impact tangible sur la rapidité de livraison.
Au cas où, je voudrais souligner une fois de plus que toute activité réseau peut affecter la qualité du trafic pour le client de jeu pour lequel elle est critique. C'est pourquoi, pendant le fonctionnement du jeu, le WGC n'effectue aucune opération réseau sans un besoin explicite du client du jeu (par exemple, une opération d'autorisation).
Installation de mises à jour
Les processus de téléchargement et de décompression des correctifs sont organisés en parallèle, et cela ressemble à ceci:
- Commencez à télécharger le patch, en modifiant la priorité de téléchargement sur la partie avec l'en-tête d'archive.
- Après avoir reçu l'en-tête complet de l'archive, le processus de décompression démarre et les données reçues du réseau sont immédiatement décompressées.
- Les données décompressées sont enregistrées sur le disque.
- Le correctif téléchargé est également enregistré sur le disque, car tous les fragments ne sont pas nécessaires pour le déballage au moment de la réception, et plus pour la distribution à d'autres.
- Après traitement, le fichier de patch peut être laissé sur le disque ou immédiatement supprimé en fonction de la configuration donnée par le studio de jeu.
Les processus de décompression et d'application des différences binaires se produisent dans un processus séparé, qui vous permet de contrôler son système et la priorité d'E / S au moyen du système d'exploitation. En plus de cette fonctionnalité, il existe un paramètre «turbo» personnalisé qui accélérera le processus d'installation, mais qui concurrencera également fortement d'autres applications pour les ressources. Par défaut, le WGC fonctionne dans un mode de ressources limitées, reposant sur le confort, mais lors de la première installation, le WGC explique à l'utilisateur qu'il a le choix.
Performance
Volume de mises à jour
Minimiser la quantité de données téléchargées est l'une des principales tâches de notre système. Contrairement à l'approche Steam, dans laquelle la discrétion des données traitées du client du jeu est de 1 Mo, nous opérons souvent avec des octets lors de la construction de différences binaires. En outre, des blocs de ces octets peuvent être ajoutés à n'importe quelle partie du fichier ou supprimés de celui-ci. En conséquence, les mises à jour de version programmées de World of Tanks et World of Warships ont généralement un volume de 1 à 2 Go, alors que les mêmes versions de jeux téléchargées sur Steam nécessitent environ 5 Go pour être téléchargées. World of Warships est distribué via Steam, donc ces données sont obtenues régulièrement, et pour World of Tanks, les données sont extraites de téléchargements de tests spéciaux.
Espace disque utilisateur requis
Pour la quantité minimale de données téléchargées et p2p, vous devez payer avec l'espace disque requis pour l'installation du client et les opérations de mise à jour. Pour le moment, l'utilisateur a besoin de plus d'espace que le client du jeu: un tel tampon peut être jusqu'à la moitié de la taille du client. Nous travaillons à réduire cette valeur, et il est possible dans un proche avenir de la rendre fixe et de ne pas dépasser 2 Go, ce qui devient tout à fait acceptable compte tenu de la taille des jeux modernes. Mais il y a une fonctionnalité plus importante: pour mettre à jour le jeu (ce qui dans le monde moderne est une activité régulière), un tampon relativement petit est également suffisant, qui est déjà d'environ 4 Go pour la plupart des patchs de jeu. Dans le même temps, certaines de ces solutions nécessitent deux fois plus d'espace disque que le client du jeu.
Nous avons effectué une série de mesures pour comparer la vitesse d'installation du client World of Warships dans WGC et Steam à des vitesses de canal réseau égales. Lors de l'utilisation du mode d'installation WGC standard, les deux systèmes montrent des résultats presque identiques (dans la mesure du possible pour enregistrer dans de telles expériences, même en tenant compte des systèmes les plus propres, des redémarrages réguliers, etc.) Lors de l'utilisation de "turbo", le gain moyen de salaire WGC est de l'ordre de 5 à 7 pour cent du temps d'installation complet. Il faut également prendre en compte le fait que la bande passante de l'interface réseau a dû être sous-estimée pour les deux systèmes afin d'obtenir les mêmes conditions et une bande passante plus ou moins stable. Tenant compte du fait que le WGC utilise plus fortement le canal réseau (voir la section Torrent),sans restrictions supplémentaires sur la machine personnalisée, la vitesse de l'installation initiale du jeu devient nettement plus élevée.
Dernier mot, ou ce qui n'était pas là
La plate-forme Wargaming, et en particulier le système de distribution Wargaming, sont de grands systèmes logiciels avec une histoire de dix ans et des dizaines de technologies et langages de programmation différents. Dans cet article, nous ne nous sommes familiarisés qu'avec le schéma de distribution de haut niveau et ses principales caractéristiques. L'architecture du système, la plupart des technologies, les processus de développement, les versions, les opérations, les nuances géographiques de la distribution, l'application WGC elle-même avec toutes ses fonctionnalités de non-distribution, et bien plus encore, sont restées hors des crochets en raison de l'article "non caoutchouc". Cela signifie seulement que j'attends des questions sur l'article et surtout sur ce qui n'y figurait pas, dans les commentaires. Bon code, bonne chance à tous!