三大措施助力連接提速 網易雲信打造智慧IM雲架構

圖片描述
編者按:互聯網+時代,消息量級的大幅上升,消息形式的多元化,給即時通訊雲服務平臺帶來了非常大的挑戰。網易雲信不僅能夠完美支持千萬數量級的高併發消息量,還與此同時做到了穩定和快速。這背後究竟有着什麼樣的架構和特性?


現在,更多面向衣食住行的應用產品早已具備即時通訊功能,即時通訊作爲一個連接人與人的功能,在各個場景中都不可或缺。據《中國互聯網絡發展狀況統計報告》顯示,2016年6月中國即時通信用戶規模達6.42億人,網民使用率爲90.4%。越來越多的企業和廠商正在進行轉型,將會進一步拉動雲服務市場的快速發展。企業級的IM雲服務,作爲最通用、最活躍、最剛性的需求,極有可能成爲中國企業服務的入口級應用,同時也成爲被國內衆多巨頭主力拓展的市場。CSDN採訪了網易雲信首席架構師周樑偉,針對企業級IM架構如何支持高併發且安全、穩定等話題做出了深入的探討。

IM雲市場,機遇與挑戰並存

在如今互聯網+的浪潮下,各產品在節奏快的情況下,選用IM雲服務是必然趨勢。這對IM雲服務市場的各家平臺,是一種機遇,同時也是一個全新高度的挑戰。在互聯網+時代,消息量級的大幅上升,消息形式的多元化,給IM雲服務平臺帶來了非常大的挑戰。如何支持更大數量級的高併發消息量,並能夠做到穩定和快速,成爲各IM雲服務平臺的重中之重。

“智慧IM雲架構”—— IM雲分層架構

周樑偉表示,網易正是看到了這一趨勢,憑藉在即時通訊領域長達16年的經驗與技術積累,推出了網易雲信即時通訊雲服務(PaaS)。網易雲信在用戶的設備之間建立了一個可靠的端到端的連接,在不同的場景中用不同的方式投遞消息,不同類型的消息會產生不同的消息行爲,在網易雲信的消息通道中有內容審覈和數據同步。開發者通過集成客戶端SDK和雲端OPEN API,即可快速實現強大的IM功能,作爲PaaS服務模式的網易雲信全面支持Android、iOS、Web、PC等多平臺。

周樑偉首先介紹下網易雲信的技術框架,有助於大家系統的理解雲信產品的設計思路:

圖片描述

• 客戶端SDK層:SDK多平臺適配、移動弱網絡優化、安全加密壓縮。

• 連接層:長連接管理優化、支持平滑升級、支持跨網絡切換、廣播分包。

• 路由層:用來解耦並提供高可用和易擴展等特性,同時提供協議路由服務,代爲分發業務請求。

• 業務層:處理具體的客戶端請求,並返回結果。提供後端直連DB、cache等各種基礎服務。高可用,彈性擴展。

核心功能:連接

“IM服務架構最核心的功能就是“連接“,它需要解決的最基本的問題是穩定,安全和快速”,周樑偉對IM架構需求作出了明確說明。

穩定

網易雲信的SDK採用長連接機制來實現,並且由SDK+心跳的方式來檢測斷線和自動做重連,同時針對移動網絡等弱網環境,對SDK做大量的優化工作。對移動端/PC端,雲信使用TCP來連接客戶端與服務器。對Web端,雲信使用Socket.IO協議,實現長連接的同時,也解決了瀏覽器的兼容性問題。

安全

網易雲信對所有在公網傳輸的數據都進行了加密。在SDK與服務器的連接建立過程中有一個複雜的祕鑰協商過程,客戶端需要生成一個一次性使用的加密祕鑰,並使用非對稱加密方式將這個祕鑰加密之後傳給服務器,這個加密數據會被服務器解密,之後該加密祕鑰被保留在該長連接的會話信息中,數據來往均使用該祕鑰加密,這是一個流式加密,能夠有效防止中間人攻擊和數據包回放等攻擊手段。對於web端則通過Https來保證Socket.IO協議的數據安全。

快速

網易雲信藉助LBS服務,幫助客戶端尋找到最適合自己的網關接入點。同時,在連接建立之後,長連接的機制可以極大提升消息上下行的速度,並且在數據傳輸過程中,對數據包壓縮傳輸,降低網絡開銷來提升消息收發的速度。對頻繁的前後臺切換和重登陸這種移動客戶端場景,SDK提供自動登錄和重連等機制,即在UI界面起來的同時已經提前把消息通道建立。在接入網關的選擇策略中,通過並行來提升連接建立的速度。

連接層管理優化

消息快速到達的前提是客戶端和服務器之間保持了穩定的快速的連接,所以連接層可以理解爲奠定雲信服務穩定性的基石。網易雲信採取三大優化措施,全面助力連接層的提速和併發提升:

優化一:通過邊緣節點優化網絡拓撲

區域性網絡問題是任何一個應用或者服務都會面臨的問題,特別是對IM這類對於網絡質量特別敏感的服務。網易雲信通過部署區域性的邊緣加速節點的方式來優化網絡拓撲,提升網絡質量。網易雲信目前在海外,像美國,歐洲,中東和東南亞等很多國家和地區提供了這類邊緣加速節點,加速節點和數據中心之間再通過專線等優質網絡做互通,將整個用戶鏈路中的關鍵路徑替換成IDC之間的專線,大幅提升連接的穩定性和速度。通過優化,客戶端到IDC中心的速度從之前的500+ms銳減至200ms,實現提速60%。同時,消息丟失率也從之前的20%+降低到0%。

