Plataforma de Wargaming: Distribución

¡Hola!



Hace unos dos años, mi colega Maxim (max_posedon) publicó un artículo Wargaming Platform: Hello World , en el que "intentó" (como él mismo designó) explicar qué es Wargaming Platform. Mis colegas y yo queremos seguir compartiendo información y esta vez profundizaremos un poco más, como sugiere el título del artículo, en la distribución.



Todo el mundo está familiarizado con la distribución digital, la usamos con regularidad, hemos visto todo durante los 20 años de su existencia, así que pasaré por alto la teoría y los ejemplos del mercado, y hablaré más sobre la implementación y la experiencia específicas.



Esquema de distribución generalizado para Wargaming



Comencemos de inmediato con la imagen: puede ver los componentes principales del Sistema de distribución de Wargaming (WDS) y el flujo de datos del contenido.





Figura 1



El proceso se puede describir brevemente de la siguiente manera: el estudio de juegos (Game Studio) carga el siguiente ensamblaje del juego al servidor WDS, el cual, luego del procesamiento necesario (más sobre esto en la sección "Bajo el capó"), a través de los canales de distribución (componentes marcados en azul) los distribuye al cliente Aplicaciones de WGC.



WGC (Wargaming Game Center) es una aplicación cliente de escritorio, un medio de interacción del usuario con la plataforma Wargaming, en particular con el sistema de distribución. El WGC descarga actualizaciones a la máquina del usuario desde las fuentes disponibles actualmente.



WDS tiene tres canales de distribución principales :





Sí, la tecnología BitTorrent está en el corazón de la entrega de actualizaciones. Debo decir de inmediato que el intercambio de datos p2p entre clientes es, en términos absolutos, el canal mínimo en términos de volumen de tráfico. Su función principal es acelerar la carga en redes locales con un gran número de clientes WGC (por ejemplo, cibercafés) y reducir la carga en la interfaz de red externa. Además, el uso de BitTorrent facilita la organización de un punto de presencia en cualquier lugar deseado.



El canal de distribución Static Seeds es interesante en un contexto histórico. Eche un vistazo al gráfico de barras a continuación: muestra la dinámica del costo mínimo del tráfico de CDN para los consumidores más grandes (es decir, el precio más bajo al por mayor).





Figura 2



En 2010, en los albores de World of Tanks, un gigabyte de tráfico costaba alrededor de $ 0,2 para pedidos superiores a 10 PB. Con las actualizaciones periódicas de los juegos AAA con millones de audiencias, el costo del tráfico es bastante impresionante. La capacidad de agregar fácilmente su nodo a cualquier punto (desde el punto de vista de la geografía / proveedores) le permite atraer volúmenes tangibles de tráfico hacia él. Dependiendo de la presencia de un CDN en un momento u otro, la carga en el sistema durante los lanzamientos, el volumen de lanzamientos de un juego en particular, dicha herramienta tiene un buen efecto económico incluso hoy.



Para que el esquema de distribución básico sea completamente comprensible, vale la pena decir algunas palabras sobre el componente, que en la Figura 1 se designa como el sistema de distribución de Wargaming. Las principales tareas del componente:



  • preparar actualizaciones, asegurando la mínima cantidad de contenido descargado e instalado por el cliente;
  • distribuir actualizaciones a través de canales de distribución;
  • proporcionar al cliente información para actualizaciones.


Ahora echemos un vistazo rápido a las opciones de distribución.



Funcionalidad



La tecnología BitTorrent, y en particular la implementación de libtorrent (gracias a Arvid Norberg), "lista para usar" le permite implementar con costos mínimos:



  • retracker local y semillas - relevante tanto para grupos de usuarios como para estudios de juegos;
  • conectar múltiples CDN - escalabilidad horizontal;
  • factores de ponderación para diferentes CDN : equilibrado, CDN "de repuesto";
  • verificación y restauración de la integridad : los archivos del juego pueden dañarse por negligencia, aplicaciones de limpieza, antivirus, problemas con los controladores o los medios físicos.


Independientemente de libtorrent, pero también de las descargas:



  • Precarga de actualizaciones. El estudio de juegos puede publicar actualizaciones solo para descargar (sin instalación): en el momento del lanzamiento de la nueva versión, se aplicarán, los usuarios comenzarán a jugar la nueva versión antes.
  • Equilibrado de precarga. Con grandes volúmenes de actualizaciones, puede "manchar" uniformemente la recepción preliminar de actualizaciones para reducir la carga en los nodos de distribución y suavizar el pico.


