我们正在建立新项目。我们的要求是调用多个 REST API 并聚合响应并将其发送回移动客户端。
我们正在为我们的体验层探索这两个选项(集成) 1.逻辑应用程序 2.Azure函数
我们观察到两者之间在性能方面存在一个主要差异。
我们通过简单的用例来比较性能。
我们只是调用 REST API 来获取一些具有不同可用选项的指标
- 只需与 APIM 集成作为后端服务
- 使用 Azure 函数
- 使用逻辑应用
与其他选项相比,逻辑应用需要更长的执行时间。下面是调用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 并聚合结果。从上面的数字来看,函数应用程序似乎比函数应用程序做得更好。对于并行操作,我可能比逻辑应用程序更依赖持久函数。
所以我只是想了解为什么逻辑应用程序花费的时间比类似操作的函数花费的时间几乎是两倍?
逻辑应用不适合这些操作吗?
最佳答案
请参阅已回答此问题的另一个帖子。 Is Logic Apps performance slower compared to a direct .NET REST Call?
以下添加可能会提供更多见解
“Azure Functions 是由事件触发的代码,而逻辑应用程序是由事件触发的工作流的独立框架。” 逻辑应用程序是可以使用触发器和操作定义的一个工作流的逻辑容器。
逻辑应用程序在 Azure 区域的一组基础架构(数据中心中的 VM)上运行,并且由多个您不可见的组件组成,因为它被抽象了。通过预配逻辑应用,一旦定义工作流并触发该流,您就可以利用该基础设施的一部分(间接通过逻辑应用服务)。
Azure Functions 是 Azure Web + Mobile 应用服务套件的一部分,旨在支持创建有意义的、可重用的小片段方法,并可在服务之间轻松共享。
关于Azure 逻辑应用程序和函数应用程序性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61101593/