Skip to content

Commit 2890dfa

Browse files
author
ecfan
committed
Add info about high throughput
1 parent 391353a commit 2890dfa

File tree

1 file changed

+102
-4
lines changed

1 file changed

+102
-4
lines changed

articles/logic-apps/logic-apps-limits-and-config.md

Lines changed: 102 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,19 +190,117 @@ The following table lists the values for a single workflow definition:
190190

191191
<a name="run-high-throughput-mode"></a>
192192

193-
### Run in high throughput mode
193+
## Scale for high throughput
194194

195-
For a single workflow definition, the number of actions that run every 5 minutes has a [default limit](../logic-apps/logic-apps-limits-and-config.md#throughput-limits). To raise the default value to the [maximum value](../logic-apps/logic-apps-limits-and-config.md#throughput-limits) for your workflow, which is three times the default value, you can enable high throughput mode, which is in preview. Or, you can [distribute the workload across more than one workflow](../logic-apps/handle-throttling-problems-429-errors.md#logic-app-throttling) as necessary.
195+
### [Standard](#tab/standard)
196196

197-
#### [Portal (multitenant service)](#tab/azure-portal)
197+
Single-tenant Azure Logic Apps uses storage and compute as the primary resources to run your Standard logic app workflows.
198+
199+
### Storage
200+
201+
Stateful workflows use Azure Table storage and Azure Blob storage for persistenting data storage during runtime and for maintaining run histories. These workflows also use Azure Queues for scheduling. A single storage account enables a substantial number of requests with rates of up to 2K per partition and 20K requests per second at the account level. Beyond these thresholds, request rates are subject to throttling. For storage scalability limits, see [Targets for data operations](../storage/tables/storage-performance-checklist.md#targets-for-data-operations).
202+
203+
Although a single storage account can handle reasonably high throughput, as the workflow execution rate increases, you might encounter partition level throttling or account level throttling. To ensure smooth operations, make sure that you understand the possible limitations and ways that you can address them.
204+
205+
##### Share workload across multiple workflows
206+
207+
Single-tenant Azure Logic Apps minimizes partition level throttling by distributing storage transactions across multiple partitions. However, to improve distribution and mitigate partition level throttling, [distribute the workload across multiple workflows](handle-throttling-problems-429-errors.md#logic-app-throttling), rather than a single workflow.
208+
209+
##### Share workload across multiple storage accounts
210+
211+
If your logic app's workflows require high throughput, use multiple storage accounts, rather than a single account. You can significantly increase throughput by distributing your logic app's workload across multiple storage accounts with 32 as the limit. To determine the number of storage accounts that you need, use the general guideline for ~100,000 action executions per minute, per storage account. While this estimate works well for most scenarios, the number of actions might be lower if your workflow actions are compute heavy, for example, a query action that processes large data arrays. Make sure that you perform load testing and tune your solution before using in production.
212+
213+
To enable using multiple storage accounts, follow these steps before you create your Standard logic app. Otherwise, if you change the settings after creation, you might experience data loss or not achieve the necessary scalability.
214+
215+
1. [Create the storage accounts](../storage/common/storage-account-create.md?tabs=azure-portal) that you want to use. Save the connection string for each storage account.
216+
217+
1. Find and open your Standard logic app, and then [edit your logic app's host settings (**host.json** file)](edit-app-settings-host-settings.md?tabs=azure-portal#manage-host-settings---hostjson) to include the following **`extensions`** object, which contains the **`workflow`** and **`settings`** objects with the **Runtime.ScaleUnitsCount** setting:
218+
219+
```json
220+
"extensions": {
221+
"workflow": {
222+
"settings": {
223+
"Runtime.ScaleUnitsCount": "<storage-accounts-number>"
224+
}
225+
}
226+
}
227+
```
228+
229+
The following example specifies **3** as the number of storage accounts:
230+
231+
```json
232+
{
233+
"version": "2.0",
234+
"extensionBundle": {
235+
"id": "Microsoft.Azure.Functions.ExtensionBundle.Workflows",
236+
"version": "[1.*, 2.0.0)"
237+
},
238+
"extensions": {
239+
"workflow": {
240+
"settings": {
241+
"Runtime.ScaleUnitsCount": "3"
242+
}
243+
}
244+
}
245+
}
246+
```
247+
248+
1. [Edit your logic app's application configuration settings (**local.settings.json**)](edit-app-settings-host-settings.md?tabs=azure-portal#manage-app-settings---localsettingsjson) to add an app setting named **CloudStorageAccount.Workflows.ScaleUnitsDataStorage.CU0\<*storage-account-number*>\.ConnectionString** and the corresponding storage account connection string using the following syntax where the first storage account number is **`00`** up to the number of storage accounts minus 1, for example:
249+
250+
| App setting name | Value |
251+
|------------------|-------|
252+
| **CloudStorageAccount.Workflows.ScaleUnitsDataStorage.CU00.ConnectionString** | `<connection-string-1>` |
253+
| **CloudStorageAccount.Workflows.ScaleUnitsDataStorage.CU01.ConnectionString** | `<connection-string-2>` |
254+
| **CloudStorageAccount.Workflows.ScaleUnitsDataStorage.CU02.ConnectionString** | `<connection-string-3>` |
255+
256+
1. In your logic app's application configuration settings, update the **AzureWebJobsStorage** setting value with the same connection string that's in the **CloudStorageAccount.Workflows.ScaleUnitsDataStorage.CU00.ConnectionString** setting.
257+
258+
#### Compute
259+
260+
A Standard logic app runs by using one of the [available compute plans](logic-apps-pricing.md#standard-pricing-tiers), which provide different levels of virtual CPU and memory, or by using an App Service Environment v3, which provides more compute options.
261+
262+
Single-tenant Azure Logic Apps dynamically scales to effectively handle increasing loads. Your logic app uses the following primary factors to determine whether to scale.
263+
264+
> [!NOTE]
265+
>
266+
> For a Standard logic app in an App Service Environment v3, dynamic scaling isn't available.
267+
> You must set scaling rules on the associated App Service Plan. As a commonly used scaling rule,
268+
> you can use the CPU metric, and scale your App Service Plan to keep the virtual CPU between 50-70%.
269+
> For more information, see [Get started with autoscale in Azure](../azure-monitor/autoscale/autoscale-get-started.md).
270+
271+
- Trigger
272+
273+
To determine scaling requirements, the scaler analyzes the trigger that starts each workflow in your logic app. For example, for a workflow with a Service Bus trigger, if the queue length continuously grows, the scaler takes action to add worker instances, which enables processing more messages. Likewise, for a workflow with a Request trigger, if the request latency experiences an upward trend, the scaler increases the number of worker instances to distribute the request load more efficiently. For more information about worker instances, see [Azure Logic Apps (Standard) - Runtime Deep Dive](https://techcommunity.microsoft.com/t5/azure-integration-services-blog/azure-logic-apps-running-anywhere-runtime-deep-dive/ba-p/1835564).
274+
275+
- Workflow job execution delay
276+
277+
At runtime, workflow actions are divided into individual jobs that are queued for execution. Job dispatchers regularly poll the job queue to retrieve and execute these jobs. However, if compute capacity is insufficient to pick up these jobs, they stay in the queue for a longer time, resulting in increased execution delays. The scaler monitors this situation and make scaling decisions to keep the execution delays under control. For more information about how the runtime schedules and runs jobs, see [Azure Logic Apps (Standard) - Runtime Deep Dive](https://techcommunity.microsoft.com/t5/azure-integration-services-blog/azure-logic-apps-running-anywhere-runtime-deep-dive/ba-p/1835564).
278+
279+
The scaler also considers the minimum and maximum worker instance counter configuration to determine whether to make scaling decisions, such as adding, removing, or maintaining the current number of worker instances. Typically, the scaler makes these decisions at intervals of approximately 15-30 seconds. So, consider this ramp-up time and its impact on your logic app's scaling speed to effectively handle peak loads. For example, if your workload requires scaling your logic app from just 1 worker instance to 100 worker instances, the ramp-up alone might take 25-50 minutes. Single-tenant Azure Logic Apps scaling shares the same [Azure Functions scaling infrastructure](../azure-functions/event-driven-scaling.md).
280+
281+
##### Configure your logic app compute for faster scaling
282+
283+
- Share workload across multiple logic apps.
284+
285+
Each logic app can scale independently, so distributing your workload across more than one logic app can significantly accelerate the scaling speed. For example, two logic apps can scale to twice the number of worker instances in the same timeframe as a single logic app. By splitting your workload across multiple apps, you can effectively multiply the scalability and achieve faster scaling results.
286+
287+
- Use prewarmed instances.
288+
289+
If your scenario requires quicker ramp-up time, consider using prewarmed instances. If your peak load times are deterministic, you can use an automation task to adjust these prewarm instances on a schedule. For more information, see [Manage Azure resources and monitor costs by creating automation tasks (preview)](create-automation-tasks-azure-resources.md).
290+
291+
### [Consumption](#tab/consumption)
292+
293+
Multitenant Azure Logic Apps has a [default limit](#throughput-limits) on the number of actions that run every 5 minutes. To raise the default value to the [maximum value](#throughput-limits), you can enable high throughput mode, which is in preview. Or, [distribute the workload across multiple logic apps and workflows](handle-throttling-problems-429-errors.md#logic-app-throttling), rather than rely on a single logic app and workflow.
294+
295+
#### Enable high throughput in the portal
198296

199297
1. In the Azure portal, on your logic app's menu, under **Settings**, select **Workflow settings**.
200298

201299
1. Under **Runtime options** > **High throughput**, change the setting to **On**.
202300

203301
![Screenshot that shows logic app menu in Azure portal with "Workflow settings" and "High throughput" set to "On".](./media/logic-apps-limits-and-config/run-high-throughput-mode.png)
204302

205-
#### [Resource Manager Template](#tab/azure-resource-manager)
303+
#### Enable high throughput in a Resource Manager template
206304

207305
To enable this setting in an ARM template for deploying your logic app, in the `properties` object for your logic app's resource definition, add the `runtimeConfiguration` object with the `operationOptions` property set to `OptimizedForHighThroughput`:
208306

0 commit comments

Comments
 (0)