Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
GAMEREL03-BP02 Implementa una combinación flexible de funciones del juego para gestionar los fallos con un impacto mínimo en la experiencia del jugador.
El desacoplamiento de los componentes se refiere al concepto de diseñar los componentes del servidor para que puedan funcionar de la forma más independiente posible. Algunos aspectos del juego son difíciles de disociar, ya que los datos deben estar lo más actualizados posible para ofrecer a los jugadores una buena experiencia de juego. Sin embargo, muchos componentes y tareas del juego se pueden disociar. Por ejemplo, las tablas de clasificación y los servicios de estadísticas no son fundamentales para la experiencia de juego, y las lecturas y escrituras de estos servicios se pueden realizar de forma asíncrona desde el juego.
Nivel de riesgo expuesto si no se establece esta práctica recomendada: alto
Guía para la implementación
Aplica una degradación correcta de las funciones de tu juego que puedan ser deshabilitadas automáticamente o por un administrador si se detectan problemas, y configura los servicios iniciales que dependen de la función para poder gestionar el error sin problemas. Por ejemplo, si los datos específicos de un jugador no se cargan correctamente en el cliente del juego, deberías considerar si estos datos son fundamentales para la experiencia de juego. Si no es así, configura el cliente del juego para que gestione correctamente este error sin interrumpir la experiencia del jugador, y opta por volver a intentar recuperar estos datos más adelante, cuando el jugador vuelva a visitar la pantalla.
Emplea lógicas como los tiempos de espera, los reintentos y los retrocesos para gestionar los errores y los fallos. Los tiempos de espera evitan que los sistemas se bloqueen durante períodos excesivamente largos. Los reintentos pueden proporcionar una alta disponibilidad de errores transitorios y aleatorios.
Defina los componentes no críticos que se puedan acoplar libremente a los componentes críticos. El acoplamiento flexible permite que los sistemas sean más resilientes, ya que los fallos en un componente no repercuten en otros. Si las funciones del juego no requieren conexiones activas a los servidores o al backend del juego, deberías implementar protocolos sin estado para escalar de forma dinámica y recuperarte de fallos transitorios. Desarrolle sus componentes no críticos de forma que puedan combinarse de forma flexible con protocolos sin estado mediante una API. HTTP/JSON Implemente las llamadas de red desde el cliente del juego para que sean asíncronas y no bloqueen, a fin de minimizar el impacto que las funciones del juego u otros servicios dependientes pueden tener en los jugadores.
Para mejorar aún más la resiliencia mediante un acoplamiento flexible, utiliza un servicio de mensajería, como un sistema de colas, streaming o un sistema basado en temas entre componentes que se pueda gestionar de forma asíncrona. Este modelo es adecuado para una interacción que no requiere una respuesta inmediata o en la que basta con confirmar que se ha registrado una solicitud. Esta solución incluye un componente que genera eventos y otro que los consume. Los dos componentes no se integrarán mediante una point-to-point interacción directa, sino a través de un elemento intermedio, como un almacenamiento duradero o una capa de colas. Esto también ayuda a mejorar la confiabilidad del sistema al preservar los mensajes cuando se produce un error en el procesamiento.
Investigue y seleccione un mecanismo de mensajería adecuado, ya que los distintos servicios de mensajería tienen características diferentes, como los mecanismos de pedido y entrega. Diseñe las operaciones para que sean idempotentes, de modo que el sistema de mensajes elegido entregue los mensajes al menos una vez. A modo de ejemplo, consideremos un caso de uso típico de un juego en el que el juego necesita registrar el tiempo de juego de los jugadores, las estadísticas u otros datos relevantes, lo que puede llevar a un uso de alto rendimiento de escritura en momentos de máxima concurrencia de jugadores.
Para implementar una arquitectura fiable, considera si el caso de uso requiere read-after-write coherencia según la percepción del jugador. Por lo general, estos escenarios son adecuados para el procesamiento asíncrono y se pueden lograr mediante la implementación de un patrón de cola de escritura en el que las solicitudes se ingieren en una cola de mensajes escalable y duradera, como Amazon SQS, y se pueden insertar en la base de datos de backend en lotes mediante un servicio de consumo, como una función Lambda. Este enfoque es más fiable que la comunicación sincrónica entre varios componentes distribuidos, como el cliente del juego del jugador, los servidores web y de aplicaciones de backend y el sistema de base de datos interno. También reduce los costes, ya que no es necesario escalar la base de datos interna para alcanzar los picos de rendimiento de escritura, ya que el procesamiento realizado por los consumidores desde la cola de escritura puede utilizarse para reducir esta tasa de ingestión según sea necesario.
Pasos para la implementación
-
Separa los componentes no esenciales, como las tablas de clasificación y los servicios de estadísticas, de las funciones fundamentales del juego para permitir operaciones asincrónicas y mejorar la resiliencia.
-
Aplica una degradación adecuada de las funciones que no son esenciales con una lógica para los tiempos de espera, los reintentos y los retrasos, y comprueba que el cliente del juego gestiona los fallos sin interrumpir la experiencia del jugador.
-
Utilice sistemas de mensajería como Amazon SQS para la comunicación asíncrona entre componentes, lo que permite un procesamiento escalable, duradero y fiable de casos de uso de alto rendimiento.