Instalación / actualización de juegos:



  • Parches El usuario descarga solo las partes que faltan del juego, bien comprimidas.
  • DLC. Parte del contenido se puede cargar opcionalmente a elección del usuario o dependiendo de la lógica del juego.
  • Tipos de clientes. El juego puede darle al usuario la opción de qué "tipo de cliente" descargar (por ejemplo, World of Tanks: hay una opción entre texturas estándar (SD) y texturas de alta definición (HD), lo que permite a los usuarios que no tienen un sistema que no admite la configuración máxima de gráficos. ).
  • Mini cliente. La capacidad de jugar hasta la instalación completa, el estudio del juego tiene la capacidad de determinar el conjunto mínimo requerido de archivos para iniciar el juego.


Otro:



  • Instalación de redistribuibles.
  • Ejecutar instaladores arbitrarios durante los procesos de instalación / desinstalación.




Bajo el capó



Partes y parches



El juego se puede dividir en partes (partes), que especifican una determinada secuencia de instalación. Esto permite que el estudio de juegos:



  • entregar contenido al usuario solo para el idioma del juego seleccionado;
  • implementar la parte mínima necesaria del juego para comenzar el juego y entregarlo primero;
  • designar algunas partes como DLC y permitir que el juego / usuario las solicite por separado.


Para instalar una pieza, se deben entregar y aplicar uno o más parches. En esencia, el parche es un archivo 7z con el códec LZMA2. El nivel de compresión se puede cambiar según el tipo de contenido del juego. Para instalar un juego desde cero, un parche debe contener todo el contenido de una parte específica del juego. Si se trata de una actualización, el parche solo contiene la diferencia necesaria. Esta diferencia se calcula archivo por archivo utilizando los siguientes algoritmos:





El primero de los algoritmos está basado en bloques y el segundo proporciona la capacidad de copiar partes de longitud arbitraria y repetirlas. Dependiendo de la naturaleza de los cambios (insertar, eliminar, reemplazar), el lugar en el archivo donde se realizaron (comienzo, final, medio), su tamaño, la redundancia de archivos, uno de los algoritmos puede superar en gran medida al otro, o en términos del tamaño del archivo diff resultante, o por la velocidad de su aplicación en la máquina del usuario. WDS elige el algoritmo de diferencia binaria óptimo para un caso particular.



Torrente



Para descargar parches, los archivos torrent se preparan por versión, el cliente WGC recibe la información necesaria del backend WDS e inicia una sesión de torrent con los torrents necesarios.



Las semillas son, como ya se mencionó indirectamente, CDN (webseeds), Static Seeds (máquinas especialmente preparadas con clientes basados ​​en libtorrent), los propios clientes de WGC y cualquier cliente de torrent con los torrents necesarios. Recibe estas semillas en una sesión torrent de las siguientes fuentes:



  • Backend de WDS;
  • rastreador de torrents;
  • DHT ;
  • LPD ;
  • PEX .


Algunos proveedores bloquean el protocolo BitTorrent en sí o la descarga de un archivo * .torrent. Dado que la descarga de webseeds se realiza a través de HTTP, y el archivo * .torrent en sí se descarga a través de HTTPS, dicho bloqueo no es crítico para nosotros, el juego aún se entregará. En el peor de los casos, el tráfico de Static Seeds y p2p desaparecerá. Ha habido casos en Estados Unidos en los que un proveedor exigió la instalación de sus certificados y se filtró, incluido el tráfico HTTPS (no muy agradable), encontró allí un archivo torrent y lo bloqueó. Pero cambiar repentinamente la extensión del archivo torrent permitió que se descargara, es decir, los filtros estaban solo en el nivel del nombre del contenido.



El WGC está estableciendo actualmente hasta 50 conexiones de canales de distribución. Se pueden establecer varias conexiones en la misma CDN, lo que permite una utilización más eficiente del canal entre su nodo y el cliente. Además de esto, el CDN principal usa un algoritmo de control de congestión BBR , que se considera codicioso y utiliza bastante bien el canal. Esta configuración proporciona la mayor utilización de ancho de banda para una entrega rápida de juegos, pero, por supuesto, la comodidad de usar la conexión a Internet para otras aplicaciones puede verse afectada durante las actualizaciones. Actualmente se está realizando una serie de pruebas de configuraciones alternativas, y en un futuro cercano podemos esperar una disminución en el número de conexiones de forma continua con un aumento en la comodidad, pero sin un impacto tangible en la velocidad de entrega.



Por si acaso, aquí me gustaría enfatizar una vez más que cualquier actividad de la red puede afectar la calidad del tráfico para el cliente del juego, para lo cual es fundamental. Por eso, mientras se ejecuta el juego, el WGC no realiza ninguna operación de red sin una necesidad explícita del cliente del juego (por ejemplo, autorización).



Instalando actualizaciones



