2017-01-08 17 views
0

作爲分佈式系統學習的一部分,我正在構建一個聊天應用程序。目前我的設計是讓每個服務器都知道它們連接的客戶端(這是使用一致算法進行復制的狀態)。是否通過負載均衡器將後端服務器ip:port發送回客戶端是一種很好的做法

有一個負載平衡器,客戶端最初連接到負載平衡器,負載平衡器響應與客戶端應隨後談話的服務器。客戶端的後續命令直接轉到已分配給它的實例。爲了管理該州,我正在考慮使用Raft algorithm作爲共識。

回答

0

不確定爲什麼你會在這裏實現像Raft這樣的共識算法。傳統上RAFT被用來選舉領導者。聽起來不像你需要這個。喜歡的東西:

客戶端>負載均衡器(HAProxy的)>聊天服務器池

HAProxy的(負載均衡),可以對您的服務器池進行健康檢查。如果服務器死亡,它將從池中刪除。當一臺服務器變熱或有壓力時,它可能會失敗,從池中刪除運行狀況檢查(後端服務器應該通過運行狀況檢查發出503 http狀態)當流量停止運行時,服務器將被重新添加回池中。您可以提醒/監測健康聊天服務器池成員的數量。

處理客戶端的錯誤。如果檢測到錯誤,請重新連接到負載平衡器並獲取新服務器。所有的聊天狀態都不應該保存在短暫的聊天服務器實例上,而是像Redis一樣的全局數據存儲。

這使您具有高度的可擴展性。在極端規模下,您可能會遇到Redis的數據存儲問題,但Redis羣集可以緩解這些問題,也可以分散您的聊天記錄。

相關問題