2012-10-22 103 views
9

我正在爲Acani寫一個聊天服務器,並且我有一些關於Scaling node.jswebsockets with load balancer scalability的問題。如何擴展Node.js WebSocket Redis服務器?

  1. 對於負載平衡Node.js究竟意味着什麼?這是否意味着將運行我的服務器應用程序的獨立版本n,每個版本都在單獨的服務器上運行?

  2. 要允許一個客戶端向所有其他客戶廣播消息,我存儲一組在服務器上打開的所有webSocketConnections。但是,如果我有我的服務器應用程序的運行ň獨立版本,每一個單獨的服務器上,然後將我ň套不同的webSocketConnections

  3. 如果對2的答案是肯定的,那麼我該如何存儲通用的webSocketConnections(跨所有服務器)?我認爲我可以這樣做的一種方式是使用Redis Pub/Sub,並且每個webSocketConnection都訂閱Redis上的一個頻道。

  4. 但是,單個Redis服務器不會成爲瓶頸嗎?那麼我將如何擴展Redis?它甚至對Redis的規模意味着什麼?這是否意味着我有m運行在不同服務器上的Redis的獨立版本?這甚至有可能嗎?

  5. 我聽說Redis沒有擴展。爲什麼有人會這樣說。那是什麼意思?如果這是真的,是否有更好的解決方案來發布/訂閱和/或存儲所有廣播消息的列表?

注意:如果你的回答是Acani永遠也不會擴大,即使每個全部七個十億人(和增長)在地球上的是廣播消息,每秒每個人在地球上,那麼請給出一個有效的解釋。

+0

是什麼阿卡尼? – udidu

+0

我正在構建的應用程序 – ma11hew28

回答

6

那麼,對於您的問題,幾個答案:

  1. 負載平衡Node.js的,它的意思,你在想什麼它是什麼,但你並不真的需要單獨的服務器,你可以在同一臺機器上運行多個節點服務器的進程。

  2. 你的節點服務器的每個服務器/進程都有它自己的連接,websockets的默認存儲(例如Socket.IO)是MemoryStore,這意味着所有的連接都將存儲在機器的內存中,需要與RedisStore一起使用才能使用Redis作爲連接存儲。

  3. 的Redis的Pub/Sub是實現這一任務

  4. 你是對你說這裏有什麼好辦法,Redis的並不在這一刻規模和運行很多程序/連接與Redis的可以使redis成爲瓶頸。

  5. Redis沒有擴展,這是正確的,但根據此演示文稿,您可以看到羣集開發在redis中處於最高優先級,而redis確實有一個羣集,但它尚不穩定:(取自http://redis.io/download

哪裏是Redis的集羣?

Redis開發目前專注於Redis 2.6,它將爲您提供對Lua腳本編寫和其他許多改進的支持。這是我們目前的首要任務,但不穩定的分支已經包含了Redis集羣的大部分基本部分。在2.6版本發佈後,我們將集中精力將當前的Redis Cluster alpha轉變爲beta版產品,用戶可以開始認真測試。 很難做出預測,因爲只有當我們認爲Redis Cluster對我們的客戶穩定且有用時,我們纔會將Redis Cluster發佈爲穩定版,但我們希望在2012年夏季有一個合理的測試版,並且在發佈第一個穩定版之前2012年

末見這裏的介紹:http://redis.io/presentation/Redis_Cluster.pdf

1

2)使用Redis的可能不起作用存儲連接:Redis的可存儲字符串格式的數據,如果connecion對象具有循環引用(即,Engine.IO)你將無法連載它們

3)爲每個clie創建一個新的Redis客戶端NT可能不是一個好方法,所以要避免陷阱,如果你能

考慮使用ZMQ節點庫中的過程,通過TCP相互通信(或者IPC,如果他們都聚集在主工人)