消息平臺架構設計

祝你們每日進步,有技術問題多多交流,同時歡迎你們關注個人頭條號:IT人孫會良redis

消息平臺架構設計

一.消息平臺的應用場景及難點
1.解決什麼業務問題:
a.端到雲的實時上報
b.雲到端的是實時推送
c.端到端的聊天消息

2.難點:
a.APP無線環境下消息的可達性
b.通用性,平臺實現儘可能與業務解耦數據庫

二.傳統解決方案-端到雲的上報後端

三.傳統解決方案-雲到端的推送

1.雲到端:經過第三方push或者推送服務
方案一:採用APNs或者米推等第三方推送
方案二:經過本身搭建mqtt服務推送


2.經過第三方push或者推送服務的缺點:
a.第三方推送服務的可達性和實時性沒法保障,同時第三方會進行推送限速
b.Mqtt的可用性是個問題服務器

 

四.傳統解決方案-端到端的消息通信
   傳統方案每每能夠經過結合【端到雲】與【雲到端】來結合解決【端到端】的實時消息推送問題。架構

 

五.通用消息平臺解決方案app

消息平臺解決方案的特色:
1.使用TCP長鏈接,克服Http輪詢效率低的瓶頸。
2.使用消息總線msq-queque經過對消息主題的發佈和訂閱來將消息平臺與業務線app-server進行解耦。新增消息發送方,消息平臺只須要配置消息類型與消息總線的映射關係,新增的app-server訂閱新的主題的便可,實現了消息平臺與業務的解耦tcp

六.通用消息平臺架構
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發送「雲到端」的消息分佈式

 

七.通用消息平臺架構-分佈式架構spa

八.通用消息平臺架構-消息投遞流程
消息投遞流程:
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接口(對業務方透明)