Skip to main content

Calcul des scores

Méthode de calcul des scores

Généralités

Les teams peuvent visualiser l’évolution de leur score, minute par minute, depuis les graphiques proposés par la dashboard du jeu.

A noter que la dashboard se met à jour automatiquement toutes les 10 secondes (il n’est pas nécessaire d’actualiser la page manuellement).

A chaque Team est associée un tableau contenant des données de scoring. Voici un exemple de map représentant un score :

const score_sample = {
timestamp: "2020-03-10T14:01:56.666Z",
up: 500,
down: 30,
profit: 783,
resources: {
ec2: 15,
loadBalancer: 5,
},
};

A t = 2020-03-10T14:01:56.666Z, la team détenant ce score a traité avec succès, depuis le début du jeu, 500 requêtes et en a perdu 30.

A cet instant, elle a utilisé 15$ d’EC2 et 5$ de LoadBalancer.

Dans notre exemple, si ce score est calculé 5 minutes après le début du jeu et qu’initialement la team est entrée dans le jeu avec un load balancer redirigeant les requêtes vers un autoscaling group de 3 instances, nous avons :

  • 5$ de load balancer
  • 5$ × 3 = 15$ d’EC2

Le “profit” représente le résultat d’exploitation cumulé :

résultat d’exploitation = chiffre d’affaire - coûts d’exploitation

Ainsi dans notre exemple, avec les paramètres suivants (la détermination de ces paramètres est décrite plus bas) :

  • le gain par requête correctement traitée est de 1.6606 $
  • le coût d’une EC2 par minute est de 13.2 $
  • le coût d’un load balancer par minute est de 26.46 $

On a :

profit = 500 × 1.6606 - 15 - 5 = 783 $

Détermination des coûts des ressources

Le bénéfice sur une minute, pour 1 load balancer et 3 ec2 (situation type au cours du jeu) est modélisé par l’équation suivante :

n × g -3 × Cec2 - Clb = B

Avec :

SymboleValeur
nNombre de requêtes traitées en moyenne par minute
gGain obtenu pour le traitement d’une requête
Cec2Coût d’une Ec2 pour une minute d’utilisation
ClbCoût d’une LoadBalancer pour une minute d’utilisation
BBénéfice sur une minute

Par conséquent le gain obtenu pour le traitement d’une requête est le suivant :

g = (B + 3 × Cec2 + Clb) / n

Le coût des ressources s’inspire des coûts réels pratiqués par AWS, rehaussés de manière à pouvoir s’adapter au contexte du jeu.

Les coûts des ressources pouvant être trouvés dans la section Billing de la console AWS sont :

Coûts réels

EC2 :

  • $ 0,0132 per On Demand Linux t2.micro Instance Hour

Load Balancer :

  • $ 0,02646 per Application LoadBalancer - hour

RDS :

  • $ 0,019 per RDS instance - hour

Lambda :

  • $ 0,0000002083 pour 128 Mo par 100 ms
  • 0,0000002083 × 10 × 3600 = 0,0074988 $ / heure

ECS (FARGATE) :

  • 0.0486 $ par vCPU / heure
  • 0.0053 $ par Go / heure

Dans le jeu, les coûts sont calculés de la manière suivante :

Coût par minute dans le jeu = Coût réel par heure × 1 000

D’où les coûts suivants, pratiqués dans le jeu :

Coûts dans le jeu

EC2 :

  • $ 13,2 per On Demand Linux t2.micro Instance Minute

Load Balancer :

  • $ 26,46 per Application LoadBalancer - minute

RDS

  • $ 19 per RDS Instance

Lambda :

  • $ 7.4988 par minute

ECS (FARGATE) :

  • $ 29,6 par conteneur en config recommandée (0.5 vCPU, 1Go RAM)

Ces coûts nous permettent de déterminer le gain associé au traitement d’une requête :

  • si l’on considère qu’en moyenne 100 requêtes seront traitées avec succès chaque minute
  • si l’on souhaite que le bénéfice d’une team soit de 100$ en moyenne par minute

Gain associé au traitement d’une requête

g = ( 100 + 3 × 13,2 + 26,46100 ) / 100 = 1.6606 $

Dans les cas où la team n’est pas opérationnelle :

  • aucune requête n’est traitée et l’architecture est en place (1 LB + 3 Ec2) :

    • la team perd 66,06 $ par minute
  • aucune requête n’est traitée et aucune ressource n’est utilisée :

    • la team ne perd pas d’argent

Définition des ressources

Chaque ressource dont le cout doit être calculé doit être décrite par une classe implémentant l'interface Resource. Elle doit décrire comment calculer son coût pour une équipe à partir de la méthode Resource.computeCost.

Une fois implémentée et pour être prise en compte elle doit être mises dans le tableau RESOURCES du fichier src/scores/index.ts.