【Azure Logic App】添加 Storage Account 来提升 Logic App 的性能

简介: 【Azure Logic App】添加 Storage Account 来提升 Logic App 的性能

文章原文:https://techcommunity.microsoft.com/t5/azure-integration-services-blog/scaling-logic-app-standard-for-high-throughput-scenarios/ba-p/3866731

Scaling Logic App Standard for High Throughput Scenarios

Logic Apps 提供了一个强大的平台,可以无缝集成各种服务,包括数据库、消息系统和 PaaS 和 SaaS 产品。此外,它支持各种连接协议,使您能够创建全面的集成解决方案。通过使用其直观的工作流设计器和广泛的连接器,Logic Apps 赋予开发人员高效构建复杂解决方案的能力。此外,它的用户友好的管理和监控能力确保了应用程序生命周期的顺利管理。

一个常见的问题是,Logic Apps 是否能有效地扩展以应对高吞吐量要求的苛刻场景。为了提供一些背景,这里有几个高吞吐量场景的例子:

  • 每天,我们在特定时间收到惊人的 100 万张发票。我们的目标是在几个小时内处理所有这些订单。
  • 是否可以利用一个 Logic App,在这段时间内动态扩展,使我们能够实现所需的高吞吐量?
  • 随后,当不再需要进一步处理时,它应该缩小规模,使我们能够在保持所需吞吐量的同时优化成本。
  • 我们的系统不断从事件中心接收事件流,这些事件在一天中的特定时间或随机地出现峰值负载,有时超过每分钟 10K 事件的速率。

事实上,上述问题的答案是肯定的。通过一些容量规划和对 Logic Apps 内部扩展功能的深入理解,实现更高吞吐量的场景变得像构建一个复杂的业务流程的工作流一样简单。

 

在这篇博客中,我们将深入探讨 Logic Apps 标准的扩展特性,并为设计可扩展的高吞吐量场景的 Logic Apps 提供宝贵的见解。

 

底层 Logic App 资源的可扩展性

Logic App 在运行工作流时使用两种主要资源 - 存储和计算。

 

存储

