1

我们目前有一个 NodeJS 程序从一个套接字收集数据,该套接字从我们的其他服务中获取实时信息。

然后,该数据由上述实例存储在数据库中。这个过程只是监听流。解析出对象,然后使用信息更新数据库。

然后另一个服务可以简单地从数据库中读取数据。这是我们的用户调查信息的内容。

我的问题是:

我将如何确保此代码的 2 个实例正在运行并在 2 个单独的数据中心中保持运行?因此,如果一个实例出现故障,另一个实例只会开始更新数据库。当我们修复另一个过程时。

这就是我的想法:

  1. 正在考虑运行 2 台 PosgresSQL 服务器,每个数据中心一台。以主备模式运行。这将使两个数据中心中的 Web 服务能够从数据库中读取数据,但不会在主服务器还活着时对其进行更新。给我唯一一个我想要的更新。

  2. 但另一个问题是如果 NodeJS 实例死了怎么办。那我就没有办法知道了?我可以实现心跳系统,但必须有更好的吗?

  3. 也考虑过运行带有队列的 Rabbit MQ 服务,但这给了我一个单点故障。

一直在考虑这个问题,但似乎找不到可行的架构。有什么建议吗?

4

1 回答 1

1

基本上,您需要以一种或另一种方式在头部解决方案中拍摄其他节点(亲切地称为 STONITH)。这可以从某种心跳程序或手动启动。理想情况下,您有两个方面:

  1. 射击头部的另一个节点。把它从照片里拿出来。让它停下来。

  2. 将流量定向到正在运行的节点。

如果我想这样做,我会看几层。在某些类型的故障(我们称它们为致命故障)中,您的 nodejs 实例将启动故障转移过程然后退出。如果验证停止响应,heartbeat 将启动故障转移并终止进程。

于 2013-06-05T08:42:56.763 回答