Function Compute met automatiquement à l'échelle les instances pour gérer le trafic entrant. Deux modes sont disponibles : à la demande et provisionné, chacun ayant son propre comportement et ses propres limites de mise à l'échelle. Pour les instances provisionnées, vous pouvez également configurer une mise à l'échelle planifiée et une mise à l'échelle basée sur des seuils afin d'ajuster la capacité en fonction des modèles de trafic.
Fonctionnement de la mise à l'échelle des instances
Function Compute achemine toujours les requêtes entrantes vers les instances inactives existantes en priorité. Lorsque toutes les instances sont occupées, il en crée de nouvelles. La mise à l'échelle se poursuit jusqu'à ce que la charge de requêtes soit absorbée ou que le nombre d'instances atteigne la limite régionale.
Deux contraintes régissent la vitesse de mise à l'échelle :
Nombre maximal d'instances pouvant faire l'objet d'un burst — nombre maximal de nouvelles instances pouvant être créées lors d'un seul burst
Taux de croissance maximal des instances — vitesse à laquelle les instances peuvent être ajoutées au fil du temps, mesurée en instances par minute
Ces deux limites s'appliquent de manière égale aux instances à la demande et aux instances provisionnées au sein d'une même région.
Mise à l'échelle des instances à la demande
Lorsque la vitesse de mise à l'échelle ou le nombre d'instances dépasse la limite régionale, Function Compute renvoie un code HTTP 429 pour indiquer une limitation de débit (throttling). La figure suivante illustre les trois phases lors d'une augmentation soudaine du trafic.
Phase 1 — Les instances démarrent immédiatement pour absorber la hausse de trafic. Des démarrages à froid se produisent, mais aucune limitation de débit n'est appliquée, car la limite de burst n'a pas encore été atteinte.
Phase 2 — La limite de burst est atteinte. La création de nouvelles instances est désormais contrainte par le taux de croissance. Certaines requêtes subissent une limitation de débit.
Phase 3 — Le nombre total d'instances atteint le plafond régional. La limitation de débit se poursuit pour les requêtes qui ne peuvent pas être traitées.
Mise à l'échelle des instances provisionnées
Les instances provisionnées sont pré-initialisées et maintenues en réserve avant l'arrivée de toute invocation. Cela élimine les démarrages à froid pour la capacité réservée et réduit le risque de limitation de débit lors des pics de trafic.
La figure suivante présente le même scénario de pic de trafic avec des instances provisionnées en place.
Phase 1 — Toutes les requêtes entrantes sont acheminées vers les instances provisionnées. Aucun démarrage à froid ni limitation de débit ne se produit tant que la capacité provisionnée n'est pas saturée.
Phase 2 — Les instances provisionnées sont saturées. Function Compute commence à créer des instances à la demande pour gérer le débordement. Des démarrages à froid se produisent, mais la limitation de débit est toujours évitée tant que la limite de burst n'est pas atteinte.
Limites de vitesse de mise à l'échelle par région
|
Région |
Nombre maximal d'instances pouvant faire l'objet d'un burst |
Taux de croissance maximal des instances |
|
Chine (Hangzhou), Chine (Shanghai), Chine (Pékin), Chine (Zhangjiakou) et Chine (Shenzhen) |
300 |
300 par minute |
|
Autres régions |
100 |
100 par minute |
Les limites sont partagées entre toutes les fonctions d'un même compte au sein d'une région : les instances à la demande et les instances provisionnées sont comptabilisées ensemble.
Les instances accélérées par GPU mettent plus de temps à se mettre à l'échelle que les instances CPU. Utilisez le mode provisionné pour pré-allouer des instances accélérées par GPU et éviter les retards de mise à l'échelle.
Pour demander des vitesses de mise à l'échelle plus rapides, rejoignez le groupe DingTalk (ID de groupe : 64970014484 ) pour obtenir une assistance technique.
Mise à l'échelle automatique des instances provisionnées
Au-delà d'un nombre fixe d'instances provisionnées, vous pouvez configurer des ajustements automatiques grâce à la mise à l'échelle planifiée et à la mise à l'échelle basée sur des seuils. Ces politiques permettent d'aligner la capacité sur le trafic réel et d'améliorer l'utilisation des instances.
Lorsqu'une politique d'élasticité est active, elle remplace le paramètre initial Minimum Instances que vous avez configuré pour la fonction. Pendant les périodes où aucune politique d'élasticité n'est en vigueur, le système revient au paramètre Minimum Instances initialement configuré.
Si vous configurez plusieurs politiques d'élasticité, le système calcule le paramètre Minimum Instances que chaque politique déclencherait, et utilise la valeur maximale parmi les politiques actuellement en vigueur comme paramètre Minimum Instances effectif.
Pour plus d'informations, consultez la rubrique Comment le nombre minimal actuel d'instances est-il calculé ?.
Mise à l'échelle planifiée
Utilisez la mise à l'échelle planifiée lorsque le trafic suit un modèle prévisible, par exemple des heures de pointe pendant les heures ouvrables ou des pics de trafic liés à des événements spécifiques. Lorsque les invocations simultanées dépassent la capacité planifiée, le débordement est acheminé vers des instances à la demande.
Configuration de la mise à l'échelle planifiée
La figure suivante illustre un cycle typique de montée et de descente en charge autour d'un pic de trafic.
L'extrait de code suivant configure deux politiques planifiées via l'API PutProvisionConfig pour une fonction nommée function_1. Le fuseau horaire est Asia/Shanghai (UTC+8). Du 1er au 30 août 2024, le nombre d'instances provisionnées augmente à 50 à 20 h 00 et retombe à 10 à 22 h 00 chaque jour.
"scheduledActions": [
{
"name": "scale_up_action",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"target": 50,
"scheduleExpression": "cron(0 0 20 * * *)",
"timeZone": "Asia/Shanghai"
},
{
"name": "scale_down_action",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"target": 10,
"scheduleExpression": "cron(0 0 22 * * *)",
"timeZone": "Asia/Shanghai"
}
]
Formats des expressions de planification
Deux formats sont pris en charge :
Expression At —
at(yyyy-mm-ddThh:mm:ss): s'exécute une seule fois à la date et à l'heure spécifiées. Par exemple,at(2024-04-01T20:00:00)avectimeZone: Asia/Shanghaise déclenche à 20 h 00 le 1er avril 2024 (UTC+8).Expression Cron —
cron(0 0 4 * * *): s'exécute selon un planning récurrent au format crontab standard. Par exemple,cron(0 0 20 * * *)avectimeZone: Asia/Shanghaise déclenche tous les jours à 20 h 00 (UTC+8).
Mise à l'échelle basée sur les seuils
Utilisez la mise à l'échelle basée sur les seuils lorsque le trafic est difficile à prévoir. Function Compute collecte périodiquement les métriques de concurrence ou d'utilisation des ressources des instances provisionnées et ajuste le nombre d'instances pour rester dans la plage minCapacity–maxCapacity que vous définissez.
La mise à l'échelle basée sur les seuils nécessite l'activation préalable de la collecte des métriques au niveau des instances. Sans cela, vous obtiendrez une erreur 400 InstanceMetricsRequired . Consultez Activer la collecte des métriques au niveau des instances .
La métrique ProvisionedConcurrencyUtilization suit uniquement les instances provisionnées ; la concurrence des instances à la demande est exclue.
L'utilisation de la concurrence correspond au rapport entre le nombre de requêtes concurrentes actuellement traitées par les Minimum Instances et le nombre maximal de requêtes concurrentes que les Minimum Instances peuvent prendre en charge. La valeur varie de 0 à 1.
Configurer la mise à l'échelle basée sur les seuils
La figure suivante illustre comment Function Compute effectue une montée en charge lorsque le seuil d'utilisation de la concurrence est dépassé et une descente en charge lorsque l'utilisation diminue.
L'extrait de code suivant configure une politique de mise à l'échelle basée sur les seuils via l'API PutProvisionConfig pour function_1. Le fuseau horaire est Asia/Shanghai (UTC+8) et la politique est active du 1er août 2024 au 30 août 2024. La politique suit la métrique Provisioned concurrency utilization ProvisionedConcurrencyUtilization, avec une valeur cible de 60 % pour l'Provisioned concurrency utilization. Lorsque l'utilisation dépasse 60 %, la montée en charge démarre, jusqu'à un maximum de 100 instances. Lorsque l'utilisation tombe en dessous de 60 %, la descente en charge démarre, jusqu'à un minimum de 10 instances.
"targetTrackingPolicies": [
{
"name": "action_1",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"metricType": "ProvisionedConcurrencyUtilization",
"metricTarget": 0.6,
"minCapacity": 10,
"maxCapacity": 100,
"timeZone": "Asia/Shanghai"
}
]
Calculs de mise à l'échelle
Function Compute effectue une montée en charge agressive et une descente en charge progressive. Le nombre d'instances cible est le plus petit entier supérieur ou égal au résultat calculé.
Cible de montée en charge = Instances actuelles × (Valeur actuelle de la métrique /
metricTarget)Cible de descente en charge = Instances actuelles × Coefficient de descente en charge × (1 − Valeur actuelle de la métrique /
metricTarget)
Le coefficient de descente en charge est un paramètre système compris entre 0 (exclus) et 1 qui ralentit la descente en charge pour éviter les oscillations. Il ne nécessite aucune configuration manuelle.
Exemple : Si la valeur actuelle de la métrique est de 80 %, la cible Provisioned concurrency utilization configurée est de 40 % et le nombre minimal actuel d'instances est de 100 :
Cible de montée en charge = 100 × (80 % / 40 %) = 200 instances
Function Compute augmente le nombre à 200 (plafonné à maxCapacity) pour ramener l'utilisation à la cible de 40 %.
Comment le nombre minimal actuel d'instances est-il calculé ?
L'exemple suivant montre comment le nombre minimal actuel d'instances est déterminé conjointement par le nombre minimal d'instances initialement configuré et les valeurs cibles définies dans les politiques de mise à l'échelle planifiée.
Configuration :
defaultTarget: 5-
Deux politiques planifiées, fuseau horaire
Asia/Shanghai(UTC+8), actives du 9 janvier au 11 janvier 2025Montée en charge vers 20 à 10 h 00 chaque jour
Descente en charge vers 10 à 22 h 00 chaque jour
{
"defaultTarget": 5,
"scheduledActions": [
{
"name": "scale_up_action",
"startTime": "2025-01-09T10:00:00",
"endTime": "2025-01-11T00:00:00",
"target": 20,
"scheduleExpression": "cron(0 0 10 * * *)",
"timeZone": "Asia/Shanghai"
},
{
"name": "scale_down_action",
"startTime": "2025-01-09T10:00:00",
"endTime": "2025-01-11T00:00:00",
"target": 10,
"scheduleExpression": "cron(0 0 22 * * *)",
"timeZone": "Asia/Shanghai"
}
]
}
La figure suivante montre l'évolution du nombre d'instances provisionnées au fil du temps avec cette configuration.
Concurrence maximale
La concurrence maximale correspond au nombre total de requêtes concurrentes que toutes les instances provisionnées peuvent traiter simultanément. Elle dépend du paramètre de concurrence des instances pour votre fonction.
Instances à requête unique (chaque instance traite une requête à la fois) : Concurrence maximale = Nombre d'instances
Instances à requêtes multiples (chaque instance traite plusieurs requêtes simultanément) : Concurrence maximale = Nombre d'instances × Concurrence des instances
Pour plus de détails sur la configuration de la concurrence des instances et son impact sur le comportement de mise à l'échelle, consultez Configurer la concurrence des instances.
Étapes suivantes
Pour les concepts de base et les détails de facturation concernant les instances à la demande et provisionnées, consultez Types d'instances et modes d'utilisation.
Pour limiter le nombre maximal d'instances pour une fonction, consultez Configurer les quotas de fonction. Après la configuration, si le nombre total d'instances en cours d'exécution de la fonction dépasse la limite, Function Compute renvoie une erreur de limitation.
Pour plus de détails sur le calcul du nombre minimal actuel d'instances, consultez Comment le nombre minimal actuel d'instances est-il calculé ?.