当前位置:  开发笔记 > 运维 > 正文

在.NET服务总线队列与Azure队列服务之间进行选择

如何解决《在.NET服务总线队列与Azure队列服务之间进行选择》经验,为你挑选了2个好方法。

只是一个关于Azure应用程序的快速问题.如果我有许多需要通信的Web和Worker角色,文档说要使用Azure队列服务.

但是,我刚刚读到新的.NET Service Bus现在也提供了队列.这些看起来更强大,因为它们似乎提供了更加详细的API.虽然.NSB看起来更有趣,但它有几个问题让我在分布式应用程序中使用它时会很谨慎.(例如,Queue Expiration ...如果我不能保证队列将按时更新,我可能会失去它!).

有没有人有任何经验使用这两种技术中的任何一种,并且可以提供何时选择其中一种的建议.

我怀疑虽然服务总线看起来更强大,但我的用例实际上只是让Web/Worker角色能够相互通信,Azure Queue Service就是我所追求的.但是我真的在寻找确认之前,然后自己进入角落:-)

提前致谢.

UPDATE

在休息时间读了两个系统.它看起来像.NET服务总线更专门用于集成系统,而不是提供通用的可靠消息系统.Azure队列是分布式的,因此可靠且可扩展,其中.NSB队列不是,因此更适合Azure本身托管的代码.

谢谢你的回复.



1> Dan But..:
存储队列与服务总线

以下是我在思考这个问题时所考虑的一些不同考虑因素的细分.

可用性

自去年11月Azure存储中断以来,Azure承诺永远不会再将代码部署到所有区域 - 将其构建到系统中以使其无法实现. https://azure.microsoft.com/en-us/blog/final-root-cause-analysis-and-improvement-areas-nov-18-azure-storage-service-interruption/

这是msdn关于可用性的说法:

如果您已经在使用Azure存储Blob或表并开始使用队列,则可以保证99.9%的可用性.如果使用带有Service Bus队列的Blob或表,则可用性较低.

Azure队列旨在支持应用程序组件的分离,以提高可扩展性和故障容忍度.

发展

就个人而言,我对存储API感到满意,并且已经需要在大多数应用程序的其他区域中使用blob存储.存储队列使用与存储blob完全相同的sdk.Azure队列在队列,表和BLOB之间提供统一且一致的编程模型

成本

Service Bus支持的接收和删除模式提供了减少消息传递操作计数(和相关成本)的能力,以换取降低的传输保证.

似乎有一些关于服务总线成本控制的工具,如果你必须开始保持预算来运行你的应用程序,你可以利用它 - 我试图打破下面的潜在存储队列成本:).每个月不到一百美元,GRS每小时超过40,000个队列.考虑到我们的剩余存储成本,我认为在这里专注于削减成本并不会有好处.(两者的带宽相同,比较时取消)

存储定价

您可以获得无限的免费队列和操作 - 您需要支付空间费用

假设30K消息大小为平均值

假设MB为1000K而不是1024

假设您不会达到1TB以上的分级定价

30K/1消息*1 TB/1000000000K*$ .095/1 GB*1000GB/1 TB = $ 0.00000285 /第一个使用TB的消息

1条消息/ ~30K*1000000000K/1 TB = 33333333 TB中的消息

第一个TB的33333333消息*$ 0.00000285/message =〜$ 95美元

分散了一个多月,我们可以做到每小时40,000条消息与第一TB一样

服务巴士定价

一个月基价10块钱

按操作付费(任何api调用都是操作) - 添加队列/接收队列/监视队列/等

你每月获得1250万免费操作

之后支付每百万操作费用

很难估计这里的使用情况,但1亿次运营每月花费80美元

批量接收

通过在检索消息时指定消息计数,存储可以最多批量处理32条消息,而Service Bus允许队列客户机将多条消息批处理为单个发送操作.

因此,存储是批量接收,而服务总线是批量发送.

监控

通过Azure队列,您可以获取针对队列执行的所有事务的详细日志以及聚合度量标准.这种支持并不是随服务总线开箱的 - 但可能会在某处找到预建的解决方案.

转发

Service Bus具有缺少存储队列的自动转发功能.

自动转发使数千个队列能够将其消息自动转发到单个队列,接收应用程序从该队列中消耗该消息.您可以使用此机制来实现安全性,控制流,并隔离每个消息发布者之间的存储.

重复

Service Bus队列支持的复制检测功能会根据MessageID属性的值自动删除发送到队列或主题的重复邮件.

存储队列消息可以在没有警告的情

元数据

Service Bus为您提供邮件标题+正文的2个部分.对于全球部署的基础架构,这是一个非常有用的功能.让你用区域名称和实例id之类的东西来装饰你的消息.队列消息是简单的字符串.另一方面,Azure存储队列以名称/值对的形式提供对可应用于队列描述的任意属性的支持.因此,您可以在Service Bus中修饰消息并使用存储队列装饰队列

交货保证

Service Bus提供At-Most-Once和至少一次,而Queue仅提供至少一次交付.如果并发订阅者一直是个问题,这可能会限制我们使用队列的能力.

性能

Azure存储队列提供10毫秒的延迟(在数据中心内),而服务总线提供20-25毫秒的延迟.服务总线确实提供长轮询,如果你需要它,它甚至会好于10ms.

安全

存储队列使用主/辅助共享密钥,而服务总线通过Active Directory通过Sender/Receiver/Admin角色提供RBAC.

引用

https://msdn.microsoft.com/en-us/library/azure/hh767287.aspx

http://azure.microsoft.com/en-us/pricing/details/storage/

http://azure.microsoft.com/en-us/pricing/details/service-bus/

https://alexandrebrisebois.wordpress.com/2013/10/20/windows-azure-storage-queues-vs-windows-azure-service-bus-queues/



2> Simon Munro..:

我建议您坚持使用Azure Queues在Web和辅助角色之间进行通信.使用队列是Azure流程之间通信的官方和制裁方式,我真诚地怀疑您是否会将自己编程到一个角落.Service Bus(AppFabric)具有更高的开销,虽然非常适合与外部应用程序通信,但对于Azure应用程序中的快速和简单消息可能不是最佳选择.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有