我有一个nodejs脚本 - 让我们调用它" process1"在server1上,同一个脚本在server2上运行 - " process2" (只有flag = false)。
Process1将执行操作并将在"运行"开始时的状态。 process2将运行但是在" block"在其中编制国旗的国家。
我想要实现的是为此过程实现故障转移/回退。如果process1变为down,则process2上的标志将发生变化,process2将接管来自process1的所有任务(反之亦然,当process1回来时 - 后备)。
这样做的最佳方法是什么?那些之间的TCP连接?
注意:即使它没有太多相关性,但我想提一下,这些流程将在内部工作,与第三台服务器建立tcp连接并解析我们从该服务器获取的数据。这两个进程都将在两台服务器上运行,但当时只有 ONE 进程可以提供服务 - 运行标志为true(而不是两者都运行)
更新:根据下面的讨论以及内部研究/测试和监控解决方案,使用反向代理将为您节省大量时间。基于2台服务器的编程故障转移仅涵盖与两台机器上使用的内部流程相关的70%的案例 - 但由于问题导致的问题,您将无法检测到其他30%的问题。网络(特别是如果你有很多流向DATA RECEIVER的话)。
答案 0 :(得分:2)
这更像是一个基础设施问题,而不是一个节点问题,几乎所有服务器都可以应用相同的情况。
您基本上需要的是一些监控Server 1
的服务,并确定它是“健康”还是“活着”,如果是,继续将流量引导到它。如果服务确定服务器不再处于稳定状态(例如,响应时间太长,则返回错误),它会将任何传入流量重定向到Server 2
。如果它很高兴Server 1
已恢复正常运行状态,它会将流量重定向回到它上面。
在大多数情况下,此方案中的“服务”是reverse proxy,如Nginx或CloudFlare。在您的情况下,此服务器将充当Data Reciever
与您的网络(Server 1
/ Server 2
)之间的缓冲区,并将传入流量路由到相关服务器。
答案 1 :(得分:1)
这看起来像是反向代理的经典用例。使用经过良好测试的服务器(如nginx)应该提供足够的可靠性,代理不会失败(除了硬件故障),你可以把它放在你想要的任何簇大小的前面。如果适用并配置正确,您甚至可以获得负载平衡的好处。
或者也倾向于负载平衡解决方案,您可以将前端服务器推送请求放入队列(例如ZMQ),然后从队列推送到应用服务器或拥有您的应用服务器( s)独立地从队列中拉出任务。
在这两种解决方案中,如果要求不将2个同步结果“推送”到您的数据接收方,您可以使用所有应用服务器推送的出站队列。