代码之家  ›  专栏  ›  技术社区  ›  Scott

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

  •  2
  • Scott  · 技术社区  · 16 年前

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

    程序的服务器端将作为一个服务在许多Windows服务器上运行,该服务正在监视这些服务器,当需要时,该服务将向我们发送一份报告。

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

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

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

    你会怎么做?我应该知道什么?

    谢谢

    3 回复  |  直到 16 年前
        1
  •  0
  •   The real napster    16 年前

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

    只是把这个扔进讨论中。

        2
  •  0
  •   Corey Trager    16 年前

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

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

    • 如果您将设置存储在每台服务器上,那么当您试图保存设置时,如果客户机/服务器与一台服务器的通信失败,或者如果其中一台服务器没有启动,该怎么办?现在您遇到了服务器不同意设置的情况。那么,您如何确保多个服务器同步呢?

    • 所以…考虑如何可靠地保持服务器同步,以及如何在服务器不同步时进行检测。在我的系统中,服务器之间有一个主/从方案,带有序列号的心跳,这样从服务器就可以不断地保证它们是同步的,并且不会错过任何消息。如果主控系统关闭,系统会降级,但仍然工作,因此主控系统不是灾难性故障的单一点。

        3
  •  0
  •   S M Kamran    16 年前

    这里有很多事情要考虑。

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

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

    您可以通过引入许多IPC机制来实现这一点,即队列、共享内存、管道、许多服务之间的套接字。如果服务不是分布式的,我建议共享内存;如果服务不是分布式的,我建议在中央服务器或数据库上排队;作为更好的选择。但是,服务仍然需要协作一些如何向其他服务提供关于参数更新的提示。