消息平台架構設計
一.消息平台的應用場景及難點
1.解決什么業務問題:
a.端到雲的實時上報
b.雲到端的是實時推送
c.端到端的聊天消息
2.難點:
a.APP無線環境下消息的可達性
b.通用性,平台實現盡量與業務解耦
二.傳統解決方案-端到雲的上報
三.傳統解決方案-雲到端的推送
1.雲到端:通過第三方push或者推送服務
方案一:采用APNs或者米推等第三方推送
方案二:通過自己搭建mqtt服務推送
2.通過第三方push或者推送服務的缺點:
a.第三方推送服務的可達性和實時性無法保障,同時第三方會進行推送限速
b.Mqtt的可用性是個問題
四.傳統解決方案-端到端的消息通訊
傳統方案往往可以通過結合【端到雲】與【雲到端】來結合解決【端到端】的實時消息推送問題。
五.通用消息平台解決方案
消息平台解決方案的特點:
1.使用TCP長連接,克服Http輪詢效率低的瓶頸。
2.使用消息總線msq-queque通過對消息主題的發布和訂閱來將消息平台與業務線app-server進行解耦。新增消息發送方,消息平台只需要配置消息類型與消息總線的映射關系,新增的app-server訂閱新的主題的即可,實現了消息平台與業務的解耦
六.通用消息平台架構
1.msg-sdk:向APP提供帥氣的MSG接口。
2.msg-gate:消息平台tcp接入門戶,保持tcp長連接,初步攻防,加解密,壓縮/解壓縮
3.msg-logic:消息平台邏輯處理部分
4.redis:高可用redis集群存儲用戶在線狀態online/offline,以及用戶在那一台msg-gate接入(如果在線)
5.DB,存儲離線消息
6.業務客戶端:業務方APP,可以有多個,通過msg-sdk來接入消息平台
7.MQ:消息平台通過mq來給業務方服務器發“端到雲”的消息
8.app-server:業務方后端,可以有多個,通過mq接收“端到雲”的消息,通過RPC發送“雲到端”的消息
七.通用消息平台架構-分布式架構
八.通用消息平台架構-消息投遞流程
消息投遞流程:
1.消息方將消息發送給消息平台
2.消息平台將消息落地
3.消息平台返回發送成功給 消息發送方
3.與此同時消息平台將消息發送給消息接收方
4.消息接收方發送ack給消息平台,表示已接收
5.消息平台將消息從數據庫中刪除
6.通知消息接收方ack已經處理
需注意:
如第三步,消息發送方沒有收到消息平台的回復,則消息發送方需要重新發送消息
消息接收方如果收到重發的冗余消息需要進行接收方去重,做到服務端無狀態。
九.消息平台通用接口
1.Msg-sdk對App提供的核心接口有:
a.login:接入消息平台
b.logout:登出消息平台
c.c2s:發送client to server”端到雲”的消息
d.c2c:發送client to client“端到端”的消息
e.get-offline-msg:獲取離線消息
f.on-msg-received:收到消息的callback回調接口
2.消息平台對App-server提供的核心接口:
a.s2c:發送server to client “雲到端”的消息
3.其他業務方不需要關注,msg-sdk與消息平台之間的內部接口有:
a.keepalive:用於msg-sdk與消息平台的連接保持
b.c2c-ack:用於c2c接口應用層ack接口(對業務方透明)
————————————————
版權聲明:本文為CSDN博主「大道化簡」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sunhuiliang85/article/details/78235866