周梁伟:聊天室架构 如何跳出传统思维来设计?
周梁偉?現(xiàn)任網(wǎng)易云信 IM云服務(wù)器端開發(fā)負(fù)責(zé)人,浙江大學(xué)計(jì)算機(jī)學(xué)院碩士。2011年加入網(wǎng)易,先后擔(dān)任網(wǎng)易后臺(tái)技術(shù)中心與網(wǎng)易大數(shù)據(jù)平臺(tái)資深開發(fā)工程師,負(fù)責(zé)即時(shí)通訊領(lǐng)域的產(chǎn)品開發(fā)與應(yīng)用服務(wù)器與大數(shù)據(jù)領(lǐng)域戰(zhàn)略規(guī)劃與設(shè)計(jì)。
下文根據(jù)周梁偉在高升云道深圳站演講整理而成。
◆ ?◆ ?◆
網(wǎng)易云信是網(wǎng)易公司推出的一個(gè)面向開發(fā)者的IM云平臺(tái)。今天,結(jié)合《性能當(dāng)?shù)?優(yōu)化為王》的主題,重點(diǎn)挑選聊天室這個(gè)典型場景,和大家分享一下網(wǎng)易云信在實(shí)現(xiàn)這個(gè)功能時(shí)是如何做架構(gòu)設(shè)計(jì)的。
常見的虛擬社群
聊天室的應(yīng)用場景非常廣,除了傳統(tǒng)的圖文聊天外,時(shí)下流行的視頻彈幕、在線秀場、在線教育、游戲互動(dòng)等各式各樣產(chǎn)品中都有類似的應(yīng)用場景。
在討論聊天室之前,我們先了解下幾種常見的虛擬社群形態(tài)。下表從參與人數(shù)、消息送達(dá)即時(shí)性、離線消息關(guān)注度等維度對(duì)論壇、IM P2P、IM群和聊天室這幾種常見的虛擬社群形態(tài)做了簡單對(duì)比,從這個(gè)對(duì)比可以看到聊天室是不同于論壇和群模式的一種虛擬組織,聊天室的架構(gòu)需要跳出傳統(tǒng)思維來設(shè)計(jì)。
聊天室跟普通的IM群(微信群,QQ群等)相比最大的不同點(diǎn)在于它是一個(gè)比較開放的虛擬組織。我們可以將聊天室比喻成一個(gè)廣場,廣場是開放無邊界的,所有的人都可以隨進(jìn)隨出,而群就像一個(gè)房間,是一個(gè)有邊界有容量上限的私密組織,并且進(jìn)入這個(gè)房間需要一定條件,一般是主動(dòng)申請(qǐng)加入或被邀請(qǐng)加入。聊天室對(duì)比BBS論壇這種虛擬組織來說,它既具有了IM群消息即時(shí)送達(dá)的特性又有論壇參與人數(shù)無上限的特性。
聊天室關(guān)鍵技術(shù)和難點(diǎn)
那么,是否能從一個(gè)已有的成熟技術(shù)框架上改造一個(gè)聊天室出來呢?
經(jīng)過前面的比較我們看到,聊天室和論壇及IM群都具有一定的共性,看起來似乎可以將論壇架構(gòu)改造成聊天室,也可以將IM群改造成聊天室。
路徑一:將論壇架構(gòu)改造成聊天室,首先需要提高消息送達(dá)的即時(shí)性,由于論壇都是基于HTTP協(xié)議的,為了保證消息即時(shí)送達(dá),需要客戶端不斷輪詢服務(wù)器來獲取新的消息,如果對(duì)即時(shí)性的要求越高,那輪詢的時(shí)間就需要縮短,這種模式在用戶量達(dá)到一定規(guī)模后是無法承載的。為了保證消息的高效送達(dá),客戶端與服務(wù)器之間的需要采用長連接機(jī)制,新消息的送達(dá)通過服務(wù)器主動(dòng)向客戶端下推來完成。
路徑二:將已有的IM群改造成聊天室,由于群具有對(duì)離線消息關(guān)注度高的特性,所有的群消息在成員離線時(shí)需要持久化,因而群人數(shù)越多效率越低,也正是因?yàn)檫@個(gè)原因,一般的IM群都是有人數(shù)上限的,如果想把群改造成聊天室,就不能存離線消息,所以這種方式看起來也不是這么順暢。
現(xiàn)在市場上很多提供聊天室類服務(wù)的產(chǎn)品其實(shí)都是基于群的模式來實(shí)現(xiàn)的,所以人數(shù)上限一直是一個(gè)難以突破的瓶頸,甚至有的服務(wù)直接使用“超大群”或“千人群”這樣一種特殊群模式來滿足用戶對(duì)聊天室場景的需求。
下面我們來看下,如果要實(shí)現(xiàn)一個(gè)人數(shù)無上限的聊天室服務(wù),需要解決哪些難題。
首先:客戶端多樣性。近幾年來移動(dòng)互聯(lián)網(wǎng)發(fā)展得非常快,現(xiàn)在推出的APP一般都需要同時(shí)具備iOS版、安卓版和Web版、PC版等不同的版本,跨平臺(tái)的開發(fā)需求一直是攔在創(chuàng)業(yè)團(tuán)隊(duì)面前的一座大山;
第二:數(shù)據(jù)安全保障。當(dāng)前的網(wǎng)絡(luò)環(huán)境異常復(fù)雜,我們的APP在客戶端與服務(wù)器之間的數(shù)據(jù)通信都暴露在復(fù)雜的公網(wǎng)環(huán)境中,消息經(jīng)過哪些節(jié)點(diǎn),中間有沒有被抓包,數(shù)據(jù)是否被惡意采集,這些問題普通用戶開和發(fā)者都容易忽略。如果數(shù)據(jù)通信過程中忽視了安全需求,很容易造成用戶數(shù)據(jù)的泄露,數(shù)據(jù)的安全保障對(duì)于產(chǎn)品而言也很重要;
第三:需要應(yīng)對(duì)網(wǎng)絡(luò)故障或服務(wù)單點(diǎn)故障的難題。開發(fā)者代碼寫得再好也無法避免硬件故障或是網(wǎng)絡(luò)故障這種不可預(yù)知的問題,在產(chǎn)品積累了一定的用戶量之后,如果遇到服務(wù)可用性問題會(huì)造成用戶流失。
第四:架構(gòu)需要具備足夠的彈性。在用戶量級(jí)上來之后能支持快速的水平擴(kuò)展,不會(huì)因?yàn)榧軜?gòu)的問題需要重構(gòu)。
最后:消息投遞慢。聊天室對(duì)消息的即時(shí)性要求非常高,同一條消息在投遞給不同成員時(shí)需要在毫秒級(jí)的延時(shí)完成,如果消息投遞慢了會(huì)造成消息時(shí)間線錯(cuò)亂,聊天室里的人無法理解上下文場景。
基于這些難點(diǎn),我們提出聊天室需要具備這些指標(biāo):跨平臺(tái)、數(shù)據(jù)加密、高可用、易擴(kuò)展、高并發(fā)低延遲。
云信聊天室的架構(gòu)
上圖是網(wǎng)易云信的聊天室分層架構(gòu)。
客戶端層:處理各種設(shè)備的兼容問題,包括對(duì)ios,Android,Windows, Web等各種開發(fā)平臺(tái)的語言適配;消息通道的管理維護(hù),包括移動(dòng)設(shè)備上的弱網(wǎng)絡(luò)管理,斷線重連等;保證數(shù)據(jù)安全,所有上行下行的數(shù)據(jù)包都需要加解密處理,規(guī)避數(shù)據(jù)泄露或中間人攻擊等各種安全風(fēng)險(xiǎn)。
網(wǎng)關(guān)接入層:管理大量客戶端連接,單個(gè)節(jié)點(diǎn)可以維護(hù)的客戶端數(shù)量在數(shù)十萬量級(jí);處理不同類型客戶端的協(xié)議兼容,由于客戶端實(shí)現(xiàn)技術(shù)的多樣性,導(dǎo)致客戶端與網(wǎng)關(guān)之間底層的數(shù)據(jù)通信協(xié)議存在差異,需要由不同的接入網(wǎng)關(guān)做協(xié)議轉(zhuǎn)換;處理數(shù)據(jù)安全邏輯;跨網(wǎng)絡(luò)的高可用邏輯,網(wǎng)絡(luò)級(jí)別的主備(誰知道哪天網(wǎng)線會(huì)被藍(lán)翔的畢業(yè)生挖斷呢?);廣播消息的高效下行分發(fā),將收到的廣播消息分發(fā)到所有連接在本節(jié)點(diǎn)上的客戶端。
路由層:作為業(yè)務(wù)層接入的中轉(zhuǎn),同時(shí)承擔(dān)負(fù)載均衡和高可用的作用,單個(gè)業(yè)務(wù)節(jié)點(diǎn)處理能力達(dá)到瓶頸時(shí)更方便的擴(kuò)容,路由層使業(yè)務(wù)層擴(kuò)容對(duì)前置網(wǎng)關(guān)層完全透明;當(dāng)一個(gè)網(wǎng)絡(luò)的業(yè)務(wù)集群出現(xiàn)網(wǎng)絡(luò)故障時(shí),可以切換到備用網(wǎng)絡(luò),保證服務(wù)可用性。
業(yè)務(wù)層:處理聊天室內(nèi)的業(yè)務(wù)消息,一個(gè)集群內(nèi)有眾多節(jié)點(diǎn),節(jié)點(diǎn)角色相互對(duì)等,任何一個(gè)節(jié)點(diǎn)的故障會(huì)使整個(gè)集群的處理能力下降,但不會(huì)引起服務(wù)的中斷,因?yàn)槠渌?jié)點(diǎn)可以繼續(xù)接管業(yè)務(wù)數(shù)據(jù)包的處理;業(yè)務(wù)集群同樣有多個(gè)網(wǎng)絡(luò)環(huán)境的熱備,以應(yīng)對(duì)可能出現(xiàn)的區(qū)域性網(wǎng)絡(luò)故障;
題外話
技術(shù)發(fā)展到現(xiàn)在已經(jīng)不流行重復(fù)造輪子了,因?yàn)檩喿拥慕Y(jié)構(gòu)越來越復(fù)雜,功能性和非功能性的指標(biāo)要求越來越高;而我們的用戶卻不會(huì)再等我們了。當(dāng)我們還在畫輪子的圖紙的時(shí)候,競爭對(duì)手可能已經(jīng)把車子都造好,在路上跑了。雖然我們不是非得自己造輪子,但是了解如何完成一個(gè)完美的輪子的制作過程和質(zhì)量標(biāo)準(zhǔn)卻是非常有必要的,這也是我前面和你介紹了這么多的原因。
就像近幾年大數(shù)據(jù)技術(shù)非常流行,如果你對(duì)這個(gè)領(lǐng)域有所了解,你就會(huì)發(fā)現(xiàn)幾乎所有公司都在使用現(xiàn)有的平臺(tái),比如Hadoop;或者直接使用,或者在上面做二次改造,原因無非就是上面說的幾點(diǎn)。
現(xiàn)在你遇到的也是同樣的問題,聊天室這種功能在最近兩年又火了起來,主要還是視頻直播業(yè)務(wù)的大規(guī)模擴(kuò)張;所以能借用目前已有的平臺(tái)或工具是最快捷的路徑,應(yīng)用需要關(guān)注的是怎么以最快的速度抓住用戶。
· EDN ·
【推薦閱讀】
視頻云直播:場景、技術(shù)及優(yōu)化
項(xiàng)望烽:移動(dòng) IM 開發(fā)之登錄優(yōu)化
網(wǎng)易云信∣真正穩(wěn)定的IM云服務(wù)
http://netease.im/ ? 長按識(shí)別,關(guān)注精彩
點(diǎn)擊閱讀原文,進(jìn)入云信官網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的周梁伟:聊天室架构 如何跳出传统思维来设计?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 战友!6.19决战光荣日,一个真实的魔兽
- 下一篇: 它是光荣的象征, 得到它一定没有Bug!