在应用程序服务器之间同步服务状态

时间:2012-06-21 10:26:43

标签: .net windows-services scalability synchronize

  1. 假设我们在N个应用服务器上同时运行N个相同的Windows服务(在C#/ .NET中开发)。 “不幸的是”,每个服务都有自己的内存状态(比如,“下午10点我需要执行一项工作”)。

  2. 通过前端Web UI用户可以更改其中一项服务的状态(例如,将作业开始时间从10更改为12)。

  3. 我的问题:在用户更改状态后同步这些服务之间的状态的最佳做法是什么? (最好在.NET平台上)。

    P.S。你可能想知道为什么我们在不同的服务器上运行相同的服务。那是因为管理者认为冗余会阻止单点故障。但是当服务实例拥有自己的内存状态时,它也会引发上述问题,用户可以通过UI更改这些状态​​。

    欢迎任何建议!

1 个答案:

答案 0 :(得分:0)

听起来您正在使用本地服务状态作为主要配置/设置/等。对于每个服务实例。由于您希望它们保持同步,这意味着更新每个操作实例。

我可以想到一些如何解决这个问题的方法,但根据您提供的信息,我会选择使用更新轮询进行集中配置:

  • 配置/设置的中央数据库,例如作业时间。
  • 所有服务,在初始化时,从中央数据库读取以获取设置/配置并将它们应用于状态到服务实例。
  • 管理员界面只需将数据保存到配置/设置数据库。
  • 所有服务定期从DB查询更新并相应地应用。

这是一个简单的分布式结构,它使每个服务负责获取其设置以便操作(拉模型),并且比通知每个服务实例(推送模型)更容易管理。它的另一个好处是允许您以后添加更多服务器和服务实例,而无需更改应用程序代码或修改任何配置信息。