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