我正在创建一个 Azure 函数,并希望它在每次运行之间随机延迟运行。我希望从 10 - 20 分钟的间隔中随机选择每次运行之间的延迟。例如,我想要:
- 功能运行
- 11 分钟延迟
- 功能运行
- 延迟 17 分钟
- 功能运行
- 延迟 10 分钟
- 功能运行
- 延迟 20 分钟
- 等...
这可能吗?谢谢。
最佳答案
不要修改functions.json
不要按照建议修改functions.json
。它会重新启动您的整个功能应用程序,在我的情况下(使用 Node.js)这也意味着我会因为在我的 node_modules
中读取/写入数万个文件而被收取少量但值得注意的费用文件夹。
解决方案
最好的办法是每分钟运行一次该函数,但大部分时间都立即退出。这是一个例子。我假设我们希望随机运行该函数,但平均而言我们希望每 15 分钟运行一次该函数。
节点.js
// On average, run the function every N minutes:
const AVERAGE_RUN_EVERY=15;
if (Math.random() > 1 / AVERAGE_RUN_EVERY) {
// Most of the time, we will exit here:
context.done();
} else {
// Your actual code here
}
.NET
int AVERAGE_RUN_EVERY = 15;
Random rnd = new Random();
if (rnd.Next(0, AVERAGE_RUN_EVERY) == 0) {
// Your actual code here
}
随机运行的额外成本
假设每次执行的最低费用为 100 毫秒,并且您的应用程序使用的内存为 256 MB 或更少,则每个月您将被收取费用:
0.1s * 0.25 GB * 1440 minutes/day * 30 days * $0.000016/GB/s = 0.02 USD
实际上,您甚至可能最终会省钱,因为如果您的功能应用程序每分钟运行一次,则不会进入休眠模式,这意味着该功能将花费更少的启动时间。
关于azure-functions - 是否可以随机触发 azure 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51852647/