我们正在使用C#
编写的v4
函数在Linux Consumption Plan
示例上运行许多Azure函数。代码使用GitHub Actions
部署,所有代码都使用Microsoft.Azure.Functions.Worker.Sdk Version 1.14.1
。
其中一个函数使用CosmosDB Change Trigger
来激活,另一个函数使用Timer Trigger
设置为每五分钟执行一次。
我们对这些函数的应用程序洞察显示,每五分钟就有一次GET: {ipAddress}/metadata/instance
调用,每次调用的平均持续时间为1.1分钟,并且总是导致Cancelled
状态。
这些电话是在哪里打的,为什么打,可以做些什么来避免这种情况?这似乎会给服务增加不必要的开销?
1条答案
按热度按时间0dxa2lsx1#
此调用由Azure Cosmos DB SDK进行,以捕获Azure VM元数据信息。参考:https://learn.microsoft.com/azure/virtual-machines/instance-metadata-service?tabs=windows
此调用在客户端初始化期间进行**,并且对于Cosmos DB客户端而言,失败并不严重。其目的是,对于您遇到问题并发出遥测的情况,它会添加信息,例如Azure VM的位置,并帮助识别您有多个客户端示例的情况。
重要的是,这应该只在客户端初始化期间发生。CosmosDBTrigger创建客户端一次并重用它,如果你每5分钟看到它一次,这意味着:
CosmosClient
对Azure Cosmos DB容器执行某些操作,并且您没有遵循Singleton模式(例如,为每次执行在TimerTrigger上创建新的CosmosClient)。这是一个反模式。参考:https://learn.microsoft.com/azure/azure-functions/manage-connections?tabs=csharp#static-clients。如果您是这种情况,我建议查看此示例项目,该项目利用Azure Functions Dependency Injection来生成Singleton CosmosClient:https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master/Microsoft.Azure.Cosmos.Samples/Usage/AzureFunctions