我们目前有一个 NodeJS 程序从套接字收集数据,该套接字从我们的其他服务中获取实时信息。
此数据然后由上述实例存储在数据库中。这个过程只是监听流。解析出对象,然后用信息更新数据库。
然后另一个服务可以简单地从数据库中读取数据。这是我们的用户轮询的信息。
我的问题是:
我如何确保此代码的 2 个实例正在运行并在 2 个独立的数据中心中保持运行?因此,如果一个实例出现故障,另一个实例就会开始更新数据库。当我们修复另一个过程时。
这是我的想法:
正在考虑运行 2 个 PosgresSQL 服务器,每个服务器一个 数据中心。在主模式和备用模式下运行。这将启用 两个数据中心的网络服务从 数据库,但在 master 还活着的时候不更新它。给我 我想要的唯一更新。
但另一个问题是如果 NodeJS 实例挂掉了怎么办。然后我 有没有办法知道?我可以实现心跳系统但是 必须有更好的吗?
还考虑过使用队列运行 Rabbit MQ 服务,但这给了我一个 单点故障。
考虑了一段时间,但似乎找不到可行的架构。有什么建议吗?
最佳答案
基本上,无论哪种方式,您都需要某种解决方案中的 Shoot The Other Node In the Head(亲切地称为 STONITH)。这可以从某种心跳程序或手动启动。理想情况下,您有两个方面:
射击另一个 Node 的头部。把它从照片中拿出来。让它停止。
将流量定向到正在运行的 Node 。
如果我尝试这样做,我会查看多个图层。在某些类型的故障中(我们称它们为致命故障),您的 nodejs 实例将启动故障转移过程,然后退出。如果验证停止响应,heartbeat 将启动故障转移并终止进程。
关于node.js - 使用 PostgreSQL 在 2 个独立的数据中心同步 2 个 NodeJS 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16335545/