开发者

Architecture to create an uptime monitor in Node.js

What's the best solution for using Node.js and Redis to create an uptime monitoring system? Can I use Redis as a queue but is not the best way to save information, maybe MongoDB is?

I开发者_运维知识库t seems pretty simple but needing to have more than 1 server to guarantee the server is down and make everything work together is not so easy.


To monitor uptime, you would use a Cron job on the system. With each call, you would check to see if the host is up, and how long it would take. And in that script, you would save your data in Redis.

To do this in Node.JS, you would create a script that checks the status of the server. Just making a HTTP request to the server (Or Ping, w.e.) and recording if it fails or not. Then I would just record it to Redis. How you do it does not matter, because the script (if you run the cron every 30 seconds) has [30] seconds before the next run, so you dont have to worry about getting your query to the server. How you save your data is up to you, but in this case even MySQL would work (if you are only doing a small number of sites)

More on Cron @ Wikipedia


Can I use Redis as a queue but is not the best way to save information, maybe MongoDB is?

You can(should) use Redis as your queue. It is going to be extremely fast.

I also think it is going to be very good option to save the information inside Redis. Unfortunately Redis does not do any timing(yet). I think you could/should use Beanstalkd to put messages on the queue that get delivered when needed(every x seconds). I also think cron is not that a very good idea because you would be needing a lot of them and when using a queue you could do your work faster(share load among multiple processes) also.

Also I don't think you need that much memory to save everything in memory(makes site fast) because dataset is going to be relative simple. Even if you aren't able(smart to get more memory if you ask me) to fit entire dataset in memory you can rely on Redis's virtual memory.

It seems pretty simple but needing to have more than 1 server to guarantee the server is down and make everything work together is not so easy.

Sharding/replication is what I think you should read into to solve this problem(hard). Luckily Redis supports replication(sharding can also be achieved). MongoDB supports sharding/replication out of the box. To be honest I don't think you need sharding yet and your dataset is rather simple so Redis is going to be faster:

  • http://redis.io/topics/replication
  • http://www.mongodb.org/display/DOCS/Sharding+Introduction
  • http://www.mongodb.org/display/DOCS/Replication
  • http://ngchi.wordpress.com/2010/08/23/towards-auto-sharding-in-your-node-js-app/
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