导出 (0) 打印
全部展开

针对服务总线队列和主题的容量规划

注:本页面内容可能不完全适用中国大陆地区运营的 Windows Azure服务。如要了解不同地区 Windows Azure 服务的差异, 请参考本网站.

作者:Valery Mizonov 和 Ralph Squillace

本主题介绍:

  • Windows Azure 队列与 Windows Azure 服务总线队列及主题之间在队列大小限制中常常很重要的差异

  • 在您想要利用服务总线队列和主题功能时如何估算正确的服务总线队列容量

  • 对具有不同大小的消息进行测试运行,以便了解可在服务总线队列或主题中放置多少个这种大小的消息

Windows Azure 服务总线中队列和主题的大小限制

Windows Azure 队列和服务总线队列都是基于排队访问存储的方式来实现的,但它们的功能集稍有差异,这意味着您可以根据您的特定应用程序的需要选择一种队列。例如,服务总线具有主题和订阅,这是在业务通知方案中通常很重要的发布-订阅实现;Windows Azure 队列可存储多达 100 TB 的数据,而服务总线队列目前限制为 5 GB。

下面将比较两个主要差异(最大消息大小和最大队列大小):

 

比较 Windows Azure 队列 服务总线队列

最大消息大小

64 KB

注意:这包括大约 25% 的 base64 编码的开销。

256 KB

注意:这包括标头和正文,其中,最大标头大小为 64 KB。

最大队列大小

100 TB

注意:最大大小限制为存储帐户级别。

1、2、3、4 或 5 GB

在创建队列或主题时定义该大小。

最后的这个差异(服务总线队列和主题的 5 GB 大小限制,与 Windows Azure 队列的 100 TB 限制相比)可能相当重要,因为这意味着如果您想要使用类似死信传递、主题和订阅、规则或操作之类的服务总线功能,则必须在生成所需的切实可行的应用程序前,估算对于您的应用程序将需要多大的服务总线队列或主题容量。根据消息大小、消息标头大小和任何自定义消息属性的大小,以及这些消息排入队列或发送到某个主题的速度如何,对于非常活跃的应用程序,可能很容易就会创建含 5 GB 数据的队列或主题。

最后,对于服务总线队列,您在创建队列时需要建立队列大小。您不能在创建队列后调整队列大小;而 Windows Azure 队列有权访问很多的存储,因此,几乎不需要考虑增加 Windows Azure 队列的大小。

在队列或主题超过其配置的容量后,如果仍然有后续请求要排队消息的话,将导致 Microsoft.ServiceBus.Messaging.QuotaExceededException 异常。您的应用程序应该提供针对这个特定异常类型的完备处理方案。例如,一个方法是暂时挂起针对队列或主题的消息传递,并且向使用者提供足够的时间,从而处理积压以便恢复消息发布。

还必须记住的是,服务总线队列中的消息由两个部分组成:标头和正文。整个消息的总大小(标头 + 正文)不能超过 256 KB。服务总线中转消息传递 API 使用二进制 XML 序列化(而非文本 XML),这减少了序列化负载的输出大小,并且这反过来又支持了存储稍大于 256 KB 的消息;对于您的应用程序,您必须进行测试,以便了解实际减小的程度。

计算服务总线队列和主题的容量

下面我们将介绍用于计算消息大小的基本算法,以及对于您的应用程序可能需要的服务总线队列或主题的类型。

一个空的消息具有 1024 字节的正文大小以及 156 字节的默认标头大小;再加上其他元素,在没有自定义标头或属性且消息正文为空的消息中,这总共是 1635 字节。

可以使用下面的公式评估指定数目的消息产生的大小要求:

消息数目 * (消息正文大小 + 消息标头大小)

为了确定正文大小,请使用 BrokeredMessage.Size 属性。标头大小可能要麻烦一些,因此它取决于您需要的精确度。最精确的方法是发送消息(或者,如果您需要在发送多个消息前了解有关信息,则发送一个测试消息),然后使用 NamespaceManager.GetQueue(或 NamespaceManager.GetTopic)方法查询队列元数据,并且使用 SizeInBytes 属性(属于 QueueDescriptionTopicDescription 对象)来确定增加的消息标头量。

主题大小需要采用不同的算法。用于确定某一给定数目的消息在主题中占用的空间量的公式为:

消息数目 * (消息正文大小 + (消息标头大小 * 订阅数目))

请注意,消息标头大小乘以主题的订阅数目,这意味着如果任何自定义标头添加到您的主题消息,主题大小都将随着订阅数目线性增加。

例如,如果您具有一个含 200 个订阅的默认消息,则它将导致 32 KB 的主题大小。但是,如果您将消息标头大小增加到 600 字节,则该主题大小现在将是 120 KB。最后,如果您添加从每个订阅接收方传输的 ACK 消息,则会增加很多。具有 600 字节消息标头(200 个订阅)的单个消息会加入 200 个 ACK 消息(每个订阅一个),现在您会看到 568,635 字节。提前考虑这个问题十分重要。

验证容量近似值

在估算在单个服务总线队列中可持有的消息数目时,您可以将以下数据考虑在内。此数据是由自定义实用工具捕获的,以便在不同的消息大小选项下确定队列容量。

 

示例消息大小 1 GB 队列 2 GB 队列 3 GB 队列 4 GB 队列 5 GB 队列

1 KB

1,041,790

2,059,920

3,128,550

4,186,400

5,238,750

10 KB

102,996

208,358

312,537

416,716

520,895

50 KB

20,857

41,792

62,507

83,343

104,179

100 KB

10,466

20,836

31,254

41,672

52,090

250 KB

4,191

8,334

12,501

16,669

20,836

为了排除二进制 XML 序列化对测试结果可能造成的影响,所有示例消息都已通过用随机值填充的相应大小的字节数组初始化。

另请参见


生成日期:

2013-10-23

社区附加资源

显示:
© 2014 Microsoft