网易来聊聊子弹短信的消息漫游技术
“子彈短信”炸翻了創(chuàng)投圈,上線短短7天,掀起IM行業(yè)一股巨浪。網(wǎng)易云信作為子彈短信IM以及音視頻通話技術提供者,今天來聊聊子彈短信這款即時通訊產(chǎn)品里面一個重要功能—消息漫游。
【知識點】消息漫游是指即時通訊產(chǎn)品將用戶聊天記錄保存在云端,用戶在任何一個終端設備上都能獲取到全部的聊天記錄。
聊聊子彈短信怎么實現(xiàn)消息漫游
消息漫游在即時通訊領域是相對高級的功能,很多社交軟件沒有提供該功能,下面我們來分析下子彈短信消息漫游的技術實現(xiàn)。
1. 子彈短信即時通訊的消息交互
發(fā)送者 A通過連接層x將消息發(fā)往業(yè)務邏輯層,業(yè)務邏輯層APP(保存著A和B的在線狀態(tài))通過連接層y將消息轉給接收者B,完成了一次消息發(fā)送過程。
2. 子彈短信多端在線的消息交互
發(fā)送者A有多個終端在線時,在A用手機將消息發(fā)送給B的同時會給A的電腦終端發(fā)送一條通知,從而完成消息的多端同步
3. 子彈短信消息漫游的實現(xiàn)
多端消息交互過程如果用戶一個終端不在線,那么不在線的一端是無法同步到聊天記錄的,此時就需要用到消息漫游功能,當發(fā)送者A將消息發(fā)給B時,APP會把消息存儲起來,Cache中保存著用戶近期的聊天記錄,DB采用時間序列數(shù)據(jù)庫,保存著用戶的歷史聊天記錄,客戶端保存著消息同步的時間戳,登錄時根據(jù)時間戳,通過緩存加歷史的方式拉取數(shù)據(jù),從而實現(xiàn)完整會話消息的漫游
漫游消息的存儲方式
即時通訊中產(chǎn)生了海量的消息,如果使用了消息漫游的功能,消息的存儲就是一個不小的挑戰(zhàn)。首先用戶在會話中產(chǎn)生的消息是有個TimeLine的,在存儲上也需要按照時間來存儲。圖中給出了兩種存儲方式,1中的寫入方式是按照會話來存的,這樣存消息的好處是,多個人的消息只存一份,即按照會話來存儲,但是這種方式帶來了一個問題,就是A要拉取消息記錄時需要去A的每個會話中分別讀取,產(chǎn)生了讀擴散;2中的寫入方式是按照用戶來存的,這樣存消息的好處是讀取方便,但是一個會話的消息被存了多次,產(chǎn)生了寫擴散。
上面介紹的兩種存儲方式各有優(yōu)缺點,究竟哪一種存儲方式更好呢?
首先來看下即時通訊的應用場景,對于消息記錄寫入非常頻繁,而讀取動作一般發(fā)生在登陸時的情況較少;再來看下DB選型:使用寫擴散方式時一條消息會寫入兩條記錄,讀取時一次可查詢出所有記錄;使用讀擴散方式時一條消息寫入一條記錄,讀取時需要根據(jù)會話數(shù)量讀取多次;傳統(tǒng)的關系型數(shù)據(jù)庫應對讀擴散會非常吃力,只能使用寫擴散的方式實現(xiàn),如果使用nosql數(shù)據(jù)庫存儲則兩種方式都可以實現(xiàn)。
子彈短信使用的混合存儲方式
子彈短信使用了內(nèi)存數(shù)據(jù)庫+時間序列數(shù)據(jù)庫的存儲方式。內(nèi)存數(shù)據(jù)庫采用讀擴散的方式存儲近期消息,時間序列數(shù)據(jù)庫則采用寫擴散的方式存儲歷史消息。這樣的存儲方式有以下幾個考量:
內(nèi)存數(shù)據(jù)庫的高TPS和低RT對用戶正常的消息收發(fā)影響很小,采用異步寫入讓吞吐量進一步提升
內(nèi)存數(shù)據(jù)使用讀擴散的存儲方式,首先內(nèi)存的成本相對較高,需盡可能的減少空間占用,再則內(nèi)存數(shù)據(jù)庫的低RT可以應對讀擴散帶來的延時問題
歷史消息量較大,采用存儲介質較為廉價的數(shù)據(jù)庫存儲,同時為了保證查詢性能,存儲方式使用了寫擴散的形式,選用支持時間序列的數(shù)據(jù)庫,對比關系型數(shù)據(jù)庫有更好的讀寫表現(xiàn)
歷史消息使用異步寫入,對業(yè)務流程無影響
客戶端保存上次同步的時間戳,除了用戶卸載應用或者長時間不登錄的情況下,讀請求都會落在內(nèi)存數(shù)據(jù)庫上,用戶體驗比較好
即時通訊平臺的消息漫游設計理念
1. 中心化存儲
作為即使通訊Paas平臺,需要對業(yè)務方提供消息內(nèi)容審核機制,也要對監(jiān)管方提供消息數(shù)據(jù)。中心化的集中存儲實現(xiàn)消息內(nèi)容審核較容易,也能及時響應監(jiān)管方的消息核查需求。
保證消息不丟失,IM系統(tǒng)中心化有助于實現(xiàn)多端漫游功能,用于解決用戶在多個設備,多個場景下切換賬號時消息同步的問題,提升了用戶體驗。
2. 信息安全
在數(shù)據(jù)訪問的制度管理上:平臺方一般會使用私有云方案,數(shù)據(jù)中心均不提供外網(wǎng)訪問,租戶網(wǎng)絡下訪問也加入了權限限制
在數(shù)據(jù)存儲的安全方面:使用了私有協(xié)議的數(shù)據(jù)編碼和加密機制存取消息,即使發(fā)生了拖庫也無法解出消息內(nèi)容
在數(shù)據(jù)傳輸協(xié)議方面:網(wǎng)絡通信使用了自定義編解碼報文和加密算法,API接口等支持SSL加密,輔之以業(yè)務層鑒權機制,有效保證了信息的傳輸安全。
以上就是對于子彈短信消息漫游技術淺析。
總結
以上是生活随笔為你收集整理的网易来聊聊子弹短信的消息漫游技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两种方式:mysql查看正在执行的sql
- 下一篇: 学习Vue.js-Day2