存储队列 vs 服务总线
以下是我在思考这个问题时考虑到的一些不同因素。
可用性
自从去年十一月的存储中断后,Azure承诺他们将永远不会再次将代码部署到所有区域 - 因为他们已经将此功能纳入系统,使其不可能。 https://azure.microsoft.com/en-us/blog/final-root-cause-analysis-and-improvement-areas-nov-18-azure-storage-service-interruption/
以下是msdn关于可用性的说明:
如果您已经在使用Azure存储Blob或Table,并开始使用队列,则可以保证99.9%的可用性。如果您使用Blob或Table与服务总线队列,则可用性较低。
Azure队列旨在支持应用程序组件的解耦,以增加可扩展性和故障容忍度。
开发
就我个人而言,我很熟悉存储API,并且在大多数应用程序的其他领域中都需要其Blob存储。存储队列使用与存储Blob相同的SDK。
Azure队列提供了跨队列,表和BLOB的统一和一致的编程模型。
成本
服务总线支持的接收和删除模式提供了减少消息操作计数(以及相关成本)以换取降低的传递保证的能力。
似乎有一些关于服务总线成本控制的工具可以利用,如果您不得不开始保持运行应用程序的预算 - 我尝试在下面分解了潜在的存储队列成本 :)。对于GRS超过40,000个队列/小时,每月成本不到一百美元。与我们其他存储成本合并在一起,我不认为集中削减成本有益处。(带宽对两者都是相同的,因此在比较时互相抵消)
存储定价
你可以获得无限制的免费队列和操作 - 你只需要支付空间费用。
- 假设平均每个消息大小为30K。
- 假设1MB等于1000K而非1024。
- 假设你不会超过1TB后的分阶价格。
30K / 1条消息 * 1 TB / 1000000000K * $.095 / 1 GB * 1000GB / 1 TB = $0.00000285 / 消息,对于第一个TB的使用。
1个消息 / ~30K * 1000000000K / 1 TB = 1TB中的33333333个消息。
33333333个消息 * $0.00000285 / 消息 = 大约$95美元,对于第一个TB。
在一个月内分散开来,我们可以利用这1TB处理大约40,000条消息/小时。
Service Bus定价
- 10美元/月的基本价格
- 按操作收费(任何api调用都是一个操作)- 添加队列/接收队列/监视队列/等等。
- 你可以获得每月1250万次免费操作。
- 在此之后的每百万次操作收费。
很难估计使用情况,但1亿次操作的成本是80美元/月。
批量接收
Storage可以通过指定消息计数来批量最多32个消息,而Service Bus允许队列客户端将多个消息批量发送到单个操作中。
因此,存储是批量接收,而服务总线是批量发送。
监控
Azure Queues使您能够获得针对队列执行的所有事务的详细日志,以及聚合指标。这种支持在Service Bus中不是开箱即用的 - 但可能可以在某个地方找到预构建的解决方案。
转发
Service Bus具有一个自动转发功能,而存储队列则没有。
自动转发使得数千个队列可以将他们的消息自动转发到一个单一的队列,接收应用程序从该队列中消费消息。你可以使用此机制来实现安全性、控制流和在每个消息发布者之间隔离存储。
重复
Service Bus队列支持的重复检测功能会根据MessageID属性的值自动删除发送到队列或主题的重复消息。
存储队列消息可能会无预警地重复。
元数据
Service Bus给您一个消息头+正文的两个部分。这是一个非常有用的功能,适用于全球部署的基础设施。让您可以为消息添加区域名称和实例ID等内容。队列消息只是简单的字符串。另一方面,Azure存储队列提供了对队列描述可应用的任意属性的支持,以名称/值对的形式。因此,您可以在Service Bus中装饰消息,在存储队列中装饰队列。
交付保证
Service Bus提供At-Most-Once和At-Least-Once,而队列仅提供At-Least-Once交付。如果并发订阅者成为问题,这可能会限制我们使用队列的能力。
性能
Azure存储队列提供10毫秒的延迟(在数据中心内),而Service Bus提供20-25毫秒的延迟。如果需要,Service Bus提供长轮询会比10毫秒更好。
安全性
存储队列使用主/辅共享密钥,而Service Bus通过Active Directory提供了Sender/Receiver/Admin角色的RBAC。
参考
http://azure.microsoft.com/zh-cn/pricing/details/service-bus/
https://alexandrebrisebois.wordpress.com/2013/10/20/windows-azure-storage-queues-vs-windows-azure-service-bus-queues/
注:以上链接分别为 Azure Service Bus 官网和一篇介绍 Windows Azure 存储队列(Windows Azure Storage Queues)和 Azure Service Bus 队列(Azure Service Bus Queues)差异的博客。