IM全稱Instant Messaging
早期的CS、P2P架構
IM系統中最核心的部分是消息系統,消息系統中最核心的功能是消息的同步、存儲和檢索
- 消息的同步:將消息完整的、快速的從發送方傳遞到接收方,就是消息的同步。消息同步系統最重要的衡量指標就是消息傳遞的實時性、完整性以及能支撐的消息規模。從功能上來說,一般至少要支持在線和離線推送,高級的IM系統還支持『多端同步』。
- 消息的存儲:消息存儲即消息的持久化保存,傳統消息系統通常只能支持消息在接收端的本地存儲,數據基本不具備可靠性。現代消息系統能支持消息在服務端的在線存儲,功能上對應的就是『消息漫游』,消息漫游的好處是可以實現賬號在任意端登陸查看所有歷史消息。
- 消息的檢索:消息一般是文本,所以支持全文檢索也是必備的能力之一。傳統消息系統通常來說也是只能支持消息的本地檢索,基於本地存儲的消息數據來構建。而現在消息系統在能支持消息的在線存儲后,也具備了消息的『在線檢索』能力。
傳統架構 vs 現代架構
服務的主體功能為提供消息的在線轉發和離線消息的獲取。從產品側角度,衍生出多平台的同步轉發、互踢及群組的需求。功能上需要提供消息指定路由轉發、是否持久化、在線離線機制、心跳包、通知送達、授權驗證等。從技術層次上划分,網絡層提供長連接/短連接的服務,路由層提供轉發,存儲層提供持久化。額外的產品需求,還包含第三方的推送和訂閱服務。
整體結構如下圖:
具體功能:
1、用戶接入及消息流程
如下圖,用戶登陸獲取授權,通過jwt token 接入websocket,發送心跳及消息,消息路由到指定的在線用戶
2、離線消息
用戶的消息除了特殊可丟消息以外默認會入庫,包含個人消息和組消息等,離線消息按照順序存儲。。為保證客戶端能同步到離線的消息,客戶端在啟動或重連成功后,需調用離線接口直至空為止,表示客戶端已取完所有離線。
3、推送
推送服務從中間件拉取消息,解析消息並補充相應的昵稱等,組裝消息調用第三方推送接口發送
4、訂閱
支持第三方服務從訂閱的群獲取消息。目前訂閱僅支持webhook,訂閱服務通過實時的解析數據,調用相應的http接口進行消息的投遞
第三方可通過http接口向指定群發送消息
5、統計
對活躍用戶,用戶消息,總用戶數,當天新增用戶量等進行統計
6、用戶注冊
添加用戶時,生成唯一的id標識。
7、群成員管理
群成員添加刪除及緩存處理,在服務維護成員關系,便於群消息的發送
8、用戶管理系統
包含APP的用戶同步,增刪改查,用戶關系
9、設置
用戶的APP設置,如靜音,屏蔽,拉黑關系等
10、登錄
短信登陸、支持使用微信等第三方登錄
11、多端的數據同步
含Android、ios、PC的數據同步