我想在我的特定應用程序中獲得關於服務「名單」的建議的一些反饋。我有一個服務器應用程序來維護與客戶端的持久套接字連接。我想進一步開發服務器來支持分佈式實例。服務器「A」需要能夠將數據廣播到其他在線服務器實例。所有其他活動實例也一樣。分佈式服務器實例之間的數據廣播
選項我試圖研究:
- 的Redis /動物園管理員/道崎 - 每個服務器實例將其自身註冊到配置服務器,並且它改變了所有連接的服務器將獲得配置更新。然後怎樣呢?
- 維護與每個服務器實例的端到端連接並使用每個傳出數據遍歷列表?
- 一些自定義的UDP組播,但我需要推出自己增加的可靠性。
- 自定義消息代理 - 每個服務器連接並通知它時運行和維護註冊表的服務。保持與每個服務器的連接以接受數據並將其重新廣播給其他服務器。
- 一些可靠的UDP多播傳輸,其中每個服務器實例只是直接廣播,並且沒有維護名單。
這裏是我的顧慮:
- 我很想避免依賴於外部的應用程序,像動物園管理員或道崎,但我顯然會使用他們,如果它的最佳解決方案
- 通過自定義消息代理,我不希望它成爲吞吐量的瓶頸。這意味着我可能還必須能夠運行多個消息代理並在擴展時使用負載均衡器?
- 多播並不需要任何外部過程,如果我設法推出我自己的,但否則我需要也許使用ZMQ,這又使我處於依賴的情況。
我意識到我也在談論郵件傳遞,但它與我一起提供的解決方案攜手並進。 順便說一句,我的服務器是用Go編寫的。任何關於保持可伸縮性的最佳推薦方式的想法?
*的目標編輯*
什麼我真的問的是什麼,是落實在分佈式服務器實例之間廣播數據的最佳方式如下:
- 每個服務器實例維護與其遠程客戶端的持續TCP套接字連接並在它們之間傳遞消息。
- 消息需要能夠廣播到其他正在運行的實例,以便它們可以傳送到相關的客戶端連接。
- 低延遲非常重要,因爲消息傳遞速度很快。
- 序列和可靠性很重要。
*更新問題內容*
如果你有多個服務器需要的pub/sub相互之間/多個端點,什麼是它們之間的通信的推薦模式?一個或多個消息代理將消息重新發布到已發現服務器的名單中?從每個服務器直接可靠的組播? 如何在分佈式系統中連接多個端點,同時保持低延遲,高速和交付可靠?
現在想提一下,Redis可能不可避免地成爲系統的一部分,無論如何作爲數據歷史的持久存儲。所以我認爲它可能是註冊服務和通過其pub/sub功能通知的明顯途徑。 – jdi
你的延遲請求是什麼? – lunixbochs
它是一個高速消息服務器,所以延遲時間要低。消息進入並傳播給頻道訂閱者,但最終使用持久套接字服務器時,我會遇到兩個文件描述符限制,並最終達到客戶端端口範圍限制。因此,我將不得不運行多個實例,並仍允許消息跳入其他實例中的隊列,以便分發給可能在這些實例中訂閱相同頻道的任何人。 – jdi