性能注意事项

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

所有 Service Bus for Windows Server 消息实体(队列、主题、订阅)均存储在容器中。每个容器只与一个数据库相关联,该数据库物理存储实体及实体的所有消息。一个数据库可以为一个容器提供服务。如果创建了新容器,则也会创建新数据库。创建队列或主题时,Service Bus for Windows Server 会将该实体分配给容器。所有消息均存储在该容器的数据库中。某个主题的所有订阅与该主题存储在同一容器中。

Service Bus for Windows Server 场由一个或三个节点组成。每个节点均运行 Service Bus for Windows Server 网关服务和 Service Bus for Windows Server 代理服务。每个容器由一个代理加载。Service Bus for Windows Server 尝试在所有可用的代理之间尽可能均匀地分布容器。如果某个代理出现故障,则已由该代理加载的所有容器都将转给其余的代理。涉及某一特定实体的所有操作均由已加载内含该实体的容器的代理进行处理。有关详细信息,请参阅Service Bus for Windows Server 体系结构概述

性能指南

本部分讨论执行后可提高吞吐量的性能优化。

硬件注意事项

Service Bus for Windows Server 场的总吞吐量受以下三个因素的限制:

  1. 场节点的计算能力。

  2. SQL Server 计算机的计算能力和硬盘配置。

  3. 场节点与 SQL Server 计算机之间的网络连接的带宽。

Tip提示
为了达到较高的吞吐量,请对 SQL Server 数据库(而非场节点之一)使用专用计算机。

如果你打算使用大量队列和主题,则应计划在多个 SQL Server 上运行多个消息容器。Service Bus for Windows Server 会将消息容器(数据库)动态分配给场节点,而在创建实体时会将 Service Bus for Windows Server 队列和主题(及其消息)放置到数据库中。

Tip提示
为获得最佳吞吐量,请至少使用与场中的节点一样多的容器。

Tip提示
对于大量队列和主题,请计划使用是你的场节点数三倍以上数目的消息容器(例如,为具有三个节点的场创建 9 个消息容器)。

Tip提示
在创建 Service Bus for Windows Server 队列和主题之前创建消息容器。

SQL Server 优化

大多数消息传递方案的性能受 SQL Server I/O 的限制。在优化托管 Service Bus for Windows Server 容器数据库的 SQL Server 时,请考虑以下要点。

  • 配置 SQL Server,使日志和数据存储在不同的磁盘上。

  • 优化 SQL Server 硬盘以提高写入性能。如果服务器配有足够的内存,则 SQL Server 较少从磁盘读取数据。如果服务器配有两个以上的磁盘,请标记包含日志和数据存储的磁盘。

  • 为日志和数据文件预分配空间并禁用自动增长。

  • 配置 SQL Server,使每个处理器核心都有一个 TempDB 数据文件。

  • 将 NTFS 分配单元大小更改为 64 KB。

启用重定向

默认情况下,客户端将请求发送到 Service Bus for Windows Server 网关之一。网关将请求转发到已加载内含该实体的容器的代理。如果启用了重定向功能,则客户端会将重定向请求发送到 Service Bus for Windows Server 网关。该网关将以代理的地址做出响应。客户端直接向该代理发送所有请求。若要启用重定向功能,请将工厂的 EnableRedirect 属性设置为 true。例如:

MessagingFactorySettings factorySettings = new MessagingFactorySettings();
factorySettings.NetMessagingTransportSettings.EnableRedirect = true;
MessagingFactory factory = MessagingFactory.Create("address", factorySettings);

请注意,重定向机制仅适用于通过 TCP 发送的请求。HTTP 请求始终通过网关。另请注意,重定向功能与某些负载平衡器不兼容。

增加内部缓存的大小

增加缓存大小将允许 Service Bus for Windows Server 代理进程在内存中存储更多数据。例如,若要将默认缓存大小 500 MB 增加到 1 GB,请在一个 Service Bus for Windows Server 场节点上运行以下 PowerShell cmdlet:

Set-SBRuntimeSetting  -Name messagecachesizeperentity -Value 1048576000
Stop-SBFarm
Start-SBFarm

禁用消息排序

必须将发送到某个主题的消息移至所有订阅。如果允许 Service Bus for Windows Server 将消息不按顺序移至订阅,则可以加速此过程。经观察,如果禁用消息排序,则性能改进系数为 3。

若要对主题禁用消息排序,请将 TopicDescription 类的 SupportOrdering 属性设置为 false。例如:

TopicDescription topicDescription = new TopicDescription(topicName)
{
    SupportOrdering = False
};
namespaceManager.CreateTopic(topicDescription);

方案

本部分针对几个主要方案讨论了有关如何提高性能的建议。请注意,准确的吞吐量数字因所使用的具体方案和特定功能而有很大变化。

针对吞吐量高的单个(或数个)实体进行优化

单个队列或主题存储在单个容器中,而后者则基于单个数据库并由单个代理进行处理。如果使用了 TCP 协议,则只有一个场节点处于活动状态,场的其他节点则充当允许场从节点故障中恢复的备份节点。Get-WFServiceVersionAdd-SBHost

基准检验显示了以下结果:

 

  消息吞吐量 操作的数量(发送 + 接收)

单个队列

20,000 条消息/秒

40,000 条消息/秒

订阅数为 1 的单个主题

14,200 条消息/秒

28,400 条消息/秒

订阅数为 1000 的单个主题

26 条消息/秒

26,000 条消息/秒

使用一个包含三个节点的场和一个专用 SQL Server 节点对基准检验进行观察。对大小为 1 KB 的消息的同时发送和接收进行测量。所有节点均配有四个四核 CPU (2.3GHz)、24GB RAM 和 1G 比特/秒的以太网。

针对许多吞吐量高的实体进行优化

一个包含三个节点的场应至少具有三个容器。理论上应有九个(或更多)容器,这种情况下,当其中一个场节点出现故障时,场节点仍可保持均匀加载状态。

我们的测试系统能够处理 1500 个队列,其中每一个队列均有每秒 1 个消息的消息吞吐量(发送 + 接收)。

另请参见


生成日期:

2013-09-12
显示: