Fonctions Azure (durables) - Gestion du parallélisme
Je poste cette question pour voir si je comprends correctement le parallélisme dans Azure Functions, et en particulier les fonctions durables.
La possibilité de définir le degré maximal de parallélisme a récemment été ajoutée à Azure Functions à l'aide de az cli: https://github.com/Azure/azure-functions-host/issues/1207
az resource update --resource-type Microsoft.Web/sites -g <resource_group> -n <function_app_name>/config/web --set properties.functionAppScaleLimit=<scale_limit>
J'ai appliqué cela à mon application de fonction, mais je ne suis pas sûr de savoir comment cela joue avec les paramètres MaxConcurrentOrchestratorFunctions et MaxConcurrentActivityFunctions pour les fonctions durables.
Les éléments ci-dessous conduiraient-ils à un maximum global de 250 fonctions d'activités simultanées?
- functionAppScaleLimit: 5
- MaxConcurrentOrchestratorFonctions: 5
- Fonctions MaxConcurrentActivity: 10
Réponses
En vous référant au lien que vous avez partagé pour limiter la mise à l'échelle, cette fonctionAppScaleLimit vous aidera à spécifier le nombre maximal d'instances pour votre fonction. Arrive maintenant à MaxConcurrentOrchestratorFunctions : définit le nombre maximal de fonctions d'orchestrateur pouvant être traitées simultanément sur une seule instance d'hôte et MaxConcurrentActivityFunctions le nombre maximal de fonctions d'activité pouvant être traitées simultanément sur une seule instance d'hôte. Référez-vous à ceci
Maintenant, j'explique ce que fait MaxConcurrentOrchestratorFunctions, ce qui vous aiderait à comprendre comment cela fonctionne:
MaxConcurrentOrchestratorFunctions contrôle le nombre de fonctions d'orchestrateur pouvant être chargées en mémoire à un moment donné. Si vous définissez la concurrence sur 1, puis démarrez 10 fonctions d'orchestrateur, une seule sera chargée en mémoire à la fois. N'oubliez pas que si une fonction d'orchestrateur appelle une fonction d'activité, la fonction d'orchestrateur se décharge de la mémoire pendant qu'elle attend une réponse. Pendant ce temps, une autre fonction d'orchestrateur peut démarrer. L'effet est que vous aurez jusqu'à 10 fonctions d'orchestrateur exécutées de manière entrelacée, mais seulement 1 devrait réellement exécuter du code à la fois.
La motivation de cette fonctionnalité est de limiter le processeur et la mémoire utilisés par le code d'orchestrateur. Cela ne sera pas utile pour implémenter tout type de modèle de singleton. Si vous souhaitez limiter le nombre d'orchestrations actives, vous devrez l'implémenter.