我有一个服务总线触发器功能,当从队列接收消息时,将执行简单的数据库调用,然后发送电子邮件/短信。我可以运行>在我的服务总线队列中进行1000次调用以触发函数同时运行而不会影响运行时间?
我担心的是,我排队了1000多条消息,同时触发我的功能,比如说下午5点发送电子邮件/短信。如果他们最后运行起来因为有很多正在运行的线程,那么接收电子邮件/短信的用户直到指定时间后1小时才能收到它们!
这是一个问题,如果有的话有补救措施吗? 仅供参考 - 我知道我可以让函数异步运行,这会在这种情况下有什么不同吗?
答案 0 :(得分:0)
我假设您正在谈论Azure Service Bus绑定到Azure功能。同时触发> 1000 Azure功能应该没有问题。它们是无服务器运行时,如果您在消费模型下运行,它们应该能够大大扩展。如果您正在运行服务计划中的功能,则可能受到服务计划的限制。
在您的场景中,在您淹没Azure Functions基础架构之前,您可能更有可能压倒下游依赖项:数据库和SMS发送系统。
最好的办法是进行一些负载测试,并监控与数据库和SMS系统连接的异常。
答案 1 :(得分:0)
1000条消息不是一个大数字。如果您的电子邮件/短信服务可以快速处理它们,整个批次将会相对较快地消失。但是要知道几件事:
在这种情况下,函数不会扩展为1000个并行执行。他们将从1个实例开始同时执行~16个并行调用,然后观察处理的速度,然后可以添加第二个实例,再等一等。
确切的缩放行为未公开描述,可能会随时间而变化。因此,YMMV,您需要根据您的具体情况进行测试。
是的,尽可能使函数异步。我不希望因此而大大提高处理速度,但它肯定不会受到伤害。
结论:你的场景对于函数来说听起来不是问题,但是如果你需要非常短的延迟,你必须在依赖它之前运行测试。