Azure Functions GET /元数据/实例取消的调用

问题描述 投票:0回答:1

我们使用用

Linux Consumption Plan
编写的
v4
函数在
C#
实例上运行许多 Azure 函数。代码使用
GitHub Actions
进行部署,并且全部使用
Microsoft.Azure.Functions.Worker.Sdk Version 1.14.1

其中一个功能使用

CosmosDB Change Trigger
来激活,另一个功能使用
Timer Trigger
设置为每五分钟执行一次。

我们对这些功能的应用程序见解显示,每五分钟就会有一次

GET: {ipAddress}/metadata/instance
调用,每次调用的平均持续时间为 1.1 分钟,并且始终会导致
Cancelled
状态。

在哪里以及为何进行这些调用,可以采取哪些措施来避免这种情况?看起来这会给服务增加不必要的开销?

c# azure azure-functions azure-cosmosdb timer-trigger
1个回答
0
投票

此调用由 Azure Cosmos DB SDK 进行,用于捕获 Azure VM 元数据信息。参考:https://learn.microsoft.com/azure/virtual-machines/instance-metadata-service?tabs=windows

此调用是在客户端初始化期间进行的,对于 Cosmos DB 客户端来说,故障并不严重。目的是,对于出现问题并发出遥测数据的情况,它会添加诸如 Azure VM 的位置之类的信息,并帮助识别您拥有多个客户端实例的情况。 这里重要的部分是,这应该只发生在

客户端初始化期间

。 CosmosDBTrigger 创建客户端一次并重用它,如果您每 5 分钟看到一次,这意味着:

您正在使用 Azure Functions 消耗计划,在一段时间不活动后,Functions 运行时正在终止该函数。因此每当有新的变化时,运行时就会重新启动,因此需要创建一个新的客户端。参考:
    https://azure.microsoft.com/blog/understanding-serverless-cold-start/
  • 如果您没有使用消耗计划,则项目中的代码可能正在使用
  • CosmosClient
  • 在 Azure Cosmos DB 容器上执行某些操作,并且您没有遵循单例模式(例如,在每次执行的 TimerTrigger)。这是一种反模式。参考:
    https://learn.microsoft.com/azure/azure-functions/manage-connections?tabs=csharp#static-clients
    。如果这是您的情况,我建议您查看这个利用 Azure Functions 依赖注入生成 Singleton CosmosClient 的示例项目:https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master /Microsoft.Azure.Cosmos.Samples/用法/AzureFunctions
© www.soinside.com 2019 - 2024. All rights reserved.