我需要像 Microsoft 的 http://login.live.com 一样构建身份服务器.
为了处理故障转移,我将有多个 Web 服务器节点。计划是通过向数据库服务器发送消息来完成所有数据库写入操作。数据库将被镜像或复制。这个想法是数据库订阅写操作,但其他节点也订阅。这样其他节点不需要从数据库读取并且可以更新它们的缓存。
我刚刚开始学习服务总线架构,我不清楚的是如何处理服务总线的故障转移场景。
问题:
最佳答案
在实现这种架构时,您应该考虑应用 CQRS 的原则 - 不应通过总线完成查询(此用户/密码组合是否有效);命令(更改密码、忘记密码)通过总线发送,而不是作为事件发布。虽然在内部您可能会使用事件来保持命令和查询端同步,但这不涉及客户端。
可以使用简单的 ado.net 对数据库的复制读取从站进行查询 - 这在 CQRS 中称为持久 View 模型。如果你愿意,你也可以在它前面放一些简单的 WCF。
使用 MSMQ 时,所有消息都通过存储转发传递。这意味着它们在传递到服务器之前首先存储在客户端上,因此如果服务器关闭,消息会在客户端上等待。对于容错,您希望您的消息是可恢复的(写入磁盘) - 这是 NServiceBus 中的默认值,但不是标准 MSMQ 的默认值(不知道 MassTransit)。为此,您不需要数据库。
在 NServiceBus 中,总线未安装在单独的机器上,因此您无需独立于系统的其余部分处理其可用性。只有当您考虑将我们的命令处理扩展到更多节点时,您才可能考虑使用 NServiceBus 中基于消息的负载均衡器(称为分发服务器),为了高可用性,应将其安装在集群或容错硬件上。
关于nservicebus - 具有 NServiceBus 或 MassTransit 的服务总线的故障转移方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661970/