Los procesos de descarga y desempaquetado de parches están organizados en paralelo y tienen este aspecto:



  • Comience a descargar el parche, cambiando la prioridad de descarga a la parte con el encabezado del archivo.
  • Después de recibir el encabezado completo del archivo, se inicia el proceso de desempaquetado y los datos recibidos de la red se descomprimen inmediatamente.
  • Los datos desempaquetados se guardan en el disco.
  • El parche descargado también se guarda en el disco, ya que no todos los fragmentos son necesarios para desempaquetarlos en el momento de la recepción y más para distribuirlos a otros.
  • Después del procesamiento, el archivo de parche puede dejarse en el disco o eliminarse inmediatamente, según la configuración establecida por el estudio del juego.


Los procesos de descomprimir y aplicar diferencias binarias ocurren en un proceso separado, lo que le permite controlar su sistema y la prioridad de E / S por medio del SO. Además de esta funcionalidad, hay una configuración "turbo" personalizada que acelerará el proceso de instalación pero competirá fuertemente por los recursos con otras aplicaciones. Por defecto, el WGC se ejecuta en un modo de bajos recursos, confiando en la comodidad, pero en la primera instalación, el WGC le explica al usuario que tiene una opción.



Actuación



Volumen de actualizaciones



Minimizar la cantidad de datos descargados es una de las principales tareas de nuestro sistema. En contraste con el enfoque de Steam, en el que la discreción de los datos procesados ​​del cliente del juego es de 1 MB, a menudo operamos con bytes cuando construimos diferencias binarias. Además, los bloques de estos bytes pueden agregarse a cualquier parte del archivo o eliminarse de él. Como resultado, las actualizaciones programadas de las versiones de World of Tanks y World of Warships suelen tener un volumen de 1-2 GB, mientras que las mismas versiones de juegos descargadas en Steam requieren aproximadamente 5 GB para descargarse. World of Warships se distribuye a través de Steam, por lo que estos datos se reciben con regularidad, y para World of Tanks, los datos se obtienen de descargas de prueba especiales.



Espacio de disco de usuario requerido



Por la cantidad mínima de datos descargados y p2p, debe pagar con el espacio en disco requerido para la instalación del cliente y las operaciones de actualización. Por el momento, el usuario necesita más espacio del que ocupa el cliente del juego: dicho búfer puede tener hasta la mitad del tamaño del cliente. Estamos trabajando para reducir este valor, y es posible en un futuro próximo hacerlo fijo y que no supere los 2 GB, lo que se está volviendo bastante aceptable dado el tamaño de los juegos modernos. Pero hay una característica más importante: para actualizar el juego (que en el mundo moderno es una actividad regular), también es suficiente un búfer relativamente pequeño, que ya es de aproximadamente 4 GB para la mayoría de los parches del juego. Al mismo tiempo, algunas de estas soluciones requieren el doble de espacio en disco del que ocupa el cliente del juego.





Realizamos una serie de mediciones para comparar la velocidad de instalación del cliente de World of Warships en WGC y Steam a velocidades de canal de red iguales. Cuando se usa el modo de instalación estándar de WGC, ambos sistemas muestran resultados casi idénticos (en la medida de lo posible para registrar en tales experimentos, incluso teniendo en cuenta los sistemas más limpios, reinicios regulares, etc.). Cuando se usa "turbo", la ganancia promedio de WGC para la cámara está en el rango de 5-7 por ciento del tiempo de instalación completa. También debemos tener en cuenta que el ancho de banda de la interfaz de red tuvo que ser subestimado para ambos sistemas con el fin de obtener las mismas condiciones y un ancho de banda más o menos estable. Teniendo en cuenta el hecho de que el WGC utiliza el canal de red con más fuerza (consulte la sección Torrent),sin restricciones adicionales en la máquina personalizada, la velocidad de la instalación inicial del juego se vuelve notablemente mayor.



Palabra final, o lo que no estaba aquí



La plataforma Wargaming, y en particular el sistema de distribución Wargaming, son grandes sistemas de software con una historia de diez años y decenas de tecnologías y lenguajes de programación diferentes. En el artículo, nos familiarizamos solo con el esquema de distribución de alto nivel y sus características principales. La arquitectura del sistema, la mayoría de las tecnologías, procesos de desarrollo, lanzamientos, operaciones, matices geográficos de distribución, la aplicación WGC en sí con toda su funcionalidad de no distribución, y mucho más permanecieron fuera de los corchetes debido al artículo "non-rubber". Esto solo significa que estoy esperando preguntas sobre el artículo y especialmente sobre lo que no estaba incluido en él, en los comentarios. Buen código, ¡buena suerte a todos!



All Articles