Hoja de ruta de desarrollo para el alojamiento híbrido con Amazon GameLift Servers
En esta hoja de ruta se indica cómo desarrollar una solución de alojamiento para juegos multijugador. Amazon GameLift Servers ofrece varias opciones de alojamiento de juegos; para obtener más información sobre estas opciones, consulte opciones de alojamiento de juegos de Amazon GameLift Servers.
Una solución híbrida utiliza una combinación de recursos de alojamiento, como los recursos basados en la nube y administrados por Amazon GameLift Servers o sus propios recursos de alojamiento autoadministrados. Para obtener información más detallada sobre el alojamiento híbrido, consulte el artículo Alojamiento de servidor de juegos híbrido con Amazon GameLift Servers Anywhere
Una arquitectura híbrida consta de los siguientes componentes:
-
Una sola compilación de servidor de juegos, integrada con el SDK del servidor de Amazon GameLift Servers, para la implementación en todas las flotas.
-
Un único cliente de juegos y servicio de backend, integrado con el SDK de AWS, para interactuar con el servicio Amazon GameLift Servers y solicitar sesiones de juego.
-
Una cola de Amazon GameLift Servers compartida para colocar nuevas sesiones de juego con servidores de juego disponibles y equilibrio de cargas en todas las flotas.
-
(Opcional) Un agente de administración de procesos, que se implementa con una flota de Anywhere, a fin de simplificar las tareas de administración de los procesos del servidor en todos los recursos de computación de todas las flotas.
-
(Opcional) Un emparejador de FlexMatch para crear partidas multijugador y configurar sesiones de juego para ellas.
-
Una o más flotas administradas por Amazon GameLift Servers, con instancias de Amazon Elastic Compute Cloud (Amazon EC2) optimizadas para el alojamiento de juegos multijugador.
-
Una o más flotas de Amazon GameLift Servers Anywhere con sus recursos de alojamiento existentes (en las instalaciones o de otro tipo), lo que incluye las herramientas de implementación y administración de la configuración (si lo prefiere, puede utilizar ). AWS Systems Manager.)
Este plan presenta una ruta simplificada para que el juego multijugador funcione correctamente con una solución de alojamiento híbrida de Amazon GameLift Servers. Cuando tenga los componentes necesarios, podrá continuar con la iteración del desarrollo del juego y personalizar la solución de alojamiento. A medida que se acerque el lanzamiento, consulte Preparativos para el lanzamiento con alojamiento en Amazon GameLift Servers: le resultará de ayuda a fin de preparar la solución de alojamiento para el uso en producción.
Iniciación rápida al uso del complemento de Amazon GameLift Servers
Si está desarrollando proyectos con Unreal Engine o Unity, comience a configurar el juego para el alojamiento con el complemento de Amazon GameLift Servers. Con el complemento, puede añadir los SDK de Amazon GameLift Servers a su proyecto de juego, y utilizar los flujos de trabajo guiados para crear una versión funcional y sencilla de una solución de alojamiento híbrida, tanto con una flota de Anywhere como con una flota administrada por Amazon GameLift Servers. Luego, sobre la base de esos elementos fundamentales, podrá seguir con el desarrollo y personalizar lo que sea necesario.
Añada funciones al servidor de juegos para que pueda comunicarse con el servicio Amazon GameLift Servers cuando se implemente para el alojamiento. La funcionalidad necesaria es la misma, con independencia de si el servidor del juego se ejecuta en una flota administrada por Amazon GameLift Servers como si se ejecuta en una flota de Anywhere.
-
Obtenga el SDK del servidor de Amazon GameLift Servers (versión 5.x) para su proyecto de juego. El SDK del servidor está disponible en C++, C# y Go. Descargue el SDK del servidor de Amazon GameLift Servers
. -
Modifique el código del servidor de juegos para añadir la funcionalidad del SDK del servidor. Para obtener instrucciones, consulte Preparación de un juego para su alojamiento con Amazon GameLift Servers. Como mínimo, haga lo siguiente:
-
Añada código para inicializar el SDK de Amazon GameLift Servers y establecer una conexión de WebSocket con el servicio Amazon GameLift Servers. Use la acción del SDK del servidor
InitSdk(). Incluya código para especificar los parámetros del servidor cuando se ejecute en el recurso de computación de una flota de Anywhere. -
Añada código para indicar al servicio Amazon GameLift Servers que el proceso del servidor está listo para alojar sesiones de juego. Use la acción del SDK del servidor
ProcessReady(). -
Implemente las funciones de devolución de llamada
OnStartGameSession()yOnProcessTerminate()necesarias. Con estas funciones, los procesos del servidor de juegos pueden mantener una conexión con el servicio Amazon GameLift Servers, iniciar una sesión de juego cuando Amazon GameLift Servers lo solicite y responder a una petición para finalizar el proceso del servidor de juegos. -
Añada código para informar al servicio Amazon GameLift Servers cuando el proceso del servidor esté finalizando una sesión de juego. Use la acción del SDK del servidor
ProcessEnding().
-
-
Empaquete la compilación del servidor de juegos. Cree un script de instalación con los archivos de compilación, las dependencias y el software de soporte. Consulte Empaquetado de los archivos de compilación del juego. Es recomendable utilizar un bucket de Amazon Simple Storage Service (Amazon S3) para almacenar las versiones de la compilación del juego.
-
Pruebe la integración del servidor de juegos. Para esta tarea, es recomendable configurar una flota de Amazon GameLift Servers Anywhere con una estación de trabajo local, tal y como se describe en Configuración de pruebas locales con Amazon GameLift Servers Anywhere. Para este paso, instale manualmente la compilación del servidor de juegos en el dispositivo de prueba e inicie un proceso de servidor. Utilice la CLI de AWS para solicitar una nueva sesión de juego y compruebe que el servicio Amazon GameLift Servers le pida correctamente al proceso del servidor que inicie una sesión de juego.
Cree un método para que el cliente de juego solicite unirse a una sesión de juego, obtenga la información de conexión y, a continuación, se conecte directamente a una sesión de juego alojada. El método más común consiste en configurar una funcionalidad de servicio de backend que sirva de intermediario entre el cliente de juego y el servicio Amazon GameLift Servers. Esto protege los recursos de alojamiento y le aporta un mayor control sobre la ubicación de los jugadores en las sesiones de juego.
-
Desarrolle una funcionalidad de servicio de backend para el alojamiento. El servicio de backend se comunica con el servicio Amazon GameLift Servers y le envía datos de conexión a un cliente de juego. Esta funcionalidad incluye iniciar sesiones de juego, colocar a los jugadores en juegos y recuperar la información de las sesiones de juego. Para obtener instrucciones, consulte Preparación de un juego para su alojamiento con Amazon GameLift Servers. Como mínimo, haga lo siguiente:
-
Obtenga el SDK de AWS para Amazon GameLift Servers y añádalo al proyecto del servicio de backend. Consulte Recursos del SDK de Amazon GameLift Servers para servicios de cliente.
-
Añada código para inicializar un cliente de Amazon GameLift Servers y almacenar la configuración clave. Consulte Configuración de la API de Amazon GameLift Servers.
-
Añada funciones para llamar a la acción
CreateGameSession()de AWS SDK y enviar datos de conexión de la sesión de juego a un cliente de juego. Consulte Create a game session on a specific fleet.Llamar a
CreateGameSession()es un punto de partida muy práctico para solicitar nuevas sesiones de juego. Cuando disponga de un sistema de ubicación de sesiones de juego (consulte el paso 3), sustituirá ese código por una llamada aStartGameSessionPlacement()(o aStartMatchmaking()si utiliza FlexMatch).Para obtener orientación sobre el diseño de un servicio de backend, consulte Creación de un servicio de backend para Amazon GameLift Servers.
-
-
Añada una función en el cliente de juego que permita a los jugadores unirse a una sesión de juego alojada. El cliente de juego hace solicitudes al servicio de backend, no directamente a Amazon GameLift Servers. Cuando el servicio de backend proporciona la información de conexión de la sesión de juego, el cliente de juego se conecta directamente con la sesión de juego para empezar a jugar.
-
Pruebe la integración del cliente de juego. Puede utilizar la misma flota de Amazon GameLift Servers Anywhere con una estación de trabajo local para hacer pruebas.
Durante la fase de desarrollo, si quiere probar el comportamiento de la compilación del juego en una flota administrada por Amazon GameLift Servers, es recomendable que configure también un entorno de pruebas basado en la nube. Esta solución del kit de herramientas de Amazon GameLift Servers imita el comportamiento de una flota administrada, pero le permite actualizar las compilaciones de los servidores de juegos con un tiempo de entrega mínimo.
Personalice cómo desea que Amazon GameLift Servers procese las solicitudes de nuevas sesiones de juego y ubique los servidores de juego disponibles para alojarlos. Amazon GameLift Servers monitoriza automáticamente la disponibilidad de todos los servidores de juego en todas las flotas. Cuando un cliente de juego envía una solicitud para unirse a una sesión de juego, Amazon GameLift Servers busca la mejor ubicación posible en función de un conjunto de prioridades definidas, como el costo, la disponibilidad y un nivel mínimo de latencia.
-
Cree una cola de sesiones de juego para colocar una nueva sesión de juego con los servidores de juego disponibles. Las colas son el mecanismo principal para la ubicación de las sesiones de juego. Para obtener instrucciones, consulte Creación de una cola de sesión de juego.
-
Como mínimo, añada las flotas de Anywhere como destinos en la cola. Todos los demás ajustes son personalizaciones opcionales.
-
-
En el código del servicio de backend, convierta la llamada a
CreateGameSession()enStartGameSessionPlacement(). Consulte Create a game session in a multi-location queue. -
Cree un mecanismo para notificar a un cliente del juego cuando una sesión de juego ya se pueda unir. Durante el desarrollo, puede sondear el estado de las sesiones de juego con una llamada a DescribeGameSessionPlacement. Sin embargo, antes de utilizar una cola para procesar grandes volúmenes, deberá activar las notificaciones de eventos. Consulte Configuración de la notificación de eventos para la ubicación de sesiones de juego..
-
(Opcional) Añada componentes de emparejamiento de FlexMatch. Para obtener instrucciones, consulte la guía para desarrolladores de Amazon GameLift Servers FlexMatch.
Hasta ahora, ha estado trabajando con dispositivos locales (registrados como recursos de computación de flotas de Anywhere) para probar los componentes del juego y hacer iteraciones con ellos. El siguiente paso es configurar el tipo de flotas que necesitará para un sistema de producción. Comience con una flota de Anywhere y añada el agente de Amazon GameLift Servers para gestionar algunas tareas clave de administración de hosts en el entorno informático. Para obtener más información, consulta Uso el agente de Amazon GameLift Servers.
-
Obtenga el agente de Amazon GameLift Servers y añádalo al paquete de instalación del servidor de juegos. Obtenga y compile el código fuente del agente, que está disponible en el repositorio de GitHub del agente de Amazon GameLift Servers
. Ponga el archivo ejecutable JAR resultante en el mismo directorio que el ejecutable de la compilación del juego. -
Modifique el script de arranque del agente según sea necesario. Asegúrese de que el ejecutable del agente se inicie en cuanto el recurso de computación comience a ejecutarse. Consulte el archivo readme del repositorio del agente para obtener ayuda sobre la instalación y ejecución del agente en los recursos de computación de alojamiento. El comando de lanzamiento debería incluir opciones para especificar, como mínimo, la Región de AWS y el ID de flota de Anywhere, una ubicación personalizada y un nombre de recurso de computación.
El agente se encarga automáticamente de las siguientes tareas, así que ya puede eliminarlas si ha estado gestionándolas con scripts:
-
Llama a
RegisterCompute()para añadir el recurso de computación a una flota de Anywhere. -
Llama a
GetComputeAuthToken()para autenticar los servidores de juego cuando se conectan al servicio Amazon GameLift Servers. El agente se encarga de obtener y actualizar el token de autenticación; todos los procesos del servidor de juegos que se ejecutan en el recurso de computación podrán usarlo. -
Inicia nuevos procesos de servidor en el recurso de computación, en función de un conjunto de instrucciones de tiempo de ejecución.
-
-
Cree una configuración de tiempo de ejecución para recursos de computación en la flota de Anywhere. Como mínimo, especifique la ruta de lanzamiento del ejecutable para el servidor de juegos. Puede utilizar la consola de Amazon GameLift Servers o la CLI de AWS para crear o modificar las instrucciones de tiempo de ejecución de la flota. El agente sigue estas instrucciones y solicita actualizaciones de forma periódica al servicio Amazon GameLift Servers.
-
Configure o modifique la cola de sesiones de juego según sea necesario. Cree una nueva cola (o actualice una existente) y designe un destino para la flota de Anywhere implementada con el agente de Amazon GameLift Servers.
-
Pruebe la integración del agente con las flotas de Anywhere. Compruebe que el agente esté iniciando correctamente los procesos del servidor, de acuerdo con la configuración del tiempo de ejecución.
Cree una flota de EC2 administrada por Amazon GameLift Servers para complementar la flota de Anywhere. Si ha configurado un entorno de pruebas basado en la nube en el paso 2 para acelerar el desarrollo, planee crear una flota administrada tras completar la mayor parte del desarrollo y las pruebas del juego. Necesita una flota totalmente administrada para configurar y probar ajustes adicionales, como el escalado automático de la capacidad.
-
Empaquete la compilación del servidor de juegos y cárguela en Amazon GameLift Servers. Cree un script de instalación con los archivos de compilación, las dependencias y el software de soporte. Puede usar el mismo software de compilación en la flota de Anywhere y en la flota administrada. Consulte Creación de una compilación de servidor de juegos para Amazon GameLift Servers. Puede cargar la compilación en Amazon GameLift Servers mediante la consola o la CLI de AWS.
Antes de cargar la compilación, decida en qué Región de AWS quiere crear la flota administrada. Debe cargar la compilación en la misma región. Para obtener más información sobre cómo elegir la ubicación de una flota, consulte Ubicaciones geográficas.
-
Cree una flota de EC2 administrada. Utilice la consola de Amazon GameLift Servers o la CLI de AWS para crear una flota administrada. Cuando crea una flota, Amazon GameLift Servers comienza inmediatamente a implementar la compilación del servidor de juegos para el alojamiento. Puede configurar muchos elementos de una flota administrada. Para obtener instrucciones, consulte Creación de una flota de EC2 administrada por Amazon GameLift Servers. Como mínimo, haga lo siguiente:
-
Póngale un nombre a la flota y especifique qué compilación del juego cargado desea implementar.
-
Elija instancias bajo demanda para la flota y seleccione un tipo de instancia que esté disponible en la ubicación de la flota. Las flotas de spot son una opción valiosa, pero requieren un nivel adicional de diseño y configuración.
-
Cree una configuración de tiempo de ejecución con ajustes similares a los que ha usado con la flota de Anywhere. Como mínimo, especifique la ruta de lanzamiento del ejecutable para el servidor de juegos.
-
Especifique la configuración del puerto para permitir que el tráfico entrante acceda a los servidores de juegos.
-
-
Añada la flota administrada a la cola de sesiones de juego compartida. Actualice la cola del paso 4 para que incluya los destinos de la flota administrada y de la flota de Anywhere implementada con el agente de Amazon GameLift Servers.
-
Prueba el alojamiento de juegos con las flotas administradas. En este momento, debería poder probar todo el ciclo de alojamiento, con un cliente de juego que solicite una sesión de juego, obtenga los datos de conexión y se conecte correctamente a una sesión de juego.
Durante la preparación para el lanzamiento del juego, tendrá que afinar las soluciones de alojamiento. Estos son algunos de los factores en los que deberá pensar:
-
Para las flotas de Anywhere, automatice el proceso de inicio y apagado de los recursos de computación según sea necesario, lo que incluye la instalación y la ejecución del software del servidor de juegos. Reciclar los recursos de computación resulta útil para garantizar que estos se actualicen periódicamente, y el apagado de dichos recursos cuando no son necesarios puede ahorrar costos.
-
Si el servidor de juegos necesita comunicarse con otros recursos de AWS, configure los roles de IAM para administrar el acceso. Consulte Conexión de un servidor de juegos alojado en Amazon GameLift Servers a otros recursos de AWS.
-
Decida dónde desea ubicar geográficamente los servidores de juegos. Añada ubicaciones remotas a las flotas administradas. Consulte Personalizaciones de recursos de alojamiento.
-
En el caso de las flotas administradas, valore la opción de usar flotas de Spot para ahorrar costos. Consulte Reducción de los costos de alojamiento de juegos con flotas de spot .
-
Optimice el rendimiento de las flotas; para ello, seleccione las configuraciones de los recursos de computación y, a continuación, configure las instrucciones de tiempo de ejecución de tal modo que se ejecute el número óptimo de procesos de servidor por cada recurso de computación. Haga esto tanto para las flotas de Anywhere como para las flotas administradas. Consulte Optimización de la configuración del tiempo de ejecución del servidor de juegos en Amazon GameLift Servers administrado.
-
Experimente con las opciones de ubicación de sesiones de juego para las flotas administradas, lo que incluye personalizar los ajustes de priorización. Consulte Personalización de colas de sesiones de juego.
-
En el caso de las flotas administradas, configure el escalado automático de la capacidad para satisfacer la demanda prevista de jugadores. Consulte Escalado de la capacidad de alojamiento de juegos con Amazon GameLift Servers.
-
Para las flotas de Anywhere, cree mecanismos para gestionar el escalado automático o manual de la capacidad, a fin de satisfacer la demanda prevista de jugadores.
-
Diseñe e implemente medidas de conmutación por error a otros recursos cuando sea necesario. Configure flotas en espera en otras Regiones de AWS y modifique las colas y el escalado automático para la gestión de conmutaciones por error en caso de que sea necesario.
-
Configure las herramientas de observabilidad del alojamiento, como los análisis y el registro. Consulte Supervisión de Amazon GameLift Servers. Cree grupos de métricas a fin de agregar análisis para todos los recursos de alojamiento.
-
Automatice la implementación mediante la infraestructura como código (IaC). Consulte Administración de los recursos de alojamiento de Amazon GameLift Servers con CloudFormation.
Amazon GameLift Servers admite el uso de plantillas de AWS CloudFormation para cualquier configuración específica de la implementación. También puede utilizar AWS Cloud Development Kit (AWS CDK) para definir sus recursos de Amazon GameLift Servers. Para obtener más información acerca de AWS CDK, consulte la Guía para desarrolladores de AWS Cloud Development Kit (AWS CDK).
Para administrar la implementación de sus pilas de CloudFormation, le recomendamos utilizar herramientas y servicios de integración y entrega continuas (CI/CD), como AWS CodePipeline. Estas herramientas le ayudarán con la implementación automática y la aprobación cada vez que cree un archivo binario para el servidor de juegos. Con una herramienta o un servicio de CI/CD, la implementación de recursos para una nueva versión del servidor de juegos puede tener este aspecto:
-
Compilar y probar el archivo binario del servidor de juegos.
-
Cargar el archivo binario en Amazon GameLift Servers.
-
Implementar nuevas flotas con la nueva compilación.
-
Añadir las nuevas flotas a la lista de sesiones de juego y eliminar las flotas de la versión de compilación anterior.
-
Cuando las flotas de la versión anterior ya no alojen sesiones de juego activas, eliminar las pilas de CloudFormation de esas flotas.
-