Consommation PlayFab : pratiques exemplaires
Avec le modèle de tarification à la consommation de PlayFab, vous ne payez que l’utilisation réelle des services par vos titres. Mais cela soulève une question évidente : comment optimiser au mieux ces titres pour économiser de l’argent, tout en implémentant toutes les fonctionnalités dont vous avez besoin? Dans ce document, nous examinons ces détails et présentons des pratiques exemplaires qui vous aideront à anticiper. Avant de faire passer vos titres du mode Développement à la production, vous pouvez consulter les informations des compteurs dans l’onglet Billing Summary de Game Manager. Il existe six compteurs de consommation : Events, Profile, Content and Configuration, CloudScript, Insights et Multiplayer Services. La meilleure façon de commencer à optimiser un titre consiste à examiner chacun des compteurs qu’il utilise et à observer leur évolution dans le temps. Cela vous permet de dégager rapidement quelques améliorations évidentes. Pour plus d’informations sur les compteurs, consultez Compteurs de tarification.Événements
Il existe deux types d’événements dans PlayFab : PlayStream et Telemetry. PlayFab traite les événements PlayStream afin de vérifier s’ils déclenchent des actions PlayStream que vous avez définies et de mettre à jour la segmentation des utilisateurs. Certains événements PlayStream sont générés automatiquement à la suite d’appels à des fonctionnalités de service telles que l’authentification et la mise à jour des statistiques. Les titres peuvent générer leurs propres événements personnalisés pour étendre cette fonctionnalité. Les événements de télémétrie ne sont pas traités par PlayStream. Ces événements sont utilisés pour l’analytique et sont envoyés directement à l’entrepôt de données. Les événements de télémétrie ne sont pas générés automatiquement dans PlayFab : il s’agit d’événements personnalisés générés par le titre. Pour les deux types d’événements, des charges utiles de données plus volumineuses augmentent l’utilisation totale des compteurs. Vous pouvez réduire cette utilisation globale en veillant à n’envoyer que les données dont vous avez besoin. En règle générale, un événement donné incrémente le compteur concerné de 1 pour chaque Ko de données dans le corps de l’événement. Pour choisir le chemin d’événement le mieux adapté à votre utilisation, vous devez avoir un plan clair de l’utilisation prévue de chaque événement personnalisé que vous générez. Les événements qui ne sont nécessaires que pour l’évaluation hors ligne du titre doivent emprunter la voie de la télémétrie. Cela peut réduire considérablement les coûts, car les frais de dépassement des événements de télémétrie sont inférieurs à la moitié de ceux de PlayStream. Si vous utilisez l’un des SDK prédéfinis, n’oubliez pas que certaines données analytiques sur le comportement des utilisateurs sont générées automatiquement, comme décrit dans la référence du modèle d’événements PlayStream. Pour désactiver les événements facultatifs, modifiez le paramètre d’analytique dans l’onglet Settings/Data Collection de votre jeu dans PlayFab Game Manager. De même, s’il est judicieux d’activer l’option “generate PlayStream event” pour vos exécutions CloudScript pendant le débogage, assurez-vous de la désactiver avant la mise en production. Dans le cas des CloudScripts déclenchés par des actions PlayStream, vous pouvez toujours les réactiver ultérieurement si vous devez déboguer un comportement en conditions réelles.Profile
Le profil correspond en pratique à « tout ce qui concerne le joueur », y compris des éléments courants tels que l’inventaire, les données enregistrées et les statistiques. Il contient également les métadonnées que vous utilisez pour offrir des expériences uniques grâce aux fonctionnalités LiveOps de PlayStream, comme la segmentation des utilisateurs mentionnée ci-dessus. En outre, certaines fonctionnalités héritées au niveau du titre, telles que Title Data, Catalogs et Stores, sont incluses dans ce compteur, car l’implémentation de leurs données est en pratique identique à celle de User Data. Comme cet ensemble de compteurs est alimenté par toutes les actions des joueurs et toutes les actions effectuées sur les joueurs, c’est de loin celui qui nécessite le plus de planification en matière d’optimisation. Les principaux facteurs qui contribuent à l’utilisation enregistrée par les compteurs de tarification sont la quantité de données lues, stockées et écrites, ainsi que la fréquence d’appel des API qui génèrent des données mesurées. Pour plus d’informations sur les appels d’API spécifiques qui font « tourner » ces compteurs, consultez Compteurs de tarification. Nous allons commencer par User Data et Statistics, car leurs modèles d’utilisation sont similaires, puis nous aborderons la gestion de l’inventaire des joueurs.Données et statistiques
Pour évaluer votre utilisation de User Data, la même logique d’approximation que pour les événements s’applique (chaque Ko augmente le compteur de 1), mais gardez à l’esprit que chaque « élément » d’un appel doit être considéré comme distinct dans ce calcul. Chaque paire clé-valeur d’un appel de mise à jour de User Data est comptabilisée séparément. Pour les lectures, ce calcul par Ko s’applique au total des données retournées, quel que soit le nombre de paires clé-valeur. Cela signifie que l’écriture de 10 clés de 100 octets chacune correspond à 10 « incréments » du compteur d’écriture de profil, puisque chaque écriture de paire clé-valeur compte pour 1 Ko au minimum, tandis qu’une lecture de ces 10 clés correspond à 1 « incrément », puisque le total est de 1 Ko. Pour plus de détails sur les utilisations, consultez Compteurs de tarification. Les statistiques sont un peu plus complexes, car elles mettent à jour le profil et peuvent également avoir une incidence sur les classements. En règle générale, vous pouvez considérer chaque mise à jour de statistique comme une mise à jour complète du profil, tandis que les lectures dépendent de la taille totale des données lues lors de chaque appel. Et comme le stockage est facturé par gigaoctet (Go) et que les statistiques ne consomment généralement que quelques octets chacune, nous nous concentrerons sur les lectures et les écritures. Comme la taille totale des données est importante, son optimisation constitue la première étape. Heureusement, il existe un large éventail de techniques bien connues : utiliser des énumérations ou des ID à la place du texte en toutes lettres pour les objets, empaqueter les données volumineuses au format binaire, voire utiliser des champs de bits pour réduire l’espace occupé par les données. Une fois cela fait, l’étape suivante consiste à évaluer soigneusement à quel moment vous devez effectuer ces appels de lecture et d’écriture. Si vous venez du développement PC ou console, en particulier de jeux solo, ce modèle peut être nouveau pour vous. Dans ces environnements, vous devez faire attention à la consommation de ressources et au garbage collection sur l’appareil client, car ils peuvent dégrader les performances à des moments critiques. Lorsque votre titre utilise des ressources situées dans le nuage, il est nécessaire d’étendre cette logique en considérant que chaque sollicitation de ressource a un coût réel, en plus d’un coût en performances. Comment déterminer la fréquence optimale des lectures et des écritures? Deux des préoccupations les plus courantes des développeurs qui souhaitent mettre à jour plus fréquemment les données et les statistiques sont la protection contre la triche et la disponibilité d’informations à jour côté serveur, que ce soit pour les interactions entre joueurs ou pour éviter les pertes de données si le jeu se ferme de façon inattendue.Protection contre la triche
Même s’il peut sembler nécessaire de mettre constamment à jour vos données de back-end pour garantir une sécurité essentielle, des mises à jour fréquentes sont rarement nécessaires si votre jeu n’exige pas un contrôle de la session faisant entièrement autorité côté serveur. Pour commencer, la question fondamentale est de savoir quel niveau de sécurité vous est réellement nécessaire. Pour certains jeux, notamment ceux qui se monétisent principalement par la publicité en jeu et ne comportent pas de classements, la triche n’est pas vraiment un problème. Dans ce cas, faire confiance aux données envoyées par le client est souvent une approche viable, car la sécurité de ces données n’est pas réellement un enjeu. Pour identifier les comportements de triche et décider de la façon de les gérer, nous vous recommandons de mettre en place des processus d’examen des événements, des données et des statistiques de vos joueurs. Pour d’autres jeux, dans lesquels vous devez garantir l’intégrité de la compétition ou protéger l’expérience globale des joueurs, une sécurité renforcée est plus importante. Selon vos exigences spécifiques, certaines approches peuvent réduire la fréquence des lectures et des écritures de données dans ces situations. Si votre jeu ne se déroule pas en temps réel, une approche que nous recommandons consiste à agréger les informations sur la partie du joueur sur une certaine période (souvent une « manche » de quelques minutes), puis à envoyer ces données à un script qui détermine si elles sont valides. Les éléments clés à évaluer peuvent dépendre du jeu, mais voici quelques exemples de notions courantes à prendre en compte :- Combien de temps s’est-il écoulé depuis le dernier rapport de session, et combien de temps le client indique-t-il avoir joué lors de la dernière session?
- Quels scores le joueur a-t-il enregistrés, et sont-ils plausibles compte tenu de son niveau, de son équipement, etc.?
Actualité des données
L’une des préoccupations récurrentes des développeurs dont le taux d’écriture de profil est élevé est le risque de perte de progression du joueur. Si le joueur quitte le jeu avant qu’il puisse enregistrer et que l’état local ne peut pas être utilisé lors de la partie suivante, ou si cet état doit être transféré d’un appareil à l’autre, il faut que les informations d’état du joueur stockées dans PlayFab soient aussi à jour que possible. Pour de nombreux jeux, vous pouvez résoudre ce problème en mettant en place une pulsation régulière et peu fréquente de mises à jour vers le service (toutes les 15 minutes, par exemple). L’ajout d’une logique supplémentaire pour allonger ou raccourcir cette fréquence peut également être utile. Par exemple :- Prévoyez un mécanisme de « mise à jour importante » qui déclenche une écriture immédiate et réinitialise le minuteur lorsque le joueur réalise activement une action importante, afin qu’elle ne puisse pas être perdue.
- Si votre jeu continue de progresser sans intervention du joueur, envisagez d’allonger la période de pulsation en l’absence d’intervention prolongée. C’est particulièrement important pour les jeux « idle », que les joueurs laissent souvent tourner toute la nuit.
- Offrez aux joueurs un moyen de forcer directement une mise à jour, par exemple à l’aide d’un bouton dans un menu utilisateur. Dans ce cas, veillez toutefois à limiter la fréquence réelle des appels de l’appareil client vers PlayFab, afin qu’un joueur qui appuie sur ce bouton à répétition ne génère pas un appel à chaque fois.
