1

我想开发一个连接到一些输入源并处理它读取的消息的应用程序(原则上想想 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 的迹象。

4

1 回答 1

2

当然,自己开发这种高级功能会比商业购买更昂贵。除非您的时间被捐赠给该项目,并且您没有截止日期,否则我会排除您自己写这篇文章的可能性。

要获得高可用性和水平扩展,您需要编写大量代码。测试它是否达到高可用性生产环境所需的水平也需要相当大的努力。即使你做了所有这些,你会相信你自己的代码而不是微软的代码,微软的代码已经积累了无数的运行时间,并且经历了所有软件都需要经过的多个版本才能变得成熟和稳定。

我知道你真的在问开源库,但同样的论点也适用——你是否相信它,它是否经过良好测试,是否经过现场验证,当它死了时你能踢谁的屁股?

更新:嗯,这是几年前的事了,我想我已经软化了我对使用开源来实现这种关键任务基础设施的可行性的立场,尽管我仍然相信商业支持是必不可少的,我仍然会避免写作它自己。

我会在这里为Rabbit MQ插入一个插件,作为高可用性、高度可扩展的消息总线,以帮助其他阅读本文的人。提供商业支持,它基于开放标准 (AMQP)。客户端库可用于几乎任何主要平台。

于 2011-02-06T08:13:12.013 回答