4

使用 MSMQ 之类的东西如何有助于提高可伸缩性和可靠性?在一台 Web 服务器到一台数据库服务器的场景中,它是否有帮助?

任何评论或链接将不胜感激。谢谢

编辑:Web 服务器将运行 WCF,公开 SOAP 样式的 Web 方法。展望未来,也有可能存在多个 Web 服务器。

4

3 回答 3

2

队列(尤其是容错和持久队列)允许组件之间的通信,并最终允许队列写入器与读取器异步。这意味着读取器和写入器可以根据队列利用率进行扩展。

考虑为 Web 请求提供服务的简单示例。如果一个繁重的操作被推送到队列上,另一组组件可以读取队列并处理请求,而不会影响写入器,从而允许 HTTP 侦听器服务更多请求,因为它没有被占用。随着队列中项目数量的增加,可以让更多的阅读器在线处理它们。

就可靠性而言,如果队列可靠,则组件之间的消息不会丢失,因此通信本质上更可靠。读者和作者可能会上下波动,但只要消息是安全的,那么您就有了一个比消息可能丢失的系统更可靠的基础。

实际上,您正在创建一个运行时耦合较低的系统,因此某一点的故障不一定会传播到整个系统。允许更成功地采用容错策略。

于 2010-10-06T08:14:25.710 回答
1

与数据库通信的 Web 服务器看起来不像 MSMQ 可以从中受益的场景。

但是,如果您有 Web 服务器、域服务器和数据库服务器,那就完全不同了。在这种情况下,Web 服务器可以通过 MSMQ 与域服务器通信(保证交付并以事务方式 - 可靠性)。当您引入额外的 Web 服务器时,架构不会发生任何变化,因此实现了可扩展性。

总是很高兴阅读有关 CQRS 的信息。

于 2010-10-06T08:15:30.373 回答
0

是的,如果您需要异步处理并合理保证放置在队列中的任务将被执行,那么在 1 个 Web/数据库服务器场景中是有价值的。它不提供高可用性(运行 MSMQ 的服务器可能会失败,等等)。

如果您需要更多信息,请提供特定于实现的详细信息。

于 2010-10-06T08:14:12.193 回答