设计客户端/服务器程序,设计问题(.Net)

时间:2009-04-22 11:24:04

标签: .net client-server

我们正在设计一个客户端/服务器程序,我需要一些设计决策的帮助。

程序的服务器端将在许多Windows服务器上作为服务运行,该服务正在监视这些服务器,如果需要,该服务将通过电子邮件向我们发送报告。

客户端将用于控制和管理服务器上运行的服务,但不会一直运行。

我的问题是我应该在哪里以及如何存储服务的配置。设置(smtp等)将在客户端上定义,但远程服务器上运行的服务(可能有很多)需要使用设置进行更新,并且还要保留这些设置,然后再次更新。

我可以想到两个选项,一个中央Windows共享,其中服务从中读取设置,或者当客户端点击“保存”时,设置被保存到每个服务器上的某个位置。

你会做什么?我应该注意什么?

由于

3 个答案:

答案 0 :(得分:0)

我没有这种服务的经验,但建议可能是将设置存储在他们都有权访问的中央数据库中。 因此,每次创建新服务器时,都会在数据库中创建新的设置条目。

将此问题投入讨论。

答案 1 :(得分:0)

我开发了一个涉及客户端和多个服务器的系统。我的系统要求包括它非常可靠和高可用性(可能不是您的要求)。从这个角度来看,这里有一些想法:

  • 如果将设置存储在中央位置(文件共享或数据库),则会在分布式系统中创建单点故障。解决方法是将设置存储在2个或更多中心位置。但是,您如何确保2个或更多位置同步?)

  • 如果您存储每台服务器的设置,那么当您尝试保存设置时,如果客户端/服务器通信因一台服务器而失败,或者其中一台服务器未运行,该怎么办?现在您遇到服务器不同意设置的情况。那么,再次,您如何确保多个服务器同步?

  • 所以....考虑一下如何可靠地保持服务器同步,以及它们如何检测它们何时不同步。在我的系统中,服务器之间存在主/从方案,具有序列号的心跳,以便从属设备可以不断地确保它们处于同步状态并且没有错过消息。如果主设备发生故障,系统会降级,但仍然可以正常工作,因此主设备不会发生灾难性故障。

答案 2 :(得分:0)

这里有很多事情需要考虑。

显而易见的选择是存储库,无论是注册表,文件,服务器端的数据库。当您的服务加载时,您在集合中获取了所有这些设置。但是,当您在服务器端添加一个服务时,会发生什么情况,以便监控其他一些任务。

现在您遇到了问题,因为如果参数通过一个服务器在数据库中更新,则需要通知其他服务更新并且需要重新初始化。

你可以通过在许多服务之间引入许多IPC机制,即队列,共享内存,管道,套接字来解决这个问题。如果服务没有分发,我建议共享内存;如果不是,则建议在中央服务器或数据库上使用队列;作为更好的选择。但是,服务仍然需要协作一些如何向其他服务提供有关参数更新的提示。