Le pari sportif connaît depuis quelques années une forte croissance en France et en Europe (+30% en France en 2021, source ANJ). Tous les acteurs du secteur sont confrontés à ce problème : comment permettre une continuité de service sans faille alors même que le nombre de sollicitations des systèmes augmente de manière exponentielle ? Paroxysme de ce phénomène, l’Euro 2020 de football a mis le secteur dans une effervescence inégalée.
Pour nous préparer à cet évènement, chez Betclic, nous avons développé une plateforme de génération de tests de charge afin de rejouer des événements passés et les actions associées (placement de paris, consultations des offres, etc). Basée sur un datalake ingérant nos logs, la solution nous permet de simuler une croissance paramétrable (+50%, +100%)
Nous vous proposons une présentation de l’architecture mise en place et des outils utilisés (AWS Glue, Athena), ainsi que nos stratégies de tests de charge mis en place avec l’outil Gatling.
[Devoxx] Comment Betclic utilise son datalake pour générer des tests de charge et simuler des évènements sportifs.pptx
1. #DevoxxFR
Comment Betclic utilise son datalake pour
générer des tests de charge et simuler des
évènements sportifs
Nicolas Jozwiak @njozwiak
Etienne Puissant
1
NJ
Univers par Pays et par Régulations (ANJ, SRIJ), avec des obligations et lois à respecter
Industrie de l'instant de jeux, sinon les joueurs vont ailleurs
NJ
Univers par Pays et par Régulations (ANJ, SRIJ), avec des lois
Industrie de l'instant de jeux, sinon les joueurs vont ailleurs
Transition à faire en parlant des tests de charge
EP
Observations des courbes d'appels APIs sur Appdynamics pour degager une tendance de courbe de charge a reproduire sur notre outil de test de charge
On peut voir des montées progressives, des pics et des moment plus constants et calme.
L'objectif est de reproduire ce type de courbe
EP
Reproduction des courbes obvervées grace a Gatling, notre moteur de load test
Configuration de différents types d'injections (Ramp, Constant, Increment)
Ces courbes respectent les "tendances" observée sur la plateforme mais reste différente
EP
Lors d'un match de foot on peut observer plusieurs phénomènes lié a des évenments pendant le match :
- Un joueur marque un but
- Un penalty est sifflé
Tout ces evenements engendrent des comportements différents au niveau de la platforme.
Un exemple, si Mbappé marque un but, les joueurs vont se connecter pour voir s'ils ont pariés sur lui et profiterons de la mi-temps pour replacer des paris
Autre comportement notable, a la fin d'un match, les joueurs qui ont gagner vont soi reparier leur gains, ou faire un retrait.
NJ
Intro User Session:
Before explain how we catch a user session, let’s explain what is a user session?
Explain the schema:
A user session is a sequence of event generated by a real user in different order. We record all actions like login, check your selections, check your wallet , logout …
As soon as you open your Betclic app, you create new event to your user session.
Une sequence d’évenements générés par des utilisateurs rééls
Les évenements sont dans un ordre different d’une session a l’autre
Les combinaisons d’évenements sont infinies
(apparition des flèches colorés après)
NJ
L'idée de la diap : comment sont colléctées les actions des utilisateurs et le traffic API
Trois sources de données sur datadog, les logs IIS (logs applicatifs), logs Kong (API gateway), Varnish (le cache)
Sur snowflake nous récupérons des données liées au business comme la validation de résultats, ou certains type de placements de paris
Note GDPR : on travaille sur des données anonymisées, on ne s'intéresse que aux comportementx des joueurs
NJ
comment est rejoué le traffic
A l'aide d'un fichier de feeder, un fichier de data qui contient la liste des requetes éfféctués par des utilisateur de la plateforme
Avec des toute les parametre necessaires (method, body, status_code)
Les requetes seront jouer les unes après les autres en respectant les pauses entre chaque appels comme dans la réalité.
Possibilité de rejouer ces sessions avec X users virtuels /s
EP
Rentrer dans le détails des technologies
- Lambda
- Glue Job
- DotNet
Rejouer des matchs passés
EP
Préparation des users de tests
Génération d'un feeder utilisateur
Crédit d'argent sur les comptes de tests
Cibler la portée du test
général, paris, casino, poker
Par type de sport
Rejouer avec une charge variable (*10%, *150%)
EP
EP
Possibilité de load-test avec des typologies différentes, plus proche de la réalité
Observations de nouveaux points de contentions, pas toujours visibles avec des load-tests classiques
Possibilité de rejouer des évenements passés pour comprendre le comportement de la plate-forme face à des charges et contextes spécifiques
Utilisation du datalake pour d’autres buts comme l’analyse du traffic des apis au court du temps (dashboard quicksight)
Athena pour faire des analyses rapide sur les données, et générer certains type de feeder spécifiques
Athena nous a aussi servit au début du projet pour crééer des feeders, mais nous étions vite limité a cause de la quantité de données a traiter.
Quicksight pour faire du dashboarding
EP
EP
Les services AWS nous permettent de garder le même ecosystème pour la partie technique et possèdent des interactions qui facilitent l’implementation
Step Functions : Prise en main rapide, possède de nombreuses fonctions clés en main pour intéragir avec les outils AWS (S3, Lambda)
Glue ETL : Fort coût d’entrée, mal documenté, recrutement d'un expert
EP
EP
EP
Prix S3 au mois, mise en place de lifecycle,
Glue cher
Step function pas cher
Pour les load test et gatling cout très variable selon la puissance necessaire et la frequence des tests
Evoquer le temps de traitement