Logic Apps 中的有状态工作流利用存储(表和 blob)在运行时进行持久性数据存储并维护运行历史。此外,队列用于调度目的。单个存储帐户支持大量请求,每个分区最多可达 2K,帐户级别每秒可达 20K 请求(RPS)。超出这些阈值,请求速率将受到限制。有关存储可扩展性限制的更多信息,请参阅此处(https://learn.microsoft.com/en-us/azure/storage/tables/storage-performance-checklist#targets-for-data-operations)。

随着工作流执行速率的增加,需要注意的是,虽然单个存储帐户可以处理相当高的吞吐量,但有可能遇到分区级别限制或帐户级别限制。因此,理解潜在的限制和解决它们的方法变得至关重要,以确保顺畅的运营。

 

将您的 Logic App 扩展到存储限制

将负载分片到多个工作流

Logic Apps 引擎专门设计用于通过在多个分区之间分配存储事务来最小化分区级别的限制。但是,为了获得更好的分布并减轻分区级别的限制,建议将工作负载分布在两个或多个工作流中,而不是依赖单个工作流

将负载分片到多个存储帐户

为了显著提高吞吐量,可以设置 Logic App 以将其负载分布在多个存储帐户中,最多可达 32 个存储帐户。如果您的应用程序需要高吞吐量,建议使用多个存储帐户而不是依赖一个。一个普遍的指导方针是,每个存储帐户每分钟大约执行 100K 操作,以确定是否需要额外的存储帐户。请注意,虽然这个限制对于大多数情况来说都是一个好的数字,但如果您的工作流操作是计算密集型的(例如处理大量数据的查询操作),那么限制可能低于这个数字,因此在将您的解决方案投入生产之前,进行负载测试并调整您的解决方案总是一个好主意。

请参阅下面的附录,了解如何配置多个存储帐户的说明。

 

计算

在运行 Logic Apps Standard 时,有三种主要的计算选项需要考虑:WS1、WS3 和 WS3。这些选项提供不同数量的内存和核心计数。此外,如果您决定在 ASEv3(应用程序服务环境版本 3)中运行您的 Logic App,则会有更多的计算选项可供选择。

Logic Apps 的计算基础设施旨在动态扩展,以有效地处理不断增加的负载。动态扩展的决定是根据考虑两个主要因素来确定的。

Trigger 触发器

扩展器分析特定应用程序的工作流中使用的每个触发器,以确定扩展需求。例如,如果存在服务总线触发器并且队列长度持续增长,则扩展器将采取行动添加额外的实例,使其能够处理更多的消息。同样,当工作流中使用请求触发器并且请求延迟呈上升趋势时,将增加实例数量以更有效地分配请求负载。

工作流作业执行延迟

在运行时,工作流操作被分成单独的作业并排队等待执行。调度程序定期轮询作业队列以检索并执行这些作业(有关运行时如何调度和运行作业的更多详细信息,请参阅此文章)。但是,如果没有足够的计算能力来获取这些作业,它们将在队列中停留更长时间,导致执行延迟增加。扩展器将监控并做出扩展决策以控制执行延迟。

 

除了上述因素,扩展器还考虑最小和最大实例计数器配置以确定是否应该做出扩展决策,例如添加、删除或维持当前实例数量。通常,扩展器每隔大约 15-30 秒做出这些决定。重要的是要考虑上升时间及其对您的 Logic App 扩展速度的影响,以有效地处理峰值负载。例如,如果您的工作负载需要将您的 Logic App 从仅 1 个实例扩展到 100 个实例,仅上升就可能需要大约 25-50 分钟。Logic Apps 扩展与 Azure 函数共享相同的扩展基础设施,您可以在本文中了解更多关于 Azure 函数如何扩展的信息

 

为了更快地扩展,可以为每个 Logic App 单独配置计算。

每个 Logic App 都可以独立扩展,将负载分布在多个应用程序中可以显著加快扩展速度。例如,与单个应用程序相比,两个应用程序可以在相同的时间范围内扩展到两倍的实例数量。通过将负载分成多个应用程序,您可以有效地增加可扩展性并实现更快的扩展结果。 使用预热实例。如果您的场景需要更快的上升时间,您可能希望考虑使用预热实例。如果您的峰值负载时间是确定的,那么您可以使用自动化任务(详见此处)按计划调整这些预热实例。

请注意,如果您将 Logic App 放置在应用程序服务环境(ASEv3)内,则不可用动态扩展功能。您需要在关联的应用程序服务计划(ASP)上设置扩展规则。常用的扩展规则是使用 CPU 指标并扩展您的 ASP 以保持 VM CPU 在 50-70% 之间。详见此处(https://learn.microsoft.com/en-us/azure/azure-monitor/autoscale/autoscale-get-started)。

 

附录 - 使用多个存储帐户配置您的 Logic Apps。

以下步骤可用于使用多个存储帐户配置您的 Logic Apps,以实现更高的可扩展性。

请注意,您需要在创建新的 Logic Apps 之前执行这些配置步骤,并且在创建工作流之后更改这些设置可能会导致数据丢失或无法达到所需的可扩展性水平。

步骤 1:更新 host.json 以指定要使用的存储帐户数量。下面是一个使用 3 个存储帐户的 host.json 文件的示例:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle.Workflows",
    "version": "[1.*, 2.0.0)"
  },
  "extensions": {
    "workflow": {
      "Settings": {
        "Runtime.ScaleUnitsCount": "3"
      }
    }
  }
}

需要通过Standard Logic App的高级工具Kudu站点进行修改:

 

步骤 2:创建 3 个存储帐户并保存相关的连接字符串

步骤 3:使用以下模式将连接字符串添加到应用程序配置中。从 00 到 {存储帐户数量 - 1}:

  1. CloudStorageAccount.Workflows.ScaleUnitsDataStorage.CU00.ConnectionString
  2. CloudStorageAccount.Workflows.ScaleUnitsDataStorage.CU01.ConnectionString
  3. CloudStorageAccount.Workflows.ScaleUnitsDataStorage.CU02.ConnectionString

 

步骤 4:使用与 CloudStorageAccount.Workflows.ScaleUnitsDataStorage.CU00.ConnectionString 键相同的连接字符串值更新 AzureWebJobsStorage 配置键

 

 

[End]

相关文章
|
3月前
|
存储 安全 Linux
【Azure App Service】在App Service中查看CA证书
在 Azure App Service 中,使用自签名或私有 CA 证书的远程服务可能会导致 SSL 握手失败。解决方法包括使用受信任 CA 签发的证书,或通过 App Service Environment 加载自定义根证书,实现安全连接。
|
28天前
|
Java 应用服务中间件 API
【App Service】部署War包到Azure云上遇404错误
Java应用部署至Azure App Service for Windows后报404,本地运行正常。经排查,日志提示类文件版本不兼容:应用由Java 17(class file version 61.0)编译,但环境仅支持到Java 11(55.0)。错误根源为Java版本不匹配。调整App Service的Java版本至17后问题解决,成功访问接口。
112 1
|
4月前
|
域名解析 网络协议 API
【Azure Container App】配置容器应用的缩放规则 Managed Identity 连接中国区 Azure Service Bus 问题
本文介绍了在 Azure Container Apps 中配置基于自定义 Azure Service Bus 的自动缩放规则时,因未指定云环境导致的域名解析错误问题。解决方案是在扩展规则中添加 `cloud=AzureChinaCloud` 参数,以适配中国区 Azure 环境。内容涵盖问题描述、原因分析、解决方法及配置示例,适用于使用 KEDA 实现事件驱动自动缩放的场景。
136 1
|
1月前
|
存储 Linux 网络安全
【Azure App Service】Root CA on App Service
Azure App Service for Windows应用连接外部SSL服务时,需确保其证书由受信任的根CA颁发。多租户环境下无法修改根证书,但ASE(单租户)可加载自定义CA证书。若遇证书信任问题,可更换为公共CA证书或将应用部署于ASE并导入私有CA证书。通过Kudu的PowerShell(Windows)或SSH(Linux)可查看当前受信任的根证书列表。
97 13
|
2月前
|
API 网络架构 容器
【Azure Container App】查看当前 Container App Environment 中的 CPU 使用情况的API
在扩展 Azure Container Apps 副本时,因 Container App Environment 的 CPU 核心数已达上限(500 cores),导致扩展失败。本文介绍如何使用 `az rest` 命令调用 Azure China Cloud 管理 API,查询当前环境的 CPU 使用情况,并提供具体操作步骤及示例。
128 16
|
2月前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
|
2月前
|
网络协议 Java Linux
【App Service】在Azure环境中如何查看App Service实例当前的网络连接情况呢?
在 Azure App Service(Windows 和 Linux)中部署应用时,分析网络连接状态是排查异常、验证端口监听及确认后端连接的关键。本文介绍如何在 Linux 环境中使用 `netstat` 命令查看特定端口(如 443、3306、6380)的连接情况,并解析输出结果。同时说明在 Windows App Service 中 `netstat` 被禁用的情况下,如何通过门户抓包等替代方法进行网络诊断。内容涵盖命令示例、操作步骤及附录说明,帮助开发者快速掌握云环境中的网络分析技巧。
98 11
|
4月前
|
Java Shell Maven
【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package
在部署Java应用到Azure Container App时,构建镜像过程中出现错误:“./mvnw.cmd: No such file or directory”。尽管项目根目录包含mvnw和mvnw.cmd文件,但依然报错。问题出现在Dockerfile构建阶段执行`./mvnw dependency:go-offline`命令时,系统提示找不到可执行文件。经过排查,确认是mvnw文件内容异常所致。最终通过重新生成mvnw文件解决该问题,镜像成功构建。
164 1
|
4月前
|
网络协议 API 网络安全
【Azure Function App】发现部分请求Function App遇见 403.72 报错(请求Body>100KB)
在调用Azure Function的HTTP Trigger时,发送POST请求偶尔出现403错误,且响应为空、Header信息少。经排查发现,当请求Body大于100KB时会触发403.72错误,原因是启用了“Client Certificate mode”为“Optional Interactive User”。解决方法是将该模式设置为“Ignore”。由于TLS重新协商机制限制,大请求体无法正常处理,导致此问题。
158 1
|
4月前
|
存储 缓存 Serverless
【Azure Container App】如何在Consumption类型的容器应用环境中缓存Docker镜像
在 Azure 容器应用的 Consumption 模式下,容器每次启动均需重新拉取镜像,导致冷启动延迟。本文分析该机制,并提出优化方案:使用 ACR 区域复制加速镜像拉取、优化镜像体积、设置最小副本数减少冷启动频率,或切换至 Dedicated 模式实现镜像缓存,以提升容器启动效率和应用响应速度。
129 0

热门文章

最新文章