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