亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

IM消息系統的設計和實現是怎樣的

發布時間:2021-11-15 15:57:23 來源:億速云 閱讀:300 作者:柒染 欄目:大數據

這篇文章給大家介紹IM消息系統的設計和實現是怎樣的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。一、名詞解釋

  • 單播:服務器發送消息給單個客戶端用戶

  • 多播:服務器發送消息給多個客戶端用戶

  • 組播/廣播:服務器發送消息給一組客戶端。有組ID來標識這組用戶

  • 上行消息:服務器發送消息給一組客戶端。有組ID來標識這組用戶

  • 下行消息:服務器端給客戶端發送消息

二、系統架構


 

 
IM消息系統的設計和實現是怎樣的  

 

 
  • proxy:部署在邊緣機房,客戶端通過智能dns就近接入

  • logicService:處理認證、心跳、上下線、進出群

  • pushService:單播,廣播,接收到消息后轉發給comet,之后再由comet把消息發出去

  • imService:聊天服務器,處理單聊群聊,離線消息

  • cosumerService:對群消息進行異步寫擴散

  • authService:認證服務

 

數據結構


 
cacheService 維護全局在線用戶,是一個二級map    user_id -> conn_id -> server_id
  • user_id 是業務指定的,唯一標識一個用戶

  • conn_id 由存儲進程分配,唯一標識該用戶的一條連接

  • server_id 標識這條連接屬于哪個接入進程

接入進程proxy維護自己在線用戶,   user_id+conn_id -> Connection  
  • Connection 是客戶端連接的封裝,可以向它推送消息

接入進程proxy維護連接房間信息,   room_id -> ConnectionList  


 

三、消息模型


 

3.1 讀擴散模型


 

 
IM消息系統的設計和實現是怎樣的  

 

 
  • 優點:只寫一次,降低了寫入次數,特別在群模式下

  • 缺點: 同步消息的邏輯會比較復雜,接收端每個會話都要讀取一次,放大了讀,會產生很多無效請求。


 

3.2 寫擴散模型


 

 
IM消息系統的設計和實現是怎樣的  

 

 
  • 優點:拉取消息的邏輯簡單

  • 缺點: 放大了寫,單聊要額外寫兩次,群里要寫N次


 

四、實現方式

 

4.1 單聊

 
4.1.1 設計目標
 
4.1.2 在線消息

 

 
IM消息系統的設計和實現是怎樣的  

 

 
 
4.1.3 離線消息
 
4.1.4 檢測消息丟失
 

4.2 群聊

 
4.2.1 設計目標
 
4.2.2 小群(寫擴散)

 

 
IM消息系統的設計和實現是怎樣的  

 

 
 
4.2.3 大群(讀擴散)

 
IM消息系統的設計和實現是怎樣的  

 
 

五、高性能分析

瓶頸 CPU > 帶寬 > 內存
 

5.1 容量規劃:(阿里云主機16C32G-2.5GHz,預留50%余量)

  • 10,000 conn per proxy

  • 100 proxy

  • 50 logicService/cacheService/pushService

  • or 改進:

    • 10 logicService

    • 5 pushService

    • kafka cluster

    • zookeeper cluster

    • 10 cacheService

 

5.2內部通信無瓶頸,可水平擴容的路徑有:

  • 客戶端發起的RPC mobile -> proxy -> micro

  • 上線/下線/切換房間/心跳 mobile -> proxy -> logicService -> cacheService

  • 單播 micro -> logicService (-> cacheService) -> pushService -> proxy -> mobile

  • 在線信息查詢

    • 按用戶查在線查房間 /session

 

5.3 內部通信,可能有瓶頸的路徑:

  • 批量單播 micro -> logicService ((N-parallel)-> router) -> pushService -> proxy -> mobile

    • 限制:一批用戶總數,不宜過多

  • 廣播 micro -> logicService -> pushService -> proxy -> mobile

    • 限制:由于pushService定期absorb proxy上的room list, so pushService數量不可過多

    • 改進:logicService和pushService解耦,用kafka連接。由于 pushService 對 CPU 的消耗在 proxy/logicService/cacheService 中最少,只需要非常少的 pushService 實例就行。

  • 在線信息查詢

    • 查在線總數 /count 由于logicService定期absorb cacheService上的room users,只能是有限的logicService打開counter定時查

    • 按房間查用戶 /room 同 /count

    • 遍歷 /list 調試用接口,別用于服務


 

5.4 proxy性能瓶頸

 

5.5 rpc性能瓶頸

 

六、高可用分析

為用戶提供 7-24 小時無間斷服務。迭代式開發,要求內在模塊和業務服務的升級、擴容對用戶無感知。
  • proxy 無狀態服務,重啟、升級時,客戶端檢測到連接斷開,自動重連到另一個 proxy

  • logicService 無狀態服務,重啟、升級時,proxy 會自動尋找下一個 logic

  • pushService 無狀態服務,重啟、升級時,有其它 pushService對外提供服務

  • cacheService 有狀態服務,重啟、升級時,由備 cacheService 頂上;升級完成,切回主 cacheService

  • imService 無狀態服務,重啟、升級時,有其它 pushService對外提供服務

  • mysql:使用mysql master master機制來保證

  • redis: 使用哨兵機制來保證可用性

 

七、異常情況處理

  • 如何防止消息丟失(接收端上報已接收的最大消息id,異常服務端重發)

  • redis主從切換引起自增id不連續

  • 怎么提高proxy廣播的性能

  • 怎么避免rpc的單條連接成為瓶頸

 

八、低成本、安全

  • 幾乎沒有外部依賴,極低的運維成本

  • 高性能的代碼實現,節省服務器成本

  • 集成認證鑒權,也支持 HTTPS

關于IM消息系統的設計和實現是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

im
AI

延庆县| 宜州市| 丹寨县| 白玉县| 靖宇县| 尖扎县| 台东市| 岳阳县| 增城市| 张家界市| 荔浦县| 临猗县| 隆德县| 犍为县| 郁南县| 合水县| 南安市| 桓仁| 嘉定区| 乐平市| 连平县| 金寨县| 永年县| 呈贡县| 兴山县| 读书| 莱芜市| 天峨县| 宣威市| 华亭县| 洪泽县| 洪江市| 加查县| 山阳县| 响水县| 团风县| 禹城市| 内乡县| 宁国市| 库伦旗| 清水河县|