我们已经为我们的应用程序实现了SSB消息传递解决方案,但现在正在遇到扩展问题。任何具有SSB应用程序升级经验的人都能提出任何关于我们可能做错的建议吗?
设置是我们使用单个启动器队列,该队列使用激活的过程为单个目标队列提供信息。激活的过程处理收到的消息,并选择性地将它们分派给已注册相关类型消息的客户端。
此第二阶段调度再次使用单个引导程序队列(不同于用于初始消息注入的队列),并将消息发送到确定为适当的任意数量的客户端队列。
每个客户端对数据库执行操作,创建发送到所有其他客户端的消息,因此这是一个N ^ 2扩展问题。对于相对较少数量的客户端(10个或更少),这对我们来说不构成问题,但是当我们扩展到N = 35或N = 40范围时,我们开始将消息排队比我们在某些处理它们时更快指向工作流程,我们开始遇到严重的延迟问题。我们失败的负载仍然远低于SSB实施的最佳情况,但我确信我们的实施存在缺陷。
相关诊断包括:
如果有其他诊断对任何可能了解我们可以采取哪些措施加速配置的人有帮助,我可以找到它们。
答案 0 :(得分:6)
我们显示的SEND /秒数大约是我们在最负载下看到的RECEIVE /秒的两倍。
我认为这是问题的症结所在。计数器测量语句执行率,而不是消息。这意味着您的RECEIVE在每个结果集上可能只收到一条或两条消息。由于conversation group locking RECEIVE仅限于在每个返回的结果上仅检索一个会话组。即使队列中有数千条消息可用,如果它们都在单独的会话中,RECEIVE将只返回一个消息。正如您所描述的那样,这通常会导致表现不佳和症状不佳。
要实现高吞吐量,您必须以某种方式使消息属于少数对话,以便RECEIVE可以在出现问题的队列上产生重要的结果集。如何实现这一点取决于您的业务工作流程的具体情况。