我觉得这个问题以前会被问到,但我找不到。如果这是重复,请原谅我。
我正在 Heroku 中托管的 Node.js 上构建服务,并使用 Compose 托管的 MongoDB。在重负载下,延迟最有可能来自数据库,因为在服务层中没有什么非常占用 CPU 的。因此,当 MongoDB 超载时,我想立即返回 HTTP 503 而不是等待超时。
我也在使用 REDIS,REDIS 有一个功能,您可以在其中检查排队命令的数量(redisClient.command_queue.length)。使用此功能,我可以立即知道 REDIS 是否已备份。MongoDB有类似的东西吗?
到目前为止,我发现的最佳选择是通过此命令轮询服务器的状态,但是(1)我希望客户端有一些东西,因为轮询间隔内可能会出现导致问题的尖峰,以及(2)我我实际上不确定我想要对状态响应的哪一部分采取行动。第二部分让我想到了一个后续问题......
我不完全理解 MondoDB 客户端如何与服务器一起工作。每个客户端实例(在我的情况下,每个进程)是否共享一个连接?查询和写入是在本地排队还是在服务器上排队?或者,是否为每个查询/写入打开一个连接,直到数据库的连接池耗尽?如果是后者,似乎我可能想关注打开的连接。除了轮询状态之外,MongoDB 服务器是否会在其他时间返回此类信息?
谢谢!