【问题标题】:Trigger Azure Function from Service Bus topic without consuming Brokered Connections从服务总线主题触发 Azure 函数,而不使用代理连接
【发布时间】:2018-06-03 08:01:35
【问题描述】:

所以,我正在分析使用 Functions 从主题中消费服务总线消息是否可行。

我们选择的服务总线定价计划对每月的“代理连接”数量(最多 1000 个)有限制。

我的理解是,在典型的使用场景中,消费者/听众/订阅者连接到一个主题并保持持久连接,在很长一段时间(一天,甚至一周)内接收多条消息而不会中断连接,并且这被视为 1 个“代理连接”。最后,您可以在单个代理连接上接收数千条消息。

这如何与 Azure 函数绑定一起工作?从我在文档中读到的,一个函数可以是空闲的(即没有运行),所以它不能维持这个持久连接。

是否有一个单独的函数组件可以保持此连接处于活动状态以侦听传入消息?还是每次函数空闲然后重新启动时,我们都会为新的代理连接付费?

我将包含当前计划功能的屏幕截图: https://azure.microsoft.com/en-us/pricing/details/service-bus/

稍后在同一链接中:


编辑

来自Docs

服务总线对超过包含数量(标准层为 1,000)的并发代理连接的峰值数量收费。峰值按小时计算,除以一个月内的 744 小时后按比例计算,并在每月计费期间累加。包含的数量(每月 1,000 个代理连接)在计费期结束时根据按比例分配的小时峰值总和应用。

他们在最后一句话中特别提到了“每月 1,000 个代理连接”。

这是一个例子:

10,000 台设备中的每台都通过单个 AMQP 连接进行连接,并接收来自服务总线主题的命令。设备将遥测事件发送到事件中心。如果所有设备每天连接 12 小时,则适用以下连接费用(除了任何其他服务总线主题费用):10,000 个连接 * 12 小时 * 31 天 / 744 = 5,000 个代理连接。在每月允许 1,000 个代理连接之后,您需要为 4,000 个代理连接付费,每个代理连接 0.03 美元,总计 120 美元。

所以我想所有这些都是针对 10,000 个订阅者在 12 小时内同时连接到该主题的,如果他们每天连接 24 小时,那么将收取 9,000 个代理连接的费用(10,000 减去包含的 1,000)?

无论如何,我也在尝试验证是否可以使用函数进行持久连接(我被告知它们与 webjobs 相关)。

【问题讨论】:

  • 你找到答案了吗?我也担心代理连接,似乎没有人了解 azure 函数触发器的成本

标签: azure azure-functions azureservicebus servicebus


【解决方案1】:

Azure Functions 有一个单独的组件,称为 ScaleController,它可以 24/7 全天候监控服务总线的事件。

由于 Functions 中的底层 SB 消息接收器是在 WebJobs 中实现的,因此将有一个连接可以在 Function 实例的整个生命周期内检索多条消息,尽管由于其当前的限制,它会在以下位置传递这些消息有时间给你的 Function code 进行处理。

仅在您的函数代码实际运行时才向您收费。这是一个链接,可以让您概述 ScaleController:https://docs.microsoft.com/en-us/azure/azure-functions/functions-scale#runtime-scaling

如果您预计负载会相对较高,您是否考虑过使用事件中心而不是服务总线? Azure Functions 中的 ServiceBus-Triggers 目前一次只能处理一条消息,这对于高负载方案来说并不是最佳选择。这是一个为跟踪此功能请求而打开的 GitHub 问题:https://github.com/Azure/azure-webjobs-sdk/issues/1024

EventHub-Triggers 可以批量处理消息,这应该让您在每次执行 Function 时都能物有所值。见https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs

【讨论】:

  • 感谢玲的启发性回答。问题:处理每条消息的每个函数是否都算作一个代理连接,或者 ScaleController 是否保持与主题的持久连接,因此每个连接能够传输超过 1 条消息?有人告诉我,这就是 webjobs 的工作方式,1 个连接,多条消息(这里不讨论批次,重点关注事件中心。)谢谢。
  • ScaleController (SC) 不保持与 ServiceBus (SB) 的持久连接,因为 SC 感兴趣的 API 仅用于发现 a) 消息计数和 b) 在话题。 SC 轮询的间隔为 10 秒。在 a 和 b 上使用启发式算法,SC 将增加/减少实例的数量。然后,在其工作 VM 上运行的每个 SB-Triggered Function 实例将创建一个连接以检索单个消息以进行处理。在 Consumption Plan 中,如果没有错误,则每个 Function 实例的连接最多持续 10 分钟。
  • 这是一篇补充文章,其中包含示例 EventHub 性能运行及其相关成本。 blogs.msdn.microsoft.com/appserviceteam/2017/09/19/…
  • 我需要澄清我之前的陈述 - 您是正确的,因为 Functions 中的底层 SB 消息接收器是在 WebJobs 中实现的,因此将有一个连接可以在整个生命周期中检索多条消息Function 实例,尽管由于其当前的限制,它一次将这些消息传递给您的 Function 代码进行处理。
  • 非常感谢Ling,这完成了我的问题的答案!
猜你喜欢
  • 2021-09-28
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 2021-12-24
  • 1970-01-01
  • 2020-10-11
相关资源
最近更新 更多