連接層管理優(yōu)化
消息快速到達(dá)的前提是客戶端和服務(wù)器之間保持了穩(wěn)定的快速的連接,所以連接層可以理解為奠定云信服務(wù)穩(wěn)定性的基石。網(wǎng)易云信采取三大優(yōu)化措施,全面助力連接層的提速和并發(fā)提升:
優(yōu)化一:通過邊緣節(jié)點(diǎn)優(yōu)化網(wǎng)絡(luò)拓?fù)?/strong>
區(qū)域性網(wǎng)絡(luò)問題是任何一個(gè)應(yīng)用或者服務(wù)都會面臨的問題,特別是對IM這類對于網(wǎng)絡(luò)質(zhì)量特別敏感的服務(wù)。網(wǎng)易云信通過部署區(qū)域性的邊緣加速節(jié)點(diǎn)的方式來優(yōu)化網(wǎng)絡(luò)拓?fù)?,提升網(wǎng)絡(luò)質(zhì)量。網(wǎng)易云信目前在海外,像美國,歐洲,中東和東南亞等很多國家和地區(qū)提供了這類邊緣加速節(jié)點(diǎn),加速節(jié)點(diǎn)和數(shù)據(jù)中心之間再通過專線等優(yōu)質(zhì)網(wǎng)絡(luò)做互通,將整個(gè)用戶鏈路中的關(guān)鍵路徑替換成IDC之間的專線,大幅提升連接的穩(wěn)定性和速度。通過優(yōu)化,客戶端到IDC中心的速度從之前的500+ms銳減至200ms,實(shí)現(xiàn)提速60%。同時(shí),消息丟失率也從之前的20%+降低到0%。
優(yōu)化二:場景化的消息分發(fā)機(jī)制提升吞吐率
點(diǎn)對點(diǎn)的消息分發(fā)模式非常依賴用戶的在線狀態(tài)。在消息分發(fā)過程中,一次在線狀態(tài)的查詢假定需要10ms,如果有100人發(fā)送消息,僅查詢在線狀態(tài)的開銷就要1秒鐘,并且這個(gè)時(shí)間開銷還會隨著消息接收人數(shù)的增加而成倍增加,再加上中間消息包的網(wǎng)絡(luò)分發(fā)開銷,這個(gè)消息處理的時(shí)間很快就會到達(dá)瓶頸。在聊天室場景下,這個(gè)問題就尤為突出。網(wǎng)易云信針對這種特殊的消息分發(fā)場景實(shí)現(xiàn)了一種消息分發(fā)的廣播模式。假定一個(gè)100萬人的聊天室,所有用戶分布在10個(gè)連接節(jié)點(diǎn)上,一條廣播消息在分發(fā)過程中只需要查詢一次在線狀態(tài),并給每個(gè)Link分發(fā)一個(gè)廣播包,到最終用戶端的消息包由Link節(jié)點(diǎn)做內(nèi)存拆包和下發(fā),并且不同的節(jié)點(diǎn)之間可以完全并行處理。這種方式的消息分發(fā)使一個(gè)百萬量級的消息分發(fā)任務(wù)可以在秒級處理時(shí)間之內(nèi)完成,對消息接收者來說也能有效控制消息到達(dá)的延時(shí)情況。
優(yōu)化三:集群化解決單節(jié)點(diǎn)性能瓶頸
通過組建集群來對業(yè)務(wù)處理能力做水平擴(kuò)展是云信常用的一種方法。云信最初在設(shè)計(jì)針對Web瀏覽器的長連接服務(wù)器時(shí),由于服務(wù)器既需要處理SSL編解碼,請求包的格式轉(zhuǎn)換,又要做長連接的管理,這直接導(dǎo)致了服務(wù)器性能很快達(dá)到瓶頸。特別是在用戶側(cè)的連接有比較頻繁的重建的場景下,大部分的CPU資源都花在了SSL握手過程中。
連接建立之后,最終要的事情就是要開始做消息的分發(fā)投遞了。為了應(yīng)對聊天室這類特殊的消息場景,云信將消息的投遞分拆到了兩層上,并將大頭計(jì)算量往前移到了連接服務(wù)器上;前置的連接服務(wù)器的壓力會變大;針對這種情況引起的單個(gè)節(jié)點(diǎn)性能瓶頸,通過集群化和分離功能的方式來提升系統(tǒng)性能。
IM服務(wù)化和高可用
任何一個(gè)軟件系統(tǒng)對數(shù)據(jù)庫,存儲平臺和緩存平臺等基礎(chǔ)資源的依賴都非常強(qiáng),這類基礎(chǔ)平臺資源的服務(wù)質(zhì)量和強(qiáng)大的擴(kuò)展能力會直接影響到整體系統(tǒng)的穩(wěn)定性。云信集成了網(wǎng)易自研的分布式數(shù)據(jù)庫,分布式緩存和對象存儲服務(wù)等基礎(chǔ)平臺,使云信在面對業(yè)務(wù)擴(kuò)容需求時(shí)更加從容。此外,云信還集成了如反垃圾云,視頻云等面向具體業(yè)務(wù)的云服務(wù),更加專業(yè)的團(tuán)隊(duì)來為云信的基礎(chǔ)功能保駕護(hù)航。談到網(wǎng)易云信作為即時(shí)通訊云平臺的高可用性話題,核心功能保證99.99%的可靠性,一年不可用時(shí)長要小于52分鐘,周梁偉解釋要想要做到如此,必須做到以下兩個(gè)方面:“第一、開發(fā)團(tuán)隊(duì)需要極高的運(yùn)維意識,在開發(fā)設(shè)計(jì)時(shí)就注重應(yīng)用的可用性和擴(kuò)展性。第二,運(yùn)維團(tuán)隊(duì)了解開發(fā),通過專業(yè)的運(yùn)維能力幫助開發(fā)規(guī)避風(fēng)險(xiǎn)。運(yùn)維和開發(fā)相互合作,打造了云信的穩(wěn)定。同時(shí),容災(zāi)也是必不可少的。“
周梁偉講解了云信的架構(gòu)模式及邏輯關(guān)系:
網(wǎng)關(guān)接入層,負(fù)責(zé)客戶端長連接的維護(hù)和管理,所有的接入節(jié)點(diǎn)甚至可以是無狀態(tài)的對等節(jié)點(diǎn),只負(fù)責(zé)客戶端與服務(wù)器之間請求的傳遞的轉(zhuǎn)發(fā),并優(yōu)化轉(zhuǎn)發(fā)效率;網(wǎng)關(guān)接入層在實(shí)際部署時(shí)會同時(shí)分布到不同的網(wǎng)絡(luò)環(huán)境中,比如分布在異地的兩個(gè)機(jī)房中。
業(yè)務(wù)層,需要處理大量請求并負(fù)責(zé)和DB、緩存、隊(duì)列,第三方接口等組件的交互,其穩(wěn)定性,可用性和擴(kuò)展能力直接影響了整個(gè)云服務(wù)的質(zhì)量。為了使業(yè)務(wù)層具有更好的彈性,云信在網(wǎng)關(guān)接入層和業(yè)務(wù)層之間引入了一個(gè)路由層來解耦。業(yè)務(wù)節(jié)點(diǎn)在上線之后會將自己注冊到服務(wù)中心,路由節(jié)點(diǎn)會轉(zhuǎn)接網(wǎng)關(guān)層的請求包,并從服務(wù)節(jié)點(diǎn)中挑選匹配的節(jié)點(diǎn)分發(fā)請求,這種三層架構(gòu)使系統(tǒng)整體具有更好的彈性。為了提高業(yè)務(wù)的可用性,云信會將業(yè)務(wù)節(jié)點(diǎn)分布到分屬于不同網(wǎng)絡(luò)的環(huán)境中,一旦其中一個(gè)環(huán)境的網(wǎng)絡(luò)或者基礎(chǔ)設(shè)施出現(xiàn)故障,云信可以快速得通過路由層來將故障集群下線。