日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

即时通讯系统架构

發(fā)布時(shí)間:2023/12/13 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 即时通讯系统架构 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有過幾款I(lǐng)M系統(tǒng)開發(fā)經(jīng)歷,目前有一款還在線上跑著。準(zhǔn)備簡單地介紹一下大型商業(yè)應(yīng)用的IM系統(tǒng)的架構(gòu)。設(shè)計(jì)這種架構(gòu)比較重要的一點(diǎn)是低耦合,把整個(gè)系統(tǒng)設(shè)計(jì)成多個(gè)相互分離的子系統(tǒng)。我把整個(gè)系統(tǒng)分成下面幾個(gè)部分:(1)狀態(tài)消息系統(tǒng) ? (2)好友系統(tǒng) ? (3)P2P系統(tǒng)??? (4)其他擴(kuò)展業(yè)務(wù)系統(tǒng)

先看狀態(tài)消息系統(tǒng)

?????????????????????

connd?

???????? client接入服務(wù)器,可以支持UDP,也可以支持TCP,一般建議優(yōu)先選擇TCP。connd可以布置多臺(tái),client接入時(shí),可以用簡單的DNS輪詢的方式實(shí)現(xiàn)負(fù)載均衡。connd功能是維護(hù)連接和轉(zhuǎn)發(fā)消息包。

pconnd

????????? proxy connd, 代理接入服務(wù)器,是connd的擴(kuò)展,除了有connd的功能外,支持服務(wù)器的接入,比如web server。

msgd

?????????? 消息處理服務(wù)器,主要功能是用戶狀態(tài)管理,消息轉(zhuǎn)發(fā)(包括合理性驗(yàn)證)以及離線消息保存。

說一個(gè)用戶登錄成功后,對(duì)所有好友的狀態(tài)通知過程。我設(shè)計(jì)的系統(tǒng)中,把用戶狀態(tài)也簡單看成類似文本聊天消息。下面用戶U的上線過程,他有好友F1, F2。

(1) connd收到U上線消息,將消息發(fā)給U所在的msgd。

(2) msgd獲取U的好友,F1, F2;如果F1, F2和U不在同一個(gè)msgd上,msgd將消息通過connd轉(zhuǎn)給F1, F2所在的msgd。

(3) 最終的msgd把上線通知通過connd發(fā)給F1, F2。

msgd的U是通過什么方式獲取最新的好友呢? 這個(gè)問題我要著重描述一下。

用戶的好友數(shù)據(jù)都在另外一個(gè)子系統(tǒng)中:好友子系統(tǒng)。 msgd通過TCP的方式(為什么用TCP呢?)主動(dòng)從好友系統(tǒng)獲取。同時(shí),msgd也緩存一份好友數(shù)據(jù)。msgd獲取用戶好友時(shí),如果cache是最新的,直接從cache取,否則要從好友子系統(tǒng)那邊取。現(xiàn)在重點(diǎn)問題出來了,如何確定用戶的好友是最新的?這類問題我們要根據(jù)不同的業(yè)務(wù)不同的特點(diǎn)靈活采用不同的方法。請(qǐng)看一種高效的處理方式:

(1) 好友子系統(tǒng)為每個(gè)用戶的好友算個(gè)hash值(可以用MD5)。

(2) client獲取好友時(shí),同時(shí)也拿到這個(gè)hash值;發(fā)和好友相關(guān)的消息時(shí),把hash值帶給msgd。

(3) msgd第一次從好友子系統(tǒng)獲取某個(gè)用戶好友時(shí),也獲取這個(gè)hash值;像要轉(zhuǎn)發(fā)狀態(tài)消息,獲取好友時(shí),把client帶過來的hash1和自身的hash2比較一下。。。

像IM這種業(yè)務(wù)特點(diǎn)是,對(duì)好友數(shù)據(jù)的寫很少,讀很多,相對(duì)于讀的消耗,寫基本可以忽略的。用上面的方法,基本上每次兩者的hash值是相等的,直接從cache拿好友數(shù)據(jù)。這種處理方法也可以引入到其他應(yīng)用業(yè)務(wù)中。建議不要每次都粗暴地跨進(jìn)程獲取類似好友數(shù)據(jù)。


好了,上面是對(duì)IM系統(tǒng)狀態(tài)消息子系統(tǒng)的簡單介紹。

另外,像好友子系統(tǒng)就很簡潔,啟幾個(gè)tcp接入server,根據(jù)不同用戶,去不同的好友邏輯服務(wù)器上取好友。好友邏輯服務(wù)器,可以考慮采用LRU淘汰算法(發(fā)現(xiàn)老用這種算法)。如果你很有錢,也可以對(duì)好友數(shù)據(jù)做全cache,不用淘汰。

P2P系統(tǒng)和網(wǎng)上介紹的架構(gòu)都差不多,大家搜一把吧。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的即时通讯系统架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。