网易云信深度优化解决移动聊天室“痼疾”
本文源于云信移動技術專家項望烽在開源中國源創(chuàng)會2016年終盛典的題為《聊天室場景下的移動網(wǎng)絡優(yōu)化》分享。
(網(wǎng)易云信移動端技術 項望烽)
突破傳統(tǒng)群組思維和架構,實現(xiàn)無人數(shù)上限的聊天室
步入移動互聯(lián)網(wǎng)時代以來,包括IM和聊天室在內(nèi),絕大多數(shù)相關應用的開發(fā),都經(jīng)歷了從直接移植桌面端產(chǎn)品到移動端,到如今直接以移動端產(chǎn)品為主導的轉變。而因為移動網(wǎng)絡環(huán)境本身的復雜性,期間也不斷遇到了各種難題。以目前覆蓋人群最廣的手機直播為代表的移動端聊天室為例,和常見IM應用不同,它從一個點對點的場景變?yōu)榱巳旱膱鼍?#xff0c;建立在群的架構上。如果是在線人數(shù)繁多、單位時間內(nèi)消息量巨大的聊天室場景中,可能僅查詢聊天室成員在線就會讓服務器崩潰。而且還要顧及到本身視頻直播的推位流和觀眾與主播的互動,以及各種復雜數(shù)據(jù)流的傳輸。這也是為什么常見IM聊天室都有人數(shù)上限和離線消息存入限制的原因。而網(wǎng)易云信則突破了傳統(tǒng)群組思維來設計聊天室架構,實現(xiàn)了無上限人數(shù)的聊天室。
網(wǎng)易云信的應對之道及優(yōu)化方向
網(wǎng)易云信會讓無上限人數(shù)的聊天室的用戶都連接到相同的一組服務器上,這樣到消息投遞過來的時候,就不需要進行用戶在線狀態(tài)的查詢,只需要把消息投遞到相應的幾臺或者幾十臺服務器上即可。但這種情況下,對于移動端的要求更高,等于每一個聊天室移動端都要重建一個TCP連接,又要能夠保障每個直播間或者說每個聊天室都能夠秒進。而且因為聊天室人員的流動性,用戶經(jīng)常從一個主播切換到另外一個主播,導致聊天室切換,重連也比較頻繁。那么在這種情況下,移動端怎么做優(yōu)化工作呢?
首先我們可以將一個IM產(chǎn)品或者說一個聊天室場景分為幾個環(huán)節(jié):連接服務、登錄、發(fā)送消息和接收消息。所謂的網(wǎng)絡優(yōu)化也就是針對這幾個環(huán)節(jié)而已,怎么更快的連接服務器,怎么更快更安全的登錄服務器,怎樣保證消息快速抵達和不丟,以及最后一步——怎么優(yōu)雅的接收消息。
?
雙模式綜合應用,確保連接穩(wěn)定快速
首先,從連接維度著手。相比起傳統(tǒng)拿一個域名去鏈接服務器并發(fā)送請求的方式,云信采用HTTP DNS和內(nèi)置IP列表兩種模式綜合應用。一方面,用 IM 應用服務器作為一個功能類似lbs的服務器,通過 IM 的長連接獲取聊天室IP地址,獲取后的服務器地址緩存在本地使用。這樣就能夠保證絕大部分的連接都是用 IP 做直連,而且能夠連接到最適合當前客戶端的服務器。同時,在保活保連方面,精簡心跳包,并減少心跳包的頻率。針對重連情況,做一定的退避機制和啟用淘汰機制。如果重連某臺服務器次數(shù)超過一定的閾值就嘗試下一臺服務器。
?
多維度優(yōu)化,為登錄順暢保駕護航
在登錄方面, 網(wǎng)易云信將加密和登錄請求放在一個環(huán)節(jié)中來完成,不使用公開的協(xié)議,而使用私有協(xié)議,自定義整個加密流程,去除證書下發(fā)和驗證的過程,在保證安全且不容易被破解的前提下,保證能夠最快的完成登錄流程。此外,網(wǎng)易云信還在技術層面對現(xiàn)有協(xié)議進行了一系列的精簡。使用二進制協(xié)議和壓縮,盡量保證登錄請求包足夠小,減少因為分組帶來的丟包率升高,而導致重傳。此外,在登錄后實現(xiàn)增量同步和按需同步,只有在真正需要的時候才進行信息的獲取。
?
精心打磨文件上傳,實現(xiàn)高效穩(wěn)定
在純文本信息和指令的發(fā)送上,網(wǎng)易云信采用了常見的依靠應用層ACK的模式,把更多的精力放到對文件上傳的優(yōu)化方面。移動網(wǎng)絡的低帶寬、高延遲、高丟包率導致了普通的上傳非常容易失敗,大量的TCP分組和簡單的分塊上傳,依然容易出現(xiàn)重傳次數(shù)過多和較高的失敗率。針對這一問題,網(wǎng)易云信根據(jù)網(wǎng)絡類型來預估分塊大小,并進行動態(tài)調(diào)整,同時為了減少RTT的影響采用Pipelining技術,在一個TCP連接上順序發(fā)送多個請求,同時為了提高上傳成功率做一定程度的限速,防止一次發(fā)送的數(shù)據(jù)過載,造成過多的TCP分組。在業(yè)務層面,譬如音頻傳輸,則采取邊錄邊傳的模式來達成高效優(yōu)化。
?
2016年,視頻直播行業(yè)迎來了空前的大爆發(fā),而且移動直播客戶端的用戶訪問量也呈現(xiàn)出井噴的趨勢,圍繞多數(shù)主播的“同房”觀眾往往數(shù)以萬計,大有重現(xiàn)甚至超過當初BBS時代聊天室的盛況。但對于直播平臺或者聊天室的運營者而言,龐大的用戶訪問量引發(fā)的卡頓、宕機、崩潰、消息發(fā)送和接收不暢,以及移動端弱網(wǎng)絡等問題也成為了無法回避的痛點。網(wǎng)易云信憑借自身多年的技術沉淀及大量全方位的精打細磨,推出了“無人數(shù)上限直播聊天室”的解決方案(包括UI組件、P2P 群組、聊天室,而且都是開源),及時為直播行業(yè)的蓬勃發(fā)展掃清了障礙。
網(wǎng)易云信∣真正穩(wěn)定的IM云服務
http://netease.im ?長按識別,關注精彩
總結
以上是生活随笔為你收集整理的网易云信深度优化解决移动聊天室“痼疾”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网易云信SDK V3.2.0版发布啦!
- 下一篇: 架构设计从这5点考虑,能帮后期运维很大忙