2011-06-19 36 views
3

使用Node.js和Redis創建運行時間監視系統的最佳解決方案是什麼?我可以使用Redis作爲隊列,但不是保存信息的最佳方式,也許MongoDB是?在Node.js中創建運行時間監視器的體系結構

這似乎很簡單,但需要有超過1臺服務器才能保證服務器關閉並使所有內容一起工作並不那麼容易。

回答

1

要監視正常運行時間,您可以在系統上使用Cron作業。每次打電話時,您都會檢查主機是否啓動,以及需要多長時間。並且在該腳本中,您可以將數據保存在Redis中。

要在Node.JS中執行此操作,您需要創建一個腳本來檢查服務器的狀態。只需向服務器發送HTTP請求(或Ping,即w.e)並記錄是否失敗。然後我會把它記錄到Redis。你怎麼做並不重要,因爲腳本(如果你每30秒運行一次cron)在下一次運行之前有[30]秒,所以你不必擔心讓你的查詢到達服務器。你如何保存你的數據是你的,但在這種情況下,即使MySQL的將工作(如果你只是做一個少數網站)

More on Cron @ Wikipedia

0

我可以使用Redis的一個隊列,但不是 保存信息的最好方法, 也許MongoDB是?

您可以(應該)使用Redis作爲您的隊列。這將會非常快。

我也認爲這將是非常好的選擇保存Redis內的信息。不幸的是Redis沒有做任何時間(還)。我認爲您可以/應該使用Beanstalkd將消息放置在需要時遞送的隊列中(每x秒)。我也認爲cron並不是一個好主意,因爲你需要很多它們,當使用隊列時,你可以更快地完成你的工作(在多個進程間共享負載)。

另外我不認爲你需要那麼多的內存來保存內存中的所有內容(使站點更快),因爲數據集將變得相對簡單。即使你不能夠(如果你問我能夠獲得更多的內存),以適應整個數據集在內存中,你可以依靠Redis's virtual memory

這似乎很簡單,但需要到 有超過一臺服務器,以保證 服務器關閉,並讓一切 一起工作也不是那麼容易。

分解/複製是我認爲你應該讀入以解決這個問題(困難)。幸運的是,Redis支持複製(也可以實現分片)。 MongoDB支持開箱即用的分片/複製。說實話,我不認爲你需要分片但和你的數據集是相當簡單,所以Redis的將是更快: