NServiceBus分发服务器-如何拆分应用程序
NServiceBus分发服务器-如何拆分应用程序,nservicebus,nservicebus-distributor,Nservicebus,Nservicebus Distributor,我们有一个服务,它从数据库中选择som id,然后用一些业务逻辑顺序处理它们。我们希望扩展处理并并行执行,而不创建大量内部线程
我的问题是:
如果我想利用分销商扩大规模,我应该如何做
解决方案1:
该服务分为2部分:
原始服务被修改为仅从数据库中选择ID,然后将其发送给工作人员。这将是分发服务器(运行distributor WithNowWorkerOnitSendPoint)
一个新的服务,它将保持业务逻辑,并作为一个工作者,处理每个输入id。如果我想要更多的工作者,我只需多次启动相同的过程
我们有一个服务,它从数据库中选择som id,然后用一些业务逻辑顺序处理它们。我们希望扩展处理并并行执行,而不创建大量内部线程
我的问题是:
如果我想利用分销商扩大规模,我应该如何做
解决方案1:
该服务分为2部分:
原始服务被修改为仅从数据库中选择ID,然后将其发送给工作人员。这将是分发服务器(运行distributor WithNowWorkerOnitSendPoint)
一个新的服务,它将保持业务逻辑,并作为一个工作者,处理每个输入id。如果我想要更多的工作者,我只需多次启动相同的过程
解决方案2:
该服务分为3部分:
原始服务被修改为仅从数据库中选择ID,然后将其发送到分发服务器
一个新的服务,分发服务器(RunDistributorWithNowWorkerOnitSendPoint),它只处理工作人员的负载平衡
一个新的服务,worker(s),它将保存业务逻辑并处理每个输入id
解决方案3:
该服务分为2部分:
原始服务被修改为仅从数据库中选择ID,然后发送它们。作为发送者运行
一种新的服务,它将保持业务逻辑,并作为一个工人和一个分销商,处理每个输入id或分发id李>
解决方案1对我来说很有意义,但使用它意味着分销商将承担2项责任:
选择ID李>
将ID分发给工人
但我不确定这是否可能,甚至可能是反模式,当我查看NSB文档中的ScaleOut示例时
在再次阅读文档和ScaleOut示例之后,我认为我应该选择解决方案3,但我还不太确定
我试图通过扩展NSB分发服务器来解决管道问题,我更愿意自己托管,而不是使用NServiceBus.Host.exe,但这不是严格的要求
编辑:
我最终使用了解决方案3,因为它的优点是(在我看来)配置队列的任务比解决方案2中的任务要小,如果您使用默认队列命名的话
亲切问候我们在过去的版本中使用解决方案2完成了这项工作。原因是,我们让分销商站在旁边,高度可用。在未来,我们很可能会让分销商做一些工作,否则它就会相对闲置。这个解决方案对我们很有帮助。事实上,我今天刚刚实施了解决方案3。在我看来,如果使用默认队列命名,那么配置队列的任务比解决方案2中的任务要小。