編者按:互聯(lián)網(wǎng)+時代,消息量級的大幅上升,消息形式的多元化,給即時通訊云服務(wù)平臺帶來了非常大的挑戰(zhàn)。網(wǎng)易云信不僅能夠完美支持千萬數(shù)量級的高并發(fā)消息量,還與此同時做到了穩(wěn)定和快速。這背后究竟有著什么樣的架構(gòu)和特性?
現(xiàn)在,更多面向衣食住行的應(yīng)用產(chǎn)品早已具備即時通訊功能,即時通訊作為一個連接人與人的功能,在各個場景中都不可或缺。據(jù)《中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告》顯示,2016年6月中國即時通信用戶規(guī)模達(dá)6.42億人,網(wǎng)民使用率為90.4%。越來越多的企業(yè)和廠商正在進(jìn)行轉(zhuǎn)型,將會進(jìn)一步拉動云服務(wù)市場的快速發(fā)展。企業(yè)級的IM云服務(wù),作為最通用、最活躍、最剛性的需求,極有可能成為中國企業(yè)服務(wù)的入口級應(yīng)用,同時也成為被國內(nèi)眾多巨頭主力拓展的市場。CSDN采訪了網(wǎng)易云信首席架構(gòu)師周梁偉,針對企業(yè)級IM架構(gòu)如何支持高并發(fā)且安全、穩(wěn)定等話題做出了深入的探討。
IM云市場,機(jī)遇與挑戰(zhàn)并存
在如今互聯(lián)網(wǎng)+的浪潮下,各產(chǎn)品在節(jié)奏快的情況下,選用IM云服務(wù)是必然趨勢。這對IM云服務(wù)市場的各家平臺,是一種機(jī)遇,同時也是一個全新高度的挑戰(zhàn)。在互聯(lián)網(wǎng)+時代,消息量級的大幅上升,消息形式的多元化,給IM云服務(wù)平臺帶來了非常大的挑戰(zhàn)。如何支持更大數(shù)量級的高并發(fā)消息量,并能夠做到穩(wěn)定和快速,成為各IM云服務(wù)平臺的重中之重。
“智慧IM云架構(gòu)”—— IM云分層架構(gòu)
周梁偉表示,網(wǎng)易正是看到了這一趨勢,憑借在即時通訊領(lǐng)域長達(dá)16年的經(jīng)驗與技術(shù)積累,推出了網(wǎng)易云信即時通訊云服務(wù)(PaaS)。網(wǎng)易云信在用戶的設(shè)備之間建立了一個可靠的端到端的連接,在不同的場景中用不同的方式投遞消息,不同類型的消息會產(chǎn)生不同的消息行為,在網(wǎng)易云信的消息通道中有內(nèi)容審核和數(shù)據(jù)同步。開發(fā)者通過集成客戶端SDK和云端OPEN API,即可快速實(shí)現(xiàn)強(qiáng)大的IM功能,作為PaaS服務(wù)模式的網(wǎng)易云信全面支持Android、iOS、Web、PC等多平臺。
周梁偉首先介紹下網(wǎng)易云信的技術(shù)框架,有助于大家系統(tǒng)的理解云信產(chǎn)品的設(shè)計思路:
• 客戶端SDK層:SDK多平臺適配、移動弱網(wǎng)絡(luò)優(yōu)化、安全加密壓縮。
• 連接層:長連接管理優(yōu)化、支持平滑升級、支持跨網(wǎng)絡(luò)切換、廣播分包。
• 路由層:用來解耦并提供高可用和易擴(kuò)展等特性,同時提供協(xié)議路由服務(wù),代為分發(fā)業(yè)務(wù)請求。
• 業(yè)務(wù)層:處理具體的客戶端請求,并返回結(jié)果。提供后端直連DB、cache等各種基礎(chǔ)服務(wù)。高可用,彈性擴(kuò)展。
核心功能:連接
“IM服務(wù)架構(gòu)最核心的功能就是“連接“,它需要解決的最基本的問題是穩(wěn)定,安全和快速”,周梁偉對IM架構(gòu)需求作出了明確說明。
穩(wěn)定
網(wǎng)易云信的SDK采用長連接機(jī)制來實(shí)現(xiàn),并且由SDK+心跳的方式來檢測斷線和自動做重連,同時針對移動網(wǎng)絡(luò)等弱網(wǎng)環(huán)境,對SDK做大量的優(yōu)化工作。對移動端/PC端,云信使用TCP來連接客戶端與服務(wù)器。對Web端,云信使用Socket.IO協(xié)議,實(shí)現(xiàn)長連接的同時,也解決了瀏覽器的兼容性問題。
安全
網(wǎng)易云信對所有在公網(wǎng)傳輸?shù)臄?shù)據(jù)都進(jìn)行了加密。在SDK與服務(wù)器的連接建立過程中有一個復(fù)雜的秘鑰協(xié)商過程,客戶端需要生成一個一次性使用的加密秘鑰,并使用非對稱加密方式將這個秘鑰加密之后傳給服務(wù)器,這個加密數(shù)據(jù)會被服務(wù)器解密,之后該加密秘鑰被保留在該長連接的會話信息中,數(shù)據(jù)來往均使用該秘鑰加密,這是一個流式加密,能夠有效防止中間人攻擊和數(shù)據(jù)包回放等攻擊手段。對于web端則通過Https來保證Socket.IO協(xié)議的數(shù)據(jù)安全。
快速
網(wǎng)易云信借助LBS服務(wù),幫助客戶端尋找到最適合自己的網(wǎng)關(guān)接入點(diǎn)。同時,在連接建立之后,長連接的機(jī)制可以極大提升消息上下行的速度,并且在數(shù)據(jù)傳輸過程中,對數(shù)據(jù)包壓縮傳輸,降低網(wǎng)絡(luò)開銷來提升消息收發(fā)的速度。對頻繁的前后臺切換和重登陸這種移動客戶端場景,SDK提供自動登錄和重連等機(jī)制,即在UI界面起來的同時已經(jīng)提前把消息通道建立。在接入網(wǎng)關(guān)的選擇策略中,通過并行來提升連接建立的速度。