Consumo de PlayFab: procedimientos recomendados
Con el modelo de precios basado en el consumo de PlayFab, solo paga por el uso real del servicio de sus títulos. Pero esto plantea una pregunta obvia: ¿cuál es la mejor manera de optimizar esos títulos para ahorrar dinero y, al mismo tiempo, implementar todas las características que necesita? En este documento, profundizamos en esos detalles y hablamos de los procedimientos recomendados que le ayudarán a planificar con antelación. Antes de pasar los títulos del modo de desarrollo a Live, puede revisar la información de los medidores en la pestaña Billing Summary de Game Manager. Hay seis medidores de consumo: eventos, perfil, contenido y configuración, CloudScript, Insights y servicios multijugador. La mejor manera de empezar a optimizar un título es examinar cada uno de los medidores que usa y ver cómo se acumula a lo largo del tiempo. Esto le permite deducir rápidamente algunas mejoras obvias. Para obtener más información sobre los medidores, consulte Medidores de precios.Eventos
Hay dos tipos de eventos en PlayFab: PlayStream y telemetría. PlayFab procesa los eventos de PlayStream para comprobar si desencadenan acciones de PlayStream que haya definido y para actualizar la segmentación de usuarios. Algunos eventos de PlayStream se generan automáticamente como resultado de llamadas a características del servicio, como la autenticación y las actualizaciones de estadísticas. Los títulos pueden generar sus propios eventos personalizados para ampliar esta funcionalidad. PlayStream no procesa los eventos de telemetría. Estos eventos se usan para análisis y van directamente al almacenamiento de datos. Los eventos de telemetría no se generan automáticamente en PlayFab; son eventos personalizados generados por el título. Para ambos tipos de eventos, las cargas de datos más grandes aumentan la cantidad total de uso del medidor. Puede reducir ese uso general asegurándose de enviar solo los datos que necesita. Como guía aproximada, cualquier evento incrementa el medidor en cuestión en 1 por cada 1 KB de datos en el cuerpo del evento. Para elegir qué ruta de eventos se adapta mejor a su uso, debe tener un plan claro de cómo pretende usar cada evento personalizado que genere. Los eventos que solo se necesitan para la evaluación sin conexión del título deben ir por la ruta de telemetría. Esto puede ayudar a reducir significativamente los costos, ya que los cargos por excedente de los eventos de telemetría son menos de la mitad que los de PlayStream. Si usa uno de los SDK precompilados, es importante recordar que algunos datos de análisis sobre el comportamiento de los usuarios se generan automáticamente, tal como se describe en la referencia del modelo de eventos de PlayStream. Para desactivar los eventos opcionales, cambie la configuración de análisis en la pestaña Settings/Data Collection de su juego en Game Manager de PlayFab. Del mismo modo, aunque es una buena idea tener activada la opción “generate PlayStream event” para las ejecuciones de CloudScript durante la depuración, debe asegurarse de deshabilitarla antes de pasar a producción. En el caso de los CloudScripts desencadenados por acciones de PlayStream, siempre puede volver a activarlos más adelante si necesita depurar algún comportamiento en producción.Perfil
El perfil es, en la práctica, “todo lo relativo al jugador”, incluidos elementos comunes como el inventario, los datos guardados y las estadísticas. También contiene la metainformación que usa para ofrecer experiencias únicas a través de las funcionalidades de LiveOps en PlayStream, como la segmentación de usuarios mencionada anteriormente. Además, algunas características heredadas de nivel de título, como Title Data, los catálogos y las tiendas, se incluyen en este medidor, ya que su implementación de datos es prácticamente la misma que la de User Data. Dado que este conjunto de medidores se ve afectado por todas las acciones de los jugadores y las acciones realizadas sobre los jugadores, es con diferencia el que requiere más planificación de optimización. Los principales factores que contribuyen al uso capturado por los medidores de precios son la cantidad de datos que se leen, almacenan y escriben, y la frecuencia con la que se llama a las API que generan datos que se miden. Para obtener más información sobre las llamadas a API específicas que generan “consumo” en estos medidores, consulte Medidores de precios. Comenzaremos con User Data y las estadísticas, ya que sus patrones de uso son similares, y luego hablaremos de la administración del inventario del jugador.Datos y estadísticas
Al evaluar el uso de User Data, se aplica la misma lógica de aproximación que para los eventos: cada 1 KB aumenta el recuento del medidor en 1, aunque tenga en cuenta que cada “elemento” de una llamada debe considerarse distinto a efectos de este cálculo. Cada par clave-valor de una llamada para actualizar User Data se contabiliza por separado. En el caso de las lecturas, este cálculo de 1 KB se aplica al total de datos devueltos, independientemente del número de pares clave-valor. Esto significa que escribir 10 claves de 100 bytes cada una supone 10 “incrementos” del medidor de escrituras de perfil, ya que cada escritura de un par clave-valor es de un mínimo de 1 KB, mientras que una lectura de esas 10 claves supone 1 “incremento”, ya que es un total de 1 KB. Para obtener detalles más específicos sobre los usos, consulte Medidores de precios. Las estadísticas son ligeramente más complejas, ya que actualizan el perfil y también pueden afectar a las tablas de clasificación. Como regla general, puede considerar cada estadística actualizada como una actualización completa del perfil, mientras que las lecturas se basan en el tamaño total de los datos leídos en cada llamada. Y dado que el almacenamiento se cobra por gigabyte (GB) y las estadísticas suelen consumir solo unos pocos bytes cada una, nos centraremos en las lecturas y escrituras. Puesto que el tamaño total de los datos es importante, optimizarlo es el primer paso. Afortunadamente, hay una amplia gama de técnicas bien conocidas para ello: usar enumeraciones o identificadores en lugar de texto escrito para los elementos, empaquetar datos grandes como binarios o incluso usar campos de bits para empaquetar datos en espacios más pequeños. Una vez hecho eso, el siguiente paso es evaluar cuidadosamente cuándo es necesario realizar esas llamadas de lectura y escritura. Si viene del desarrollo para PC o consola, especialmente de juegos para un solo jugador, este podría ser un patrón nuevo. Pero en esos entornos, debe tener cuidado con los accesos a recursos y la recolección de elementos no utilizados en el dispositivo cliente, ya que pueden provocar una degradación del rendimiento en momentos críticos. Cuando el título usa recursos que están en la nube, es necesario ampliar esa lógica para considerar que cada acceso a un recurso tiene un costo real, además de un costo de rendimiento. ¿Cómo se determina la frecuencia óptima de lecturas y escrituras? Dos de las preocupaciones más comunes de los desarrolladores que quieren actualizar los datos y las estadísticas con más frecuencia son protegerse contra las trampas y disponer de información puntual almacenada en el servidor, ya sea para interacciones entre jugadores o para evitar la pérdida de datos si el juego se cierra de forma inesperada.Protección contra trampas
Aunque pueda parecer que necesita actualizar constantemente los datos del back-end para garantizar una seguridad esencial, las actualizaciones frecuentes rara vez son necesarias si el juego no requiere un control totalmente autoritativo del servidor sobre la sesión. Para empezar, la pregunta fundamental es cuánta seguridad necesita realmente. Para algunos juegos, en particular los que se monetizan principalmente a través de anuncios dentro del juego y no tienen tablas de clasificación, las trampas no son una gran preocupación. En este caso, confiar en los datos que envía el cliente suele ser un enfoque viable, ya que la seguridad de esos datos no es realmente una preocupación. Para identificar comportamientos de trampas y decidir cómo quiere gestionarlos, se recomienda implementar procesos para revisar los eventos, los datos y las estadísticas de los jugadores. Para otros juegos en los que necesita respaldar la integridad de la competición o proteger la experiencia general del jugador, una seguridad más sólida es más importante. En función de sus requisitos específicos, ciertos enfoques pueden reducir la frecuencia de lecturas y escrituras de datos en esas situaciones. Si el juego no es en tiempo real, un enfoque que se recomienda es agregar información sobre la partida del jugador durante un período de tiempo (a menudo una “ronda” del juego, que dura varios minutos) y luego enviar esos datos a un script que determine si son válidos. Los elementos clave que se deben evaluar pueden depender del juego, pero algunos ejemplos de conceptos comunes que se deben considerar son:- ¿Cuánto tiempo ha pasado desde el último informe de sesión y cuánto tiempo dice el cliente que jugó en el más reciente?
- ¿Qué puntuaciones registró el jugador y son razonables para ese jugador dado su nivel, equipamiento, etc.?
Puntualidad de los datos
Un tema común que hemos escuchado entre los desarrolladores con altas tasas de escritura de perfil es que les preocupa que el jugador pierda el progreso. Si el jugador sale del juego antes de que se pueda guardar y el estado local no se puede usar la próxima vez que se juegue, o si ese estado debe viajar entre dispositivos, querrá que la información de estado del jugador almacenada en PlayFab esté lo más actualizada posible. Para muchos juegos, puede abordar este problema con un latido regular y poco frecuente de actualizaciones al servicio (cada 15 minutos, por ejemplo). Pero incluir lógica adicional para alargar o acortar esa frecuencia también puede ayudar. Por ejemplo:- Incluya una invalidación de “actualización importante” que provoque una escritura inmediata y restablezca el temporizador si el jugador hace activamente algo significativo, de modo que no pueda perderse.
- Si el juego sigue progresando sin la intervención del jugador, considere alargar el período del latido si no ha habido entrada durante mucho tiempo. Esto es especialmente importante para los juegos idle, en los que los jugadores suelen dejarlos en ejecución durante la noche.
- Ofrezca a los jugadores una forma de forzar una actualización directamente, como un botón en un menú de usuario. Sin embargo, en este caso, asegúrese de limitar la frecuencia con la que se realizan realmente las llamadas desde el dispositivo cliente a PlayFab, de modo que un jugador que pulse ese botón una y otra vez no genere una llamada cada vez.
