Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 故障转移服务的挑战和最佳实践_Design Patterns_Windows Services_High Availability - Fatal编程技术网

Design patterns 故障转移服务的挑战和最佳实践

Design patterns 故障转移服务的挑战和最佳实践,design-patterns,windows-services,high-availability,Design Patterns,Windows Services,High Availability,有人知道运行Windows服务(在我的例子中,是在.NET中开发的)的最佳实践吗?为了实现高可用性,这些服务将(自动)正确地故障转移到另一台服务器 我可以看到这样做的主要方式是在需要时启动辅助服务器(在这种情况下,需要有东西监视另一台服务器),或者让两个服务一起运行(在这种情况下,它们需要同步它们的工作,以便它们不尝试做相同的事情) 这类问题有没有模式或模型?我知道确切的情况会有很大的不同,但这似乎是一个相当普遍的问题 谢谢 John让两者一直运行可能是最简单的解决方案,但您需要确保负载永远不会

有人知道运行Windows服务(在我的例子中,是在.NET中开发的)的最佳实践吗?为了实现高可用性,这些服务将(自动)正确地故障转移到另一台服务器

我可以看到这样做的主要方式是在需要时启动辅助服务器(在这种情况下,需要有东西监视另一台服务器),或者让两个服务一起运行(在这种情况下,它们需要同步它们的工作,以便它们不尝试做相同的事情)

这类问题有没有模式或模型?我知道确切的情况会有很大的不同,但这似乎是一个相当普遍的问题

谢谢


John

让两者一直运行可能是最简单的解决方案,但您需要确保负载永远不会超过50%,否则当其中一个出现故障时,另一个将过载,可能也会出现故障


要同步,请使用事务数据库。尝试编写自己的同步通常会导致错误。

如果两个服务都能正常工作,那就更好了。 您需要确保它们是无状态的,或者知道如何处理状态问题,并且数据库将在它们之间同步。
在没有单点故障的情况下-您将问题推送到DB,在那里您可以拥有一个2节点的活动群集,并让DB制造商处理同步问题。

我认为处理故障转移的最佳方法是尽可能在网络级别。虚拟IP前置负载平衡或主/故障切换环境是避免为故障切换场景编写代码的好方法

在必须在代码中处理故障转移的情况下:

  • 测试连接/服务呼叫
  • 如果测试失败,发送警报
  • 故障转移到下一个“已注册”的服务端点

  • 有两种基本方法

  • 客户机根据需要或根据另一个服务或配置机制的指示知道不同的端点地址和交换机。(作为一个示例,将执行此操作。)

  • 客户端不知道,您使用标准的网络负载平衡方法,该方法还可以提供故障切换。F5是一种产品。还有很多其他的。它基本上类似于NAT服务,所有请求都通过NLB发送到服务器,并将响应转发回调用方。这些产品监控服务,只使用已启动的服务。您还可以经常使用规则对其进行自定义,使其根据服务器工作负载向服务器分配新请求。功能在某种程度上是内置的


  • 无论采用哪种方式,如果您的服务调用是“无状态”的,那么就容易多了

    以下是对我有效的方法

    从基础架构的角度来看,您需要有两台群集的Windows服务器。(2个标准Windows服务器框就可以了,可以安装和配置群集部件,大多数系统管理员应该知道如何执行此操作。)接下来,在群集的两个节点上安装服务,并将它们都关闭并设置为手动启动。接下来,为您的服务向Windows群集管理器添加群集资源,该资源将管理在任何活动节点上打开和关闭您的服务。让Windows群集管理服务何时运行以及在哪个节点上运行。这是集群服务的简单部分

    从服务的角度来看,您将希望设计您的服务,使其尽可能无状态。这是一个站不住脚的建议,但它实际上取决于你的服务在做什么。在设计中,只需假设在代码生命周期的某个时刻,它将在最坏的时间停止。node2上的服务如何知道在哪里拾取node1停止的位置?这是你需要设计的最难的部分。根据您的服务所做的工作,您可以将最后完成的任务保留在db表或共享数据文件中。您还可以让它从头开始,并在执行之前仔细检查该任务是否已完成


    同样,这将取决于服务需要完成什么。希望这有帮助。

    是的,故障转移群集是正确的方法。您可以编写脚本以在部署期间配置集群组、资源和从属关系。这需要Windows server Enterprise edition,但不是标准版。我在群集方面的想法很弱,因此您可以解释“下一步,为您的服务向Windows群集管理器添加群集资源,该资源将管理在任何活动节点上打开和关闭您的服务”的含义。它是指单独的控制应用程序吗?如果是的话,它将安装在集群内的什么地方?网络与windows服务有什么关系。后台服务可以运行并执行其工作,而不必连接任何客户端。操作系统执行故障转移群集的正确方法。感谢您的回答。对不起,我应该指出我所指的服务更多的是后台处理服务——它不处理传入的网络连接。我很感激所有的建议!