我正在研究NServiceBus v4.x的概念验证实现工作。
现在我有两个订阅者和一个发布者。
发布商每秒可以发布超过500封邮件。它运行得很好。
订户A没有经销商/工人。这是一个单一的过程。
订户B使用单个分发服务器为N个工作人员提供服务。
在我的测试中,我点击了一个创建并发布100,000条消息的端点。我发布这个订阅者离线。
订阅者A每秒处理稳定的100条消息。 具有2名以上工作人员的订户B(与2,3或4相同的结果)在所有工作人员中努力达到每秒50条消息。
在我的场景中,工作人员(我为每个工人增加了40个线程)正在等待经销商给他们工作。
我是否遗漏了可能导致经销商受到限制的事情?所有公共汽车都运行无限制的开发许可证。
系统信息: 英特尔酷睿i5 M520 @ 2.40 GHz 8 GB的RAM SSD硬盘
更新08/06/2013 :我已完成将系统部署到一组服务器。我遇到了同样的结果。我添加的每个服务器都会降低用户的性能。
订户B在一台服务器上有一个分销商,另外两台服务器用于工作。对于订阅者B和一个具有活动工作者的服务器,我每秒遇到约80条消息/事件。在另一台物理计算机上添加另一个工作程序会将其减少到每秒约50条消息。而且,这些是“虚拟消息”。除了通过log4net记录消息之外,处理程序中实际上没有逻辑。关闭日志记录不会提高性能。
建议?
答案 0 :(得分:3)
如果您在一台服务器上使用NServiceBus主/工作节点进行扩展,那么尝试测量性能是没有意义的。具有多个线程的一个进程总是比同一台机器上的分发器和多个工作节点做得更好,因为分配器将成为瓶颈,而所有东西都在竞争相同的计算资源。
如果将工作人员转移到单独的服务器,那么这将成为一个完全不同的故事。如果这是服务器上发生的唯一事情,那么分发者可以非常有效地发布消息。
尝试使用多台服务器,看看会发生什么。
答案 1 :(得分:1)
您可以通过添加一些睡眠时间(例如5秒)来模拟实际处理,而不是让虚拟处理程序不执行任何操作。然后比较订户和分销商的结果?
缩小(使用或不使用分发服务器)仅适用于单个计算机所做工作需要时间的情况,因此更多计算资源会有所帮助。 为此,请监视端点上的CriticalTime性能计数器,并在需要时添加到分发服务器中。 无需更改代码即可在需要时使用分发服务器进行扩展,只需在分销商和工作人员配置文件中启动相同的端点即可。
答案 2 :(得分:0)
整个链是交易的。你为此付出了沉重的代价。当您没有非常快速的磁盘存储并通过写入缓存来加速事务性写入时,增加跨机器的工作负载实际上不会提高性能。
当您将poc扩展到多个服务器时,只需尝试将消息标记为“Express”,该消息不会在队列中执行事务性写入,并在总线实例上禁用MSDTC以查看没有事务的情况下可以实现哪种性能。除非您知道这不是强制性的,或者当您拥有不需要DTC的架构时能够做什么,否则这不适用于生产。