【问题标题】:Azure Logic App and Function App performance differenceAzure Logic App 和 Function App 性能差异
【发布时间】:2020-07-20 22:02:12
【问题描述】:

我们正在建立新项目。我们的要求是调用多个 REST API 并聚合响应并将其发送回移动客户端。

我们正在为我们的体验层探索这两个选项(集成) 1. 逻辑应用 2.Azure函数

我们观察到这两者在性能方面的一个主要差异。

我们通过简单的用例来比较性能。

我们只是调用了一个 REST API 来获取一些具有不同可用选项的指标

  1. 只需与 APIM 集成作为后端服务
  2. 使用 Azure 函数
  3. 使用逻辑应用

以下是指标

与其他选项相比,逻辑应用的执行时间更长。下面是调用rest api的简单逻辑应用

{
"definition": {
    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
    "actions": {
        "GetReferenceData": {
            "inputs": {
                "headers": {
                    "Authorization": "@variables('AuthToken')"
                },
                "method": "GET",
                "uri": "url"
            },
            "runAfter": {
                "Initialize_AuthToken": [
                    "Succeeded"
                ]
            },
            "type": "Http"
        },
        "Initialize_AuthToken": {
            "inputs": {
                "variables": [
                    {
                        "name": "AuthToken",
                        "type": "string",
                        "value": "@{triggerOutputs()['headers']?['Access-Token']}"
                    }
                ]
            },
            "runAfter": {},
            "type": "InitializeVariable"
        },
        "Response": {
            "inputs": {
                "body": "@body('GetReferenceData')",
                "statusCode": "@outputs('GetReferenceData')['statusCode']"
            },
            "kind": "Http",
            "runAfter": {
                "GetReferenceData": [
                    "Succeeded"
                ]
            },
            "type": "Response"
        },
        "Response_2": {
            "inputs": {
                "body": "@body('GetReferenceData')",
                "statusCode": "@outputs('GetReferenceData')['statusCode']"
            },
            "kind": "Http",
            "runAfter": {
                "GetReferenceData": [
                    "Failed",
                    "Skipped",
                    "TimedOut"
                ]
            },
            "type": "Response"
        }
    },
    "contentVersion": "1.0.0.0",
    "outputs": {},
    "parameters": {
        "storageLocation": {
            "defaultValue": [],
            "type": "Array"
        }
    },
    "triggers": {
        "manual": {
            "inputs": {
                "method": "GET",
                "relativePath": "/referenceData",
                "schema": {}
            },
            "kind": "Http",
            "type": "Request"
        }
    }
},
"parameters": {}
}

我们有很多用例,需要调用多个 REST API 并聚合结果。有了上面的数字,Function App 的表现似乎比 Function App 做得更好。对于并行操作,我可能依赖于持久函数而不是 Logic 应用。

所以我只是想了解为什么逻辑应用程序需要更长的时间,几乎是类似操作的功能的两倍?

逻辑应用是否不适用于这些操作?

【问题讨论】:

  • 我看不出逻辑应用程序和确定功能之间的时间差异很大,只有几百毫秒,您打算集成什么样的负载和系统?给我们一些想法,以便我们提出建议东西
  • 两种方法都有冷启动。如果对 Azure Functions 使用高级计划,可以获得更好的结果。 PS:看看Durable Functions(扇入和扇出模式)。它会让您的生活更轻松。
  • 我们从逻辑应用开始,因为它的功能(易于集成、开箱即用的异常处理、重试等...)。但是当我们对函数执行相同的操作时,我们会看到更好的性能。当然毫秒也很重要。如果我们开始使用越来越多的 API,它可能会使用多个。我假设 Logic 应用程序的结果是由于其设计

标签: azure azure-functions azure-logic-apps azure-api-management


【解决方案1】:

请参阅已回答此问题的另一个线程。 Is Logic Apps performance slower compared to a direct .NET REST Call?

以下添加可能会提供更多见解

“Azure Functions 是由事件触发的代码,而逻辑应用是由事件触发的工作流的单独框架。” 逻辑应用是您可以使用触发器和操作定义的一个工作流的逻辑容器。

逻辑应用程序运行在 Azure 区域的一组基础架构(数据中心中的虚拟机)上,它由几个您不可见的组件组成,因为它被抽象出来了。通过预配逻辑应用,您可以在定义工作流并触发流程后利用该基础架构的一部分(间接通过逻辑应用服务)。

Azure Functions 是应用服务 Azure Web + 移动套件的一部分,旨在支持创建有意义的、可重用的小块方法,并在服务之间轻松共享。

【讨论】:

  • 当我们考虑逻辑应用基础设施和能力时,差异确实是有意义的。 ,但我不认为逻辑应用是您希望客户直接与之交互的东西,即使是通过 http 触发器。
  • 我们正在使用 Durable 函数来满足所有编排和工作流需求。与我们需要依赖其连接器产品的 Logic APP 相比,使用自定义代码很容易管理。此外,微软正在投资 Function APP,您可以使用 Kubernetes 和 Keda 在 Prem 上部署 Function APP。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2022-11-04
  • 2018-03-26
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
相关资源
最近更新 更多