我有一个简单的 NServiceBus 架构,其中许多从属服务定期向单个主服务报告。
但是,主服务器处理消息的速度不够快——它们在 MSMQ 中堆积而未处理。
我有哪些选项可以加快主节点的消息处理速度?
我有一个简单的 NServiceBus 架构,其中许多从属服务定期向单个主服务报告。
但是,主服务器处理消息的速度不够快——它们在 MSMQ 中堆积而未处理。
我有哪些选项可以加快主节点的消息处理速度?
单个端点的速度受以下因素影响:消息处理线程的数量、底层硬件(主要是磁盘和 CPU 限制)、选择的传输(某些传输比其他传输更快)、事务级别、DTC 的参与与否,底层 saga 或持久性存储(ravendb、sql...)、您选择的数据库或在处理程序中调用的 IO 绑定操作、您选择的 IoC 以及最终您的处理程序代码的业务逻辑/设计。
因此,这些是您必须考虑的选项。您现在可以尝试通过在端点上添加更多线程和功能更强大的硬件(例如 SSD)来调整垂直缩放,或者像 john 提到的那样通过向游戏添加更多机器来进行水平缩放,最终您的分发者选择了 MSMQ。但是根据您的非功能性要求,您还需要考虑底层基础设施。例如,您可以牺牲交易保证以获得更高的性能吗?如果答案是肯定的,那么您可以调整事务级别并禁用 DTC。或者甚至更多地用性能更高的传输交换。您会看到这需要考虑很多,但如果没有关于您的非功能性需求和 SLA 的更多信息,我必须坚持这个通用答案。