C#应用的聚类方法

时间:2010-12-28 23:10:49

标签: c# windows-services

此时我正面临一个设计问题。我需要使用C#windows服务模拟集群环境。

我的Windows服务每天同时调用(使用quartz for .net)一个可以负责工作的Web服务。问题是这个环境是多余的,以保证可用性,但没有自动故障转移支持,我的意思是当一个站点关闭时,用户只是去另一个(我知道这不好,但实际上这是我们的备份环境,所以我们不介意这样做)。

两个环境都具有以下配置:Web服务器 - 应用服务器 - 数据库服务器,数据库服务器1通过数据库服务器2进行合并复制。

问题是,我需要保证只有一个Windows服务(调度程序)在配置的时间启动,但是当其中一个不可用时,另一个必须准备好调用Web服务。

我将非常感谢您提供给我的任何线索,以便更好地解决这个问题。

干杯。

2 个答案:

答案 0 :(得分:1)

通常,这是使用SQL Server群集处理的。这并不容易,但这是你最好的选择。使用时,您无需对.NET 2.0或更高版本的应用程序进行任何更改。 (早期版本的.NET需要您手动刷新连接池。)

您的第二个选择是创建一个充当交通警察的小型服务。此服务将监视两个数据库并确定在任何给定时间使用哪个连接字符串。应用程序必须定期ping此服务以了解要使用的连接。

答案 1 :(得分:1)

我使用持久队列看到了类似的东西。

  1. 服务声明队列中第一个无人认领的项目(如果有)
  2. 服务处理声明的项目
  3. 服务完成项目(将其从队列中删除)
  4. 队列可以由SQL Server中的表表示。或者,您可以使用Enterprise Service Bus或仅使用MSMQ之类的消息队列。

    两个服务可以同时运行,但只有一个会处理给定的请求。