這篇文章給大家介紹IM消息系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。一、名詞解釋
創(chuàng)新互聯(lián)建站專注于企業(yè)營(yíng)銷型網(wǎng)站、網(wǎng)站重做改版、皮山網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場(chǎng)景定制、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為皮山等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
單播:服務(wù)器發(fā)送消息給單個(gè)客戶端用戶
多播:服務(wù)器發(fā)送消息給多個(gè)客戶端用戶
組播/廣播:服務(wù)器發(fā)送消息給一組客戶端。有組ID來(lái)標(biāo)識(shí)這組用戶
上行消息:服務(wù)器發(fā)送消息給一組客戶端。有組ID來(lái)標(biāo)識(shí)這組用戶
下行消息:服務(wù)器端給客戶端發(fā)送消息
proxy:部署在邊緣機(jī)房,客戶端通過(guò)智能DNS就近接入
logicService:處理認(rèn)證、心跳、上下線、進(jìn)出群
pushService:單播,廣播,接收到消息后轉(zhuǎn)發(fā)給comet,之后再由comet把消息發(fā)出去
imService:聊天服務(wù)器,處理單聊群聊,離線消息
cosumerService:對(duì)群消息進(jìn)行異步寫(xiě)擴(kuò)散
authService:認(rèn)證服務(wù)
user_id -> conn_id -> server_id
。user_id 是業(yè)務(wù)指定的,唯一標(biāo)識(shí)一個(gè)用戶
conn_id 由存儲(chǔ)進(jìn)程分配,唯一標(biāo)識(shí)該用戶的一條連接
server_id 標(biāo)識(shí)這條連接屬于哪個(gè)接入進(jìn)程
user_id+conn_id -> Connection
Connection 是客戶端連接的封裝,可以向它推送消息
room_id -> ConnectionList
優(yōu)點(diǎn):只寫(xiě)一次,降低了寫(xiě)入次數(shù),特別在群模式下
缺點(diǎn): 同步消息的邏輯會(huì)比較復(fù)雜,接收端每個(gè)會(huì)話都要讀取一次,放大了讀,會(huì)產(chǎn)生很多無(wú)效請(qǐng)求。
優(yōu)點(diǎn):拉取消息的邏輯簡(jiǎn)單
缺點(diǎn): 放大了寫(xiě),單聊要額外寫(xiě)兩次,群里要寫(xiě)N次
10,000 conn per proxy
100 proxy
50 logicService/cacheService/pushService
or 改進(jìn):
10 logicService
5 pushService
kafka cluster
zookeeper cluster
10 cacheService
客戶端發(fā)起的RPC mobile -> proxy -> micro
上線/下線/切換房間/心跳 mobile -> proxy -> logicService -> cacheService
單播 micro -> logicService (-> cacheService) -> pushService -> proxy -> mobile
在線信息查詢
按用戶查在線查房間 /session
批量單播 micro -> logicService ((N-parallel)-> router) -> pushService -> proxy -> mobile
限制:一批用戶總數(shù),不宜過(guò)多
廣播 micro -> logicService -> pushService -> proxy -> mobile
限制:由于pushService定期absorb proxy上的room list, so pushService數(shù)量不可過(guò)多
改進(jìn):logicService和pushService解耦,用kafka連接。由于 pushService 對(duì) CPU 的消耗在 proxy/logicService/cacheService 中最少,只需要非常少的 pushService 實(shí)例就行。
在線信息查詢
查在線總數(shù) /count 由于logicService定期absorb cacheService上的room users,只能是有限的logicService打開(kāi)counter定時(shí)查
按房間查用戶 /room 同 /count
遍歷 /list 調(diào)試用接口,別用于服務(wù)
proxy 無(wú)狀態(tài)服務(wù),重啟、升級(jí)時(shí),客戶端檢測(cè)到連接斷開(kāi),自動(dòng)重連到另一個(gè) proxy
logicService 無(wú)狀態(tài)服務(wù),重啟、升級(jí)時(shí),proxy 會(huì)自動(dòng)尋找下一個(gè) logic
pushService 無(wú)狀態(tài)服務(wù),重啟、升級(jí)時(shí),有其它 pushService對(duì)外提供服務(wù)
cacheService 有狀態(tài)服務(wù),重啟、升級(jí)時(shí),由備 cacheService 頂上;升級(jí)完成,切回主 cacheService
imService 無(wú)狀態(tài)服務(wù),重啟、升級(jí)時(shí),有其它 pushService對(duì)外提供服務(wù)
MySQL:使用mysql master master機(jī)制來(lái)保證
redis: 使用哨兵機(jī)制來(lái)保證可用性
如何防止消息丟失(接收端上報(bào)已接收的最大消息id,異常服務(wù)端重發(fā))
redis主從切換引起自增id不連續(xù)
怎么提高proxy廣播的性能
怎么避免rpc的單條連接成為瓶頸
幾乎沒(méi)有外部依賴,極低的運(yùn)維成本
高性能的代碼實(shí)現(xiàn),節(jié)省服務(wù)器成本
集成認(rèn)證鑒權(quán),也支持 HTTPS
關(guān)于IM消息系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
分享文章:IM消息系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)是怎樣的
文章位置:http://jinyejixie.com/article16/pdcegg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、標(biāo)簽優(yōu)化、企業(yè)建站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)