2010-09-07 18 views
4

我需要建立一个像微软的http://login.live.com身份服务器。故障转移scenarious的服务总线与NServiceBus或MassTransit

为了处理故障转移,我将有多个Web服务器节点。该计划是所有数据库写入操作都是通过向数据库服务器发送消息来完成的。数据库将被镜像或复制。这个想法是数据库订阅写入操作,但其他节点也订阅。这样,其他节点不需要从数据库中读取数据,并可以更新其缓存。

我刚开始学习服务总线架构,什么不是很清楚,我是如何处理故障切换方案的服务总线。

问:

  1. 如果数据库服务器不可用时,将发布的消息会怎么样呢?
  2. 它们会被存储在什么地方?
  3. 我是否需要额外的机器或群集来处理服务总线的故障转移?
  4. 我读过SQL Server可以用作消息存储,但是我可以使用持久的MSMQ吗?我排队消息,以便能够将它们写入数据库,那么为什么我会先将它们存储到数据库中,然后再将它们写入并再次写入它们?或者,我得到这个错误,数据库只用于订阅列表,而不是消息?

回答

8
  1. 这将取决于它是如何安装的,但在MassTransit您可以将认购有效,因此该消息仍然会传递到队列为DB。当数据库再次处于活动状态时,您可以读取队列中的消息。

  2. 连接到服务总线,在MassTransit每个服务,具有用于本身的活动队列。消息将被存储在那里。

  3. 我认为这是一个“这取决于” ...... MassTransit有其他MQS比MSMQ支持,但各地的MSMQ是真正建立。我们没有经历过对MSMQ的故障转移等事物的大力支持。然而,如果订阅服务(即公共汽车)发生故障,那么所有内容都将继续正常运行 - 服务已知道与谁交谈。只有当消费者发生变化(订阅或取消订阅)才会成为问题。对我而言,这是一个几乎从不发生的事件。

  4. 随着MassTransit,我们使用DB存储订阅状态,而是存储在MSMQ的所有消息。

如果您想在这些反应之一的详细信息或有关于MT其他问题,您可以加入我们的邮件列表:http://groups.google.com/group/masstransit-discuss

此外,乌迪或他的社区可能会很乐意回答NServiceBus名单上的问题,以及:http://tech.groups.yahoo.com/group/nservicebus/

8

WHE实现这种架构,你应该看看应用CQRS的原则 - 查询(这是用户/密码组合有效)不应该通过总线完成;命令(改变密码,忘记密码)通过总线发送,不作为事件发布。虽然在内部,您可能会使用事件来保持命令和查询方同步,但这不涉及客户端。

查询可以使用简单的ado.net对数据库的复制读取 - 从属 - 在CQRS中称为持久化视图模型。如果你喜欢,你也可以在它前面放一些简单的WCF。

当使用MSMQ时,所有消息都通过存储转发来传递。这意味着它们在被传送到服务器之前首先存储在客户端上,因此如果服务器关闭,则消息将停留在客户端等待中。对于容错,您希望消息可以恢复(写入磁盘) - 这是NServiceBus中的默认值,但不是标准MSMQ(不知道MassTransit)的默认值。你不需要这个数据库。

在NServiceBus中,总线没有安装在单独的机器上,因此您不需要独立于系统其余部分处理其可用性。只有当您考虑将您的命令处理扩展到更多节点时,您可能会考虑使用NServiceBus中的基于消息的负载均衡器(称为分发服务器),为了获得高可用性,应该将其安装在群集或容错硬件上。