2013-05-02 53 views
1

我們目前有一個NodeJS程序從套接字收集數據,該套接字從一個其他服務發送實時信息。在2個獨立的數據中心中使用PostgresSQL同步2個NodeJS實例

然後通過上述實例將該數據存儲在數據庫中。這個過程只是監聽流。將對象解析出來,然後用這些信息更新數據庫。

另一項服務可以簡單地從數據庫中讀取數據。這是我們的用戶針對這些信息所進行的調查。

我的問題是:

我將如何確保這一代碼的兩個實例正在運行,並保持在2個獨立的數據中心運行?所以如果一個實例出現故障,另一個實例就開始更新數據庫。當我們修復另一個過程時。

這裏我在想什麼:

  1. 正想着有運行,一個在每個 數據中心2臺PosgresSQL服務器。在主和備用模式下運行。這將使 兩個數據中心的Web服務都能夠從 數據庫中讀取數據,但在主服務器仍然存活時不會更新它。給我 唯一一個我想要的更新。

  2. 但另一個問題是如果NodeJS實例死亡。我 沒有辦法知道?我可以實施心跳系統,但 必須有更好的?

  3. 還考慮運行帶有隊列的Rabbit MQ服務,但這給我一個 單點故障。

一直在考慮這一點,但似乎無法找到一個可行的架構。有什麼建議?

回答

1

基本上這樣或那樣的一種方式,你需要有某種拍攝頭部解決方案中的其他節點(親切地稱爲STONITH)。這可以從某種心跳程序啓動或手動啓動。理想情況下,您有兩個方面:

  1. 拍攝頭部的其他節點。把它從圖片中拿出來。讓它停下來。

  2. 將流量引導到正在運行的節點。

如果我正在嘗試這樣做,我會看幾層。在某些類型的故障中(讓我們稱它們爲致命故障),您的nodejs實例將啓動故障轉移過程,然後退出。如果確認停止響應,則心跳將啓動故障轉移並終止進程。

相關問題