1

我有一个服务总线触发功能,当接收到来自队列的消息时,会做一个简单的数据库调用,然后发送电子邮件/短信。我可以在我的服务总线队列中运行超过 1000 个调用来触发一个函数同时运行而不影响运行时间吗?

我担心的是我排队 1000 多条消息同时触发我的功能,比如下午 5:00 发送电子邮件/短信。如果他们最终因为运行线程太多而最终运行,那么接收电子邮件/短信的用户直到指定时间后 1 小时才会收到它们!

这是一个问题吗?如果是,有补救措施吗?仅供参考 - 我知道我可以使函数异步运行,在这种情况下会有什么不同吗?

4

2 回答 2

1

1000 条消息并不是一个大数字。如果您的电子邮件/短信服务可以快速处理它们,那么整个批次将相对较快地消失。不过有几件事要知道:

  • 在这种情况下,函数不会扩展到 1000 次并行执行。他们将从 1 个实例开始同时进行约 16 个并行调用,然后观察处理速度有多快,然后可能添加第二个实例,再次等待等。

  • 确切的缩放行为没有公开描述,并且会随着时间而改变。因此,YMMV,您需要针对您的特定场景进行测试。

  • 是的,尽可能使函数异步。我不希望仅仅因为这个而大大提高处理速度,但它肯定不会受到伤害。

底线:您的场景听起来对 Functions 来说不是问题,但如果您需要非常短的延迟,则必须在依赖它之前运行测试。

于 2018-03-20T06:36:48.053 回答
0

我假设您正在谈论将 Azure 服务总线绑定到 Azure 函数。同时触发 >1000 个 Azure Functions 应该没有问题。它们是无服务器运行时,如果您在消费模型下运行,应该能够大大扩展。如果您在服务计划中运行这些功能,您可能会受到服务计划的限制。

在您的方案中,您可能更有可能在压倒 Azure Functions 基础结构之前压倒下游依赖项:数据库和 SMS 发送系统。

最好的办法是进行一些负载测试,并监控来自与数据库和 SMS 系统的连接的异常。

于 2018-03-20T05:52:15.027 回答