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 :
Symbole | Valeur |
---|---|
n | Nombre de requêtes traitées en moyenne par minute |
g | Gain obtenu pour le traitement d’une requête |
Cec2 | Coût d’une Ec2 pour une minute d’utilisation |
Clb | Coût d’une LoadBalancer pour une minute d’utilisation |
B | Bé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
.