優化二:場景化的消息分發機制提升吞吐率

點對點的消息分發模式非常依賴用戶的在線狀態。在消息分發過程中,一次在線狀態的查詢假定需要10ms,如果有100人發送消息,僅查詢在線狀態的開銷就要1秒鐘,並且這個時間開銷還會隨着消息接收人數的增加而成倍增加,再加上中間消息包的網絡分發開銷,這個消息處理的時間很快就會到達瓶頸。在聊天室場景下,這個問題就尤爲突出。網易雲信針對這種特殊的消息分發場景實現了一種消息分發的廣播模式。假定一個100萬人的聊天室,所有用戶分佈在10個連接節點上,一條廣播消息在分發過程中只需要查詢一次在線狀態,並給每個Link分發一個廣播包,到最終用戶端的消息包由Link節點做內存拆包和下發,並且不同的節點之間可以完全並行處理。這種方式的消息分發使一個百萬量級的消息分發任務可以在秒級處理時間之內完成,對消息接收者來說也能有效控制消息到達的延時情況。

優化三:集羣化解決單節點性能瓶頸

通過組建集羣來對業務處理能力做水平擴展是雲信常用的一種方法。雲信最初在設計針對Web瀏覽器的長連接服務器時,由於服務器既需要處理SSL編解碼,請求包的格式轉換,又要做長連接的管理,這直接導致了服務器性能很快達到瓶頸。特別是在用戶側的連接有比較頻繁的重建的場景下,大部分的CPU資源都花在了SSL握手過程中。

連接建立之後,最終要的事情就是要開始做消息的分發投遞了。爲了應對聊天室這類特殊的消息場景,雲信將消息的投遞分拆到了兩層上,並將大頭計算量往前移到了連接服務器上;前置的連接服務器的壓力會變大;針對這種情況引起的單個節點性能瓶頸,通過集羣化和分離功能的方式來提升系統性能。

IM服務化和高可用

任何一個軟件系統對數據庫,存儲平臺和緩存平臺等基礎資源的依賴都非常強,這類基礎平臺資源的服務質量和強大的擴展能力會直接影響到整體系統的穩定性。雲信集成了網易自研的分佈式數據庫,分佈式緩存和對象存儲服務等基礎平臺,使雲信在面對業務擴容需求時更加從容。此外,雲信還集成了如反垃圾雲,視頻雲等面向具體業務的雲服務,更加專業的團隊來爲雲信的基礎功能保駕護航。談到網易雲信作爲即時通訊雲平臺的高可用性話題,核心功能保證99.99%的可靠性,一年不可用時長要小於52分鐘,周樑偉解釋要想要做到如此,必須做到以下兩個方面:“第一、開發團隊需要極高的運維意識,在開發設計時就注重應用的可用性和擴展性。第二,運維團隊瞭解開發,通過專業的運維能力幫助開發規避風險。運維和開發相互合作,打造了雲信的穩定。同時,容災也是必不可少的。“

圖片描述

周樑偉講解了雲信的架構模式及邏輯關係:

網關接入層,負責客戶端長連接的維護和管理,所有的接入節點甚至可以是無狀態的對等節點,只負責客戶端與服務器之間請求的傳遞的轉發,並優化轉發效率;網關接入層在實際部署時會同時分佈到不同的網絡環境中,比如分佈在異地的兩個機房中。

業務層,需要處理大量請求並負責和DB、緩存、隊列,第三方接口等組件的交互,其穩定性,可用性和擴展能力直接影響了整個雲服務的質量。爲了使業務層具有更好的彈性,雲信在網關接入層和業務層之間引入了一個路由層來解耦。業務節點在上線之後會將自己註冊到服務中心,路由節點會轉接網關層的請求包,並從服務節點中挑選匹配的節點分發請求,這種三層架構使系統整體具有更好的彈性。爲了提高業務的可用性,雲信會將業務節點分佈到分屬於不同網絡的環境中,一旦其中一個環境的網絡或者基礎設施出現故障,雲信可以快速得通過路由層來將故障集羣下線。

支持灰度升級模式,雲信可以將其中部分業務節點升級,然後通過路由層的配置將指定的用戶流量導入到新升級的節點中。

專屬服務的靈活支持,對於一些對資源獨佔需求比較強烈的客戶,我們可以通過路由層將該客戶應用下的所有流量導入到獨立的集羣中。

網易雲信在雲服務時代,不把自己定義爲一個狹義上社交工具,雲信可以定義爲一個OTT,以即時通訊爲切入,提供一個管道,用戶通過網易雲信的管道可以實現任何意義上連接服務,而不限於IM:可以是電商平臺,可以是社區,可以是在線教育,用戶可以做任何一個他想做的產品。

小結

網易雲信從2015年10月13日上線至今,積累了大量的用戶,非常多的開發者加入進來。據統計,雲心已成功接入15萬+APP開發者,覆蓋用戶達到驚人的5億+。在網絡和區域上面覆蓋了196個國家,567個地區,並保證100%的送達率。除此之外,還獲得了國內即時通訊雲服務領域的首個CSA-STAR和ISO27001認證,並已擁有56項認證專利。雲信作爲一個場景化雲服務提供者,本着便捷開發者使用的初衷,與大家共同創建即時通訊雲的未來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章