Azure (Durable) Functions – Parallelität verwalten
Ich poste diese Frage, um zu sehen, ob ich die Parallelität in Azure Functions richtig verstehe, insbesondere in Durable Functions.
Die Möglichkeit, den maximalen Grad an Parallelität festzulegen, wurde kürzlich mithilfe von az cli zu Azure Functions hinzugefügt: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>
Ich habe dies auf meine Funktions-App angewendet, aber ich bin mir nicht sicher, wie dies mit den MaxConcurrentOrchestratorFunctions- und MaxConcurrentActivityFunctions-Einstellungen für Durable Functions funktioniert.
Würde das Folgende zu einem globalen Maximum von 250 gleichzeitigen Aktivitätsfunktionen führen?
- functionAppScaleLimit: 5
- MaxConcurrentOrchestratorFunctions: 5
- MaxConcurrentActivityFunctions: 10
Antworten
Unter Bezugnahme auf den Link, den Sie zur Begrenzung der Skalierung freigegeben haben, hilft Ihnen diese Funktion AppScaleLimit, die maximale Anzahl von Instanzen für Ihre Funktion anzugeben. Kommen wir nun zu MaxConcurrentOrchestratorFunctions : Legt die maximale Anzahl von Orchestratorfunktionen fest, die gleichzeitig auf einer einzelnen Hostinstanz verarbeitet werden können, und MaxConcurrentActivityFunctions die maximale Anzahl von Aktivitätsfunktionen, die gleichzeitig auf einer einzelnen Hostinstanz verarbeitet werden können. Beziehen Sie sich darauf
Jetzt erkläre ich, was MaxConcurrentOrchestratorFunctions tut, was Ihnen helfen würde, zu verstehen, wie es funktioniert:
MaxConcurrentOrchestratorFunctions steuert, wie viele Orchestratorfunktionen zu einem bestimmten Zeitpunkt in den Arbeitsspeicher geladen werden können. Wenn Sie Parallelität auf 1 festlegen und dann 10 Orchestratorfunktionen starten, wird jeweils nur eine in den Arbeitsspeicher geladen. Denken Sie daran, dass, wenn eine Orchestratorfunktion eine Aktivitätsfunktion aufruft, die Orchestratorfunktion aus dem Arbeitsspeicher entladen wird, während sie auf eine Antwort wartet. Während dieser Zeit kann eine andere Orchestratorfunktion gestartet werden. Der Effekt besteht darin, dass Sie bis zu 10 Orchestratorfunktionen haben, die verschachtelt ausgeführt werden, aber nur 1 sollte tatsächlich Code gleichzeitig ausführen.
Die Motivation für diese Funktion besteht darin, die vom Orchestratorcode verwendete CPU und den Arbeitsspeicher zu begrenzen. Es wird nicht nützlich sein, um irgendeine Art von Singleton-Muster zu implementieren. Wenn Sie die Anzahl der aktiven Orchestrierungen begrenzen möchten, müssen Sie dies implementieren.