????Centrifugo 服務(wù)器支持多節(jié)點(diǎn)部署甚颂,并支持對(duì)客戶端請(qǐng)求的負(fù)載均衡瓮恭。本文中宇色,我們將啟動(dòng)三個(gè) Centrifugo 服務(wù)節(jié)點(diǎn)來(lái)進(jìn)行演示无畔,這些節(jié)點(diǎn)通過(guò) Redis 互相連接宅粥。為了達(dá)到這個(gè)目的参袱,我們將使用前面章節(jié)中講到的 Redis engine
。
????首先,我們需要有一個(gè)處在運(yùn)行狀態(tài)的 Redis 服務(wù)器抹蚀。然后剿牺,我們可以一次啟動(dòng)三個(gè) Cetrifugofu 服務(wù)節(jié)點(diǎn):
????打開(kāi)命令行窗口,啟動(dòng)第一個(gè)節(jié)點(diǎn):
centrifugo --config=config.json --port=8000 --engine=redis --redis_host=127.0.0.1 --redis_port=6379
????如果 Redis 和 Centrifugo 運(yùn)行在同一臺(tái)機(jī)器环壤,并且使用了默認(rèn)的端口號(hào)晒来,上面命令中的 redis_host
與 redis_port
選項(xiàng)可以省略。
????然后打開(kāi)一個(gè)新的命令行窗口郑现,啟動(dòng)第二個(gè)節(jié)點(diǎn):
centrifugo --config=config.json --port=8001 --engine=redis --redis_host=127.0.0.1 --redis_port=6379
????此命令中湃崩,我們指定了一個(gè)新的端口 8001
,以防與節(jié)點(diǎn)一出現(xiàn)端口沖突接箫。如果你的兩個(gè)節(jié)點(diǎn)不在一臺(tái)機(jī)器上攒读,則不存在該問(wèn)題。
????接下來(lái)再次開(kāi)啟一個(gè)新的命令行窗口辛友,啟動(dòng)第三個(gè)節(jié)點(diǎn):
centrifugo --config=config.json --port=8002 --engine=redis --redis_host=127.0.0.1 --redis_port=6379
????現(xiàn)在你已經(jīng)擁有了三個(gè) Centrifugo 實(shí)例薄扁,分別運(yùn)行在 8000
、8001
废累、8002
端口邓梅,客戶端可以選擇連接任何一個(gè)實(shí)例。同樣邑滨,你也可以發(fā)送 API 請(qǐng)求到任何一個(gè)節(jié)點(diǎn)日缨。這三個(gè)節(jié)點(diǎn)通過(guò) Redis 的 PUB/SUB 機(jī)制實(shí)現(xiàn)消息共享。
????多個(gè)節(jié)點(diǎn)之間的負(fù)載均衡通過(guò) Nginx 實(shí)現(xiàn)掖看。要非常注意的一定是匣距,如果你的客戶端使用了 SockJS 連接到 Centrifugo 節(jié)點(diǎn),那么接下來(lái)的該客戶端的請(qǐng)求只能路由到同一節(jié)點(diǎn)乙各,因?yàn)樵摴?jié)點(diǎn)保存了客戶端的會(huì)話信息墨礁。而使用 websocket 則不存在該問(wèn)題。
Redis 分片
????從 V1.6.0 開(kāi)始 Centrifugo 內(nèi)置了對(duì) Redis 分片的支持耳峦。
????該功能防止 Redis 在大型的 Centrifugo 應(yīng)用中成為性能瓶頸。Redis 是單線程服務(wù)器焕毫,它速度非扯卓溃快,但是當(dāng)你的 Redis CPU 使用率接近 100% 的時(shí)候邑飒,分片可以幫助你的應(yīng)用程序?qū)崿F(xiàn)擴(kuò)展循签。
????目前,Centrifugo 支持基于逗號(hào)的簡(jiǎn)單方法來(lái)配置 Redis 分片疙咸。
示例一(基于本機(jī)運(yùn)行的兩個(gè) Redis 分片來(lái)啟動(dòng) Centrifugo):
centrifugo --config=config.json --engine=redis --redis_port=6379,6380
示例二(基于運(yùn)行在不同主機(jī)上的 Reids 實(shí)例來(lái)啟動(dòng) Centrifugo):
centrifugo --config=config.json --engine=redis --redis_host=192.168.1.34,192.168.1.35
????啟用分片后县匠,Centrifugo 將使用一致性哈希算法在已配置的 Redis 實(shí)例上傳播頻道和歷史/狀態(tài)信息。