我想开发一个连接到一些输入源并处理它读取的消息的应用程序(原则上想想 BizTalk,但没有那么重)。为了性能和可靠性,我想启用服务的水平扩展,显然是通过利用共享存储(例如 DB)作为消息队列机制。
但是,访问电子邮件或磁盘文件夹等资源的线程无法水平扩展。一次只能运行一个实例,从该输入源读取数据。(进一步的消息处理业务逻辑当然可以驻留在多个节点上)。
这是主动/被动集群的理想选择。一个节点被认为是“主动的”并主动连接到“单实例”资源(例如电子邮件收件箱),而其他节点是“被动的”。如果“主动”节点死亡,那么其他“被动”节点会在它们之间选出一个新的“主动”节点。
现在的问题是:是否有一个 .NET 库可以帮助实现通常的故障转移集群逻辑?(即实现必要的心跳发送/检测,以及“活动”节点选举过程)。因为我不想重新发明轮子。
我可以从已经完成的研究中看到:
- BizTalk Server 本身支持此功能,但我没有使用 BizTalk,因为它太重且太贵(但我想模拟它的此功能)
- Windows Server 支持故障转移群集(在某些高端版本中,如 Windows Server 2008 Enterprise 或 Datacenter),但这又是一个昂贵的解决方案(因为每个节点都需要昂贵的许可证)
- 有很多关于故障转移算法应该如何工作的信息,但我在任何地方都看不到开源实现......(仅在以溢价出售的商业产品中)
我知道它可能被认为是先进和理想的功能,因此为什么它的商业解决方案很昂贵。这很好 - 如果那里没有开源实现或库,我将自己开发一个。我只是不想花费它已经存在的努力。
更新 12/02/2011:找到 SAForum ( http://www.saforum.org/link/linkshow.asp?link_id=214720 ),这是一个发布用于开发服务可用性概念的开放规范的网站。还有 OpenSAF ( http://www.opensaf.org/Welcome-to-OpenSAF%E2%84%A2~151213~14944.htm ),以及 SAForum 上规范的开源 C++ 实现。看起来很全面,但是很重。我将花费大量时间来浏览规范和文档。它还涵盖的不仅仅是故障转移,还为完全可扩展的分布式系统(通知、分布式事件、锁、集群管理等)提供规范……仍然没有任何地方实现 .NET 的迹象。