Mesure de l'efficacité des performances : Guide d'optimisation du coût par transaction
Maîtrisez l'optimisation du coût par transaction (CPT) dans AWS pour aligner les dépenses d'infrastructure sur les résultats commerciaux. Ce guide détaille comment calculer le CPT, mettre en œuvre des stratégies essentielles d'optimisation des performances telles que l'auto-scaling et le dimensionnement adapté, et naviguer dans les compromis financiers cruciaux entre les instances réservées et les plans d'épargne pour une efficacité maximale à long terme dans le cloud.
Mesure de l'efficacité des performances : Guide d'optimisation du coût par transaction
Le coût par transaction est une métrique cloud utile car elle relie le travail d'ingénierie à quelque chose que l'entreprise peut comprendre. Au lieu de dire « la facture RDS a augmenté » ou « le CPU est plus bas maintenant », vous pouvez dire « servir un paiement réussi coûte environ un demi-cent ce mois-ci, et c'était plus élevé le mois dernier ». Cela ne rend pas le nombre parfait, mais cela entame une meilleure conversation.
Dans AWS, le coût par transaction n'est généralement pas une métrique unique que vous obtenez gratuitement. Vous le construisez à partir des données de facturation et des données d'application. La partie difficile n'est pas la division. La partie difficile est de décider ce qui appartient au numérateur, ce qui compte comme une transaction, et comment éviter d'optimiser le nombre d'une manière qui nuit aux utilisateurs.
Définissez la transaction avant de calculer quoi que ce soit
Une transaction doit être un événement commercial ou un résultat de service, pas seulement un nombre aléatoire de requêtes. Pour un système de commerce électronique, une transaction pourrait être une commande terminée. Pour une API de paiement, ce pourrait être une tentative de paiement autorisée. Pour un pipeline de données, ce pourrait être un fichier traité ou un million d'enregistrements traités. Pour une API interne, ce pourrait être une requête réussie servie dans l'objectif de latence.
Choisissez une définition que les gens peuvent défendre. Si vous comptez chaque vérification de santé et requête échouée, le dénominateur est gonflé et la métrique semble meilleure que la réalité. Si vous ne comptez que les succès de bout en bout parfaits, la métrique peut être plus honnête mais plus difficile à comparer avec le débit au niveau de l'infrastructure.
Une formule pratique est :
coût par transaction = coût de service alloué / transactions commerciales réussies
Par exemple :
coût mensuel alloué = 1 500 $
transactions réussies = 300 000
coût par commande = 1 500 $ / 300 000 = 0,005 $
Cet exemple utilise des nombres ronds. Dans les systèmes réels, l'allocation des coûts est désordonnée. Les équilibreurs de charge partagés, les passerelles NAT, les plateformes d'observabilité, les plans de support, les exécuteurs CI et le transfert de données peuvent tous prendre en charge plus d'un service. Décidez si la métrique est destinée à un suivi approximatif des tendances ou à une imputation précise. Ce sont des tâches différentes.
Construisez le numérateur avec soin
Commencez par les services AWS directement impliqués dans le service de la transaction : EC2, ECS, nœuds de travail EKS, Lambda, RDS, DynamoDB, ElastiCache, SQS, SNS, Kinesis, S3, CloudFront, API Gateway, Elastic Load Balancing, NAT Gateway et transfert de données. Ensuite, décidez comment gérer les coûts partagés.
AWS Cost Explorer, les rapports de coûts et d'utilisation, les balises d'allocation des coûts et la structure des comptes sont les outils habituels. Les balises sont particulièrement importantes. Si les ressources de calcul ne sont pas balisées par service, environnement ou équipe, le coût par transaction devient une conjecture.
Pour un flux de paiement Web, le coût mensuel alloué pourrait inclure :
| Élément de coût | Approche d'allocation |
|---|---|
| Service ECS ou groupe Auto Scaling EC2 | Balise de service directe |
| Cluster RDS | Réparti par propriété d'application ou charge de travail de requête |
| ElastiCache | Direct si dédié, proportionnel si partagé |
| Équilibreur de charge | Réparti par nombre de requêtes ou propriété de service |
| Passerelle NAT | Souvent partagée ; allouer par trafic lorsque possible |
| Journaux et métriques CloudWatch | Balises de groupe de journaux directes ou estimées par volume |
Ne cachez pas une infrastructure partagée coûteuse simplement parce que l'allocation est gênante. Le traitement des données de la passerelle NAT, le trafic entre zones de disponibilité et les journaux verbeux peuvent modifier considérablement l'image des coûts pour les services bavards.
Construisez le dénominateur à partir de la vérité de l'application
Le dénominateur doit provenir du système d'enregistrement de l'événement commercial, pas seulement des compteurs d'infrastructure. Un nombre de requêtes d'un équilibreur de charge d'application peut vous indiquer le volume de trafic, mais il ne peut pas vous dire si une commande a été créée avec succès. Les métriques CloudWatch sont utiles, mais les métriques d'application ou les événements de base de données fournissent souvent un nombre de transactions plus propre.
Pour les services API, vous pouvez émettre une métrique personnalisée telle que SuccessfulPaymentAuthorization ou CompletedReportGeneration. Pour les pipelines, comptez les enregistrements validés avec succès vers la destination, pas seulement lus depuis la source. Pour les travaux asynchrones, décidez si une nouvelle tentative compte comme une autre transaction. Généralement, cela ne devrait pas être le cas ; les nouvelles tentatives font partie du coût d'achèvement d'une unité de travail logique.
Utilisez le coût par transaction avec la latence et le taux d'erreur
Un coût par transaction plus bas n'est pas automatiquement meilleur. Vous pouvez rendre le nombre excellent en sous-provisionnant jusqu'à ce que les utilisateurs attendent plus longtemps, que les requêtes expirent ou que les nouvelles tentatives déplacent le coût ailleurs. Le CPT doit être lu en parallèle avec la latence, le taux d'erreur, la saturation et la profondeur de la file d'attente.
Une revue saine pourrait dire :
Le coût par rapport réussi a baissé de 18 % après le dimensionnement adapté des travailleurs.
La latence P95 est restée sous l'objectif.
Le taux d'erreur n'a pas augmenté.
L'âge de la file d'attente est resté sous cinq minutes pendant les pics de charge.
Si le coût baisse et que la latence double, vous n'avez pas optimisé le service. Vous avez déplacé la douleur de la facture vers l'utilisateur.
D'où vient généralement l'optimisation
Le dimensionnement adapté est la première étape. Recherchez les instances, les tâches et les bases de données qui fonctionnent à faible utilisation pendant de longues périodes. AWS Compute Optimizer peut aider avec EC2, EBS, Lambda et certaines charges de travail conteneurisées, mais traitez les recommandations comme des points de départ. Le contexte de l'application compte toujours. Une base de données avec un CPU moyen faible peut encore avoir besoin de mémoire pour le cache ou de marge d'E/S pendant les fenêtres de traitement par lots.
L'auto-scaling est la deuxième étape. Les politiques de mise à l'échelle doivent correspondre au goulot d'étranglement. Le suivi de la cible CPU est acceptable pour les services liés au CPU. La profondeur ou l'âge de la file d'attente est souvent meilleur pour les travailleurs. Le nombre de requêtes par cible peut être meilleur pour les flottes Web. Pour Lambda, examinez la durée, la configuration mémoire, la concurrence, la limitation en aval et la sensibilité aux démarrages à froid.
Les engagements d'achat peuvent aider une fois que l'utilisation est stable. Les plans d'épargne et les instances réservées peuvent réduire le coût de calcul effectif, mais ils ne corrigent pas le gaspillage. Engagez-vous après avoir compris la base de référence. Sinon, vous pourriez verrouiller les dépenses pour des ressources que vous auriez dû supprimer.
Le stockage et le transfert de données sont des angles morts courants. Compressez les charges utiles volumineuses lorsque cela a du sens. Évitez le trafic inutile entre zones de disponibilité ou régions. Définissez la rétention des journaux délibérément. Déplacez les anciens objets vers des classes de stockage S3 moins chères uniquement après avoir vérifié les modèles d'accès et les coûts de récupération.
Un processus de révision concret
Choisissez un service et une transaction. Extrayez le dernier mois complet de coût AWS alloué. Extrayez le même mois du nombre de transactions réussies. Calculez la base de référence. Ensuite, décomposez le coût par service.
La première révision révèle souvent quelque chose d'évident : une base de données surdimensionnée, des instances inactives, un trafic NAT coûteux, des journaux de débogage excessifs ou un cache qui coûte plus cher que la charge de base de données qu'il économise. Corrigez une chose à la fois et annotez la métrique pour que le prochain lecteur sache ce qui a changé.
Un simple tableau mensuel suffit pour commencer :
| Mois | Coût alloué | Transactions | CPT | Notes |
|---|---|---|---|---|
| Jan | 1 500 $ | 300 000 | 0,0050 $ | Base de référence |
| Fév | 1 350 $ | 310 000 | 0,0044 $ | Réduction des travailleurs inactifs |
| Mar | 1 420 $ | 420 000 | 0,0034 $ | Trafic plus élevé, même taille de base de données |
La tendance compte plus que la fausse précision. Si les règles d'allocation changent, marquez le changement. Une baisse du CPT causée par l'exclusion du coût de la base de données partagée n'est pas une victoire d'ingénierie.
Erreurs courantes
L'erreur la plus courante est de mélanger les environnements. Les transactions de production doivent être associées aux coûts de production. Le développement et les tests peuvent avoir leurs propres métriques d'efficacité, mais ils ne doivent pas diluer le nombre de production.
Une autre erreur est de compter les tentatives échouées comme des transactions réussies. Le travail échoué coûte toujours de l'argent, et il doit apparaître comme un gaspillage. Gardez une métrique distincte pour le coût par requête si vous en avez besoin.
Une troisième erreur est d'optimiser un composant localement. Une équipe peut réduire le coût EC2 en utilisant moins de travailleurs, seulement pour augmenter le délai de file d'attente et la contention de verrouillage de base de données. Le coût par transaction est utile car il décourage les gains étroits qui aggravent l'ensemble du flux.
L'objectif utile
L'objectif n'est pas le CPT le plus bas possible. L'objectif est le CPT durable le plus bas tout en répondant aux objectifs de fiabilité et de performance. Cela signifie que le nombre doit être examiné avec les SLO, l'historique des incidents et les plans de capacité.
Une fois la métrique stable, elle devient un bon moyen d'évaluer les changements. Un nouveau cache a-t-il réduit le coût de la base de données suffisamment pour se justifier ? Une famille d'instances plus grande a-t-elle amélioré le débit par dollar ? Une réécriture a-t-elle réduit le temps de calcul mais augmenté le transfert de données ? Le coût par transaction ne répondra pas à toutes les questions, mais il donne aux équipes un point de départ concret et partagé.
Traitez les nouvelles tentatives comme un signal de coût
Les nouvelles tentatives se cachent souvent dans les métriques agrégées. Un utilisateur soumet un rapport, mais le système fait trois tentatives parce qu'un appel en aval expire deux fois. Si vous comptez les requêtes d'infrastructure, le dénominateur peut sembler élevé. Si vous comptez les rapports réussis, les tentatives supplémentaires apparaissent comme un coût plus élevé par transaction terminée, ce qui est généralement le signal le plus utile.
Suivez le taux de nouvelles tentatives en parallèle du CPT. Un CPT en hausse avec un trafic stable peut indiquer des tempêtes de nouvelles tentatives, des pannes partielles, une contention de verrouillage ou des chemins de code inefficaces. Dans les systèmes distribués, le gaspillage n'est souvent pas une requête coûteuse. C'est une requête bon marché répétée des milliers de fois parce que personne n'a appliqué de backoff ou arrêté de réessayer après une erreur permanente.
Séparez les coûts fixes et variables
Une partie des coûts d'infrastructure est fixe pour une architecture donnée. Un cluster de base de données minimum, une observabilité de base, un équilibreur de charge et un petit pool de travailleurs toujours actifs peuvent coûter à peu près la même chose que vous serviez dix mille transactions ou cent mille. D'autres coûts évoluent avec le trafic : durée Lambda, transfert de données, requêtes de file d'attente, volume de journaux et capacité de calcul supplémentaire.
Décomposer le CPT en parties fixes et variables rend le nombre plus facile à interpréter :
coût de service fixe mensuel = 900 $
coût de service variable mensuel = 600 $
transactions = 300 000
CPT mixte = 0,0050 $
CPT variable = 0,0020 $
Si le trafic double et que le coût fixe reste stable, le CPT mixte devrait s'améliorer. Si le CPT variable augmente en même temps, vous avez peut-être une inefficacité de mise à l'échelle. Peut-être que le taux de succès du cache chute sous charge. Peut-être qu'un plan de requête de base de données change. Peut-être que des charges utiles plus volumineuses augmentent les coûts de transfert et de journalisation.
Utilisez l'économie unitaire pour les choix d'architecture
Le CPT est utile pour comparer deux conceptions qui répondent toutes deux aux exigences. Supposons qu'une API puisse fonctionner sur Lambda ou ECS. Lambda peut être moins cher à faible volume et plus simple sur le plan opérationnel. ECS peut devenir moins cher une fois que le trafic est stable et élevé. Une facture mensuelle seule ne raconte pas cette histoire ; le coût par requête réussie le fait.
La même chose s'applique à la mise en cache. Un cache qui coûte 400 $ par mois et réduit le coût de la base de données de 100 $ n'est probablement pas une optimisation des coûts, bien qu'il puisse s'agir d'une optimisation de la latence. Un cache qui coûte 400 $ et permet de réduire le niveau de base de données de 1 200 $ est plus facile à justifier. Liez la décision à la latence, à la fiabilité et au CPT plutôt que de traiter tout nouveau composant comme automatiquement efficace.
Surveillez le déplacement des coûts
Les équipes réduisent parfois une facture en poussant les coûts vers un autre poste de dépense. Déplacer le travail d'EC2 vers Lambda peut réduire le calcul inactif, mais peut augmenter les frais de durée, les journaux ou la pression sur la base de données en aval. La compression des réponses peut réduire le transfert de données mais ajouter du CPU. Une mise à l'échelle automatique plus agressive peut réduire les heures de calcul mais augmenter les démarrages à froid ou la latence de la file d'attente.
Les bonnes révisions du CPT demandent où est allé le coût. Si le coût total alloué baisse et que la qualité du service reste stable, c'est une vraie victoire. Si un compte semble moins cher parce que les coûts de plateforme partagés ont absorbé la différence, la métrique ment.
Rendez le tableau de bord ennuyeux
Un tableau de bord CPT utile n'a pas besoin d'être sophistiqué. Il a besoin de la même définition chaque mois :
coût AWS alloué
transactions réussies
coût par transaction
latence p95 ou p99
taux d'erreur
taux de nouvelles tentatives
notes pour les versions majeures ou les incidents
Ajoutez des annotations pour les déploiements, les pics de trafic, les changements d'engagement de prix et les changements de règles d'allocation. Sans annotations, les gens inventeront des histoires pour expliquer le graphique. Une simple note comme « déplacement du traitement d'image vers des travailleurs asynchrones le 12 mars » fait gagner du temps plus tard.
Utilisez la métrique dans les révisions, pas comme une arme
Le coût par transaction peut créer un mauvais comportement s'il devient un objectif brutal. Les équipes peuvent éviter la redondance nécessaire, réduire trop les journaux ou sous-provisionner les chemins critiques pour améliorer le nombre. Utilisez-le comme une métrique de révision d'ingénierie, pas comme un score autonome.
Les meilleures conversations semblent pratiques : « Notre CPT a augmenté parce que le trafic s'est déplacé vers un point de terminaison plus lourd », « La base de données est maintenant la plus grande partie du coût », « Les nouvelles tentatives ont doublé après la dernière version », ou « Les plans d'épargne ont réduit le coût de calcul, mais le stockage est maintenant la plus grande opportunité ». C'est là que la métrique gagne sa place.