来自 Azure Functions 的莫名其妙的存储事务



我有一个项目,其中有几个基于.NET Core的Azure Functions按计划运行。其中一个每 10 分钟运行一次,用于更新视图计数,类似于 SO 跟踪问题视图的方式,另一个每周发送电子邮件一次。这些功能运行了一年左右。我最近更新了它们以使用 Azure Functions SDK v3 和 Azure Functions 运行时 v3 以及 .NET Core 3.1(基本上从 .NET Core 2.1 迁移到 .NET Core 3.1,所以我需要更新函数运行时(。

有一次,我收到了比平时高得多的账单。事实证明,共享同一基础存储帐户的函数开始对存储进行大量 API 事务。每 5 分钟有数千人。通常,每次运行都会生成 100 个存储事务(可能检索函数文件?(,但在某些时候事务急剧增加。重新启动函数后,事务将下降到正常状态,并且几天内一切正常,然后它们再次跳跃并保持高位,直到重新启动。

函数代码尚未通过升级仅更改 SDK 和运行时而更改。函数代码通过 SDK 提供的记录器具有恒定的日志写入次数(如 7 次(,并且不会以任何其他方式与存储交互。

我有两个相同的环境,一个用于测试,一个用于生产,两者都有相同的问题。函数流氓所需的间隔是几天,但每次似乎都不同。但是,如果我同时重新启动测试和生产环境,则下一个峰值在两个环境中同时发生,因此存在确定性。

根据我通过指标工具的调查,有问题的事务类型是创建,关闭和更改通知,其中一些取消(但少于其他(。存储不用于其他任何用途(实际上它之所以存在,是因为 Azure Functions 需要备份存储来存储其文件或其他内容(

这是触发代码,以防相关

[FunctionName("ViewCountUpdater")]
public static async Task RunAsync([TimerTrigger("0 */10 * * * *"/*, RunOnStartup = true*/)]TimerInfo timer, ILogger log, ExecutionContext context)

我相信我在 Azure Functions 运行时或 Azure Functions .NET Core SDK 中遇到了一个错误。有没有人经历过这种情况或知道如何解决它?

您是否启用了AzureWebJobsDashboard?如果是,则应禁用它(从应用设置中删除连接字符串(并切换到应用程序见解。已知此设置会导致对存储的意外写入,无法正确解释。

https://github.com/Azure/Azure-Functions/issues/832

经过数周的调查,Azure支持团队和我认为我们已经找到了导致问题的行,就是这样:

.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)

配置文件未作为发布过程的一部分发布,并且 Azure 中不存在。现在的实验似乎证实,当这种情况存在时,交易会激增,而当不是时,它们是正常的。这不回答

  • 为什么会发生错误
  • 它是 .NET Core 中的回归还是函数运行时中的回归?
  • 为什么错误是随机发生的,而不是每次运行时?

请注意,测试这需要时间,因为我必须等待几天才能出现随机峰值,而且我永远无法确定它是否永远消失了,所以我不能 100% 确定在未来的某个时候峰值不会再次发生并证明问题是其他问题。

最新更新