【问题标题】:Windows Services -- High availability scenarios and design approachWindows 服务——高可用性场景和设计方法
【发布时间】:2011-02-05 05:51:37
【问题描述】:

假设我有一个独立的 Windows 服务在 Windows 服务器机器上运行。如何确保它是高可用的?

1)。您可以提出哪些设计级别指南?

2)。如何让它像primary/secondary一样高可用,例如目前市场上可用的集群解决方案

3)。在任何故障转移场景中如何处理横切关注点

如果还有其他你能想到的,请在此处添加..

注意: 该问题仅与windows和windows服务有关,请尽量遵守此规则:)

【问题讨论】:

  • 你能分享更多关于你的服务在做什么的信息吗? HA 策略可能会因您尝试执行的操作而异。
  • 贾斯汀,我对非常琐碎的 Windows 服务感兴趣,比如监听套接字或轮询/将数据写入某些数据库/平面文件等,

标签: windows-services high-availability design-decisions failovercluster


【解决方案1】:

如果你分解你试图解决的问题,我想你自己可能会想出一些答案。正如贾斯汀在评论中提到的,没有一个答案。这完全取决于您的服务做什么以及客户如何使用它。您也没有指定有关客户端-服务器交互性的任何详细信息。 HTTP? TCP? UDP?其他?

这里有一些事情可以帮助你开始。

1) 如果服务或服务器宕机了怎么办?

  • 如何在不同的服务器上运行多个服务实例?

2) 好的,但是现在客户端如何知道多个服务?

  • 您可以将列表硬编码到每个客户端中(不推荐)
  • 您可以使用 DNS 循环在所有请求之间退回请求。
  • 您可以使用负载平衡设备。
  • 您可以拥有一个了解所有其他服务的单独服务,并可以将客户端引导至可用服务。

3) 如果一项服务出现故障怎么办?

  • 客户端应用程序是否知道如果它们连接的服务出现故障该怎么办?如果不是,则需要更新它们以处理这种情况。

这应该让您了解如何开始使用高可用性的基本概念。如果您提供有关您的架构的具体细节,您可能会得到更好的响应。

【讨论】:

    【解决方案2】:

    如果服务没有为客户端连接公开任何接口,您可以:

    • 广播或公开“我还活着”的消息或向数据库/注册表/tcp/任何你还活着的东西发出信号

    • 有第二个服务(监视器)检查这些“我还活着”信号,并尝试重新启动服务以防它关闭

    但是如果你有一个客户端通过 namedpipes/tcp/etc 连接到这个服务,客户端必须检查运行在数据库中的服务的机器的地址,或者有一些更高级的东西,比如智能开关来重定向流量.

    【讨论】:

      【解决方案3】:

      为了使服务至少保持运行,您可以安排 Windows 服务管理器在服务崩溃时自动重新启动服务(请参阅服务属性上的“恢复”选项卡。)此处提供了更多详细信息,包括用于设置这些的批处理脚本属性 - Restart a windows service if it crashes

      高可用性不仅仅是保持服务不受外部影响 - 构建服务本身时需要牢记高可用性(即始终使用良好的编程实践、适当的数据结构、资源获取和释放配对),以及整个压力测试,以确保它会保持在预期的负载下。

      对于幂等命令,可以通过重新调用命令一定次数来容忍间歇性故障(例如锁定资源)。这允许服务保护客户端免受故障(在一定程度上)。客户端也应该被编码以预测故障。客户端可以通过多种方式处理服务故障 - 记录、提示用户、重试 X 次、记录致命错误和退出都是可能的处理程序 - 哪种方式适合您取决于您​​的要求。如果服务有“会话状态”,当服务严重失败(即进程重新启动)时,客户端应该意识到并处理这种情况,因为这通常意味着当前会话状态已经丢失。

      单台机器容易受到硬件故障的影响,因此如果您要使用单台机器,请确保它具有冗余组件。 HDD 特别容易发生故障,因此至少要有镜像驱动器或 RAID 阵列。 PSU 是下一个弱点,因此冗余 PSU 和 UPS 也是值得的。

      关于集群,Windows 支持服务集群,并使用网络名称而不是单个计算机名称来管理服务。这允许您的客户端连接到任何运行该服务的机器,而不是硬编码的名称。但除非您采取额外措施,否则这就是资源故障转移——将请求从一个服务实例定向到另一个实例。会话状态通常会丢失。如果您的服务正在写入数据库,那么它也应该被集群化,以确保可靠性并确保整个集群都可以使用更改,而不仅仅是本地节点。

      这只是冰山一角,但我希望它能给你一些想法,让你开始进一步的研究。

      Microsoft Clustering Service (MSCS)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-10
        • 1970-01-01
        • 2014-11-20
        • 2019-05-24
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多