使用 Node.js 和 Redis 创建正常运行时间监控系统的最佳解决方案是什么?我可以使用 Redis 作为队列但不是保存信息的最佳方式,也许 MongoDB 是?
这看起来很简单,但需要拥有超过 1 台服务器来保证服务器已关闭并使一切协同工作并不是那么容易。
要监控正常运行时间,您将在系统上使用 Cron 作业。每次通话时,您都会检查主机是否已启动,以及需要多长时间。在该脚本中,您可以将数据保存在 Redis 中。
要在 Node.JS 中执行此操作,您将创建一个检查服务器状态的脚本。只需向服务器(或 Ping,我们)发出 HTTP 请求并记录它是否失败。然后我就把它记录到 Redis 上。你怎么做并不重要,因为脚本(如果你每 30 秒运行一次 cron)在下一次运行之前有 [30] 秒,所以你不必担心将查询发送到服务器。如何保存数据取决于您,但在这种情况下,即使 MySQL 也可以工作(如果您只做少量站点)
我可以使用 Redis 作为队列但不是保存信息的最佳方式,也许 MongoDB 是?
您可以(应该)使用 Redis 作为队列。这将是非常快的。
我也认为将信息保存在 Redis 中将是一个很好的选择。不幸的是,Redis 还没有做任何计时。我认为您可以/应该使用Beanstalkd将消息放在需要时(每 x 秒)传递的队列中。我还认为 cron 不是一个好主意,因为您需要很多它们,并且在使用队列时,您可以更快地完成工作(在多个进程之间共享负载)。
另外,我认为您不需要那么多内存来将所有内容保存在内存中(使站点快速),因为数据集将相对简单。即使您无法(如果您问我,聪明地获得更多内存)将整个数据集放入内存中,您也可以依赖Redis 的虚拟内存。
这看起来很简单,但需要拥有超过 1 台服务器来保证服务器已关闭并使一切协同工作并不是那么容易。
分片/复制是我认为你应该阅读以解决这个问题(困难)。幸运的是 Redis 支持复制(也可以实现分片)。MongoDB 支持开箱即用的分片/复制。老实说,我认为您还不需要分片,而且您的数据集相当简单,因此 Redis 会更快: