您當前的位置是:  首頁 > 資訊 > 文章精選 >
 首頁 > 資訊 > 文章精選 >

穩(wěn)健、可靠全真即時通信網(wǎng)的架構與應用

2021-05-26 15:27:23   作者:劉然    來源:LiveVideoStack   評論:0  點擊:


  導語
  支撐全真互聯(lián)網(wǎng)的基礎網(wǎng)絡包括實時音視頻通信網(wǎng)絡、即時通信網(wǎng)絡和流媒體分發(fā)網(wǎng)絡。隨著社會的進步,人們對低延時即時通信的需求越來越高。本次LiveVideoStackCon 2021上海站大會邀請到了負責騰訊云千億級底層通信網(wǎng)絡的劉然,他為我們分享了穩(wěn)健、可靠的全真即時通信網(wǎng)的架構與應用實踐。
  大家下午好,我是來自騰訊云通信的后臺研發(fā)劉然。剛剛提到全真互聯(lián)網(wǎng)及“三合一”基礎網(wǎng)絡RT-ONE,它具體包括了實時音視頻通信網(wǎng)絡、即時通信網(wǎng)絡和流媒體分發(fā)網(wǎng)絡。前面薛笛已經(jīng)為大家介紹了實時音視頻通信網(wǎng)絡,接下來我給大家分享即時通信網(wǎng)絡的一些技術點和應用場景實踐。
  今天分享將從4個方面展開,包括即時通信網(wǎng)的介紹、核心技術點、融合場景的解決方案以及典型的應用場景。
  01即時通信網(wǎng)簡介
  即時通信網(wǎng)絡可以用來做什么呢?包括信令消息、雙人或者多人音視頻通話的邀請請求、上下麥的連麥請求、教育白板里的白板軌跡、直播場景下的紅包,點贊,送禮等。除此之外,我們還有社交的場景——單聊、群聊、直播大房間,以及圖文、語音、視頻、自定義消息,在終端方面支持全平臺多功能覆蓋,支持微信、QQ、支付寶、百度、頭條等類似的小程序。從數(shù)據(jù)上看,騰訊云即時通信IM的月活已經(jīng)超過QQ的月活,海外也有數(shù)千萬的用戶分布在200多個國家和地區(qū)。

  上圖是騰訊云即時通信的基本架構。SDK層可分為網(wǎng)絡連接層、邏輯層、數(shù)據(jù)層和監(jiān)控,在此之上是API接口層,再往上是給開發(fā)者提供的TUIKIT,這是一種非常方便的aPaaS的能力。除了SDK,后臺模塊也有很多,除了最上層的接入層,還有業(yè)務邏輯層、數(shù)據(jù)存儲層,以及一些和運營系統(tǒng)相關的邏輯。做IM要考慮到很多點,包括高可靠、高性能、高可用、可擴展和安全性等等,另外還有日常的開發(fā)運營維護等成本。
  如何快速搭建一套IM系統(tǒng)呢?現(xiàn)在只需要集成騰訊云SDK就可以輕松實現(xiàn),騰訊云提供了全平臺、多終端SDK,它和騰訊云后臺打通以后,就可以和業(yè)務后臺進行交互。在疫情中發(fā)揮重要的明星產(chǎn)品騰訊會議之所以能夠抓住機會,是各方面因素的共同結果,這其中非常重要的一點是騰訊會議的底層運用了我們的全套通信能力,包括實時音視頻、IM、PSTN、TPNS等能力,基于這些基礎能力的支撐,騰訊會議可以把更多的精力放在核心能力打造上,這也是我們做PaaS服務的初心——基于多年的積累把基礎的能力產(chǎn)品化再將其商業(yè)化,并開放給開發(fā)者,這樣除了可以降本增效,還可以加速業(yè)務創(chuàng)新。這個能力除了騰訊會議,騰訊公司內部有幾十款產(chǎn)品都在使用,并且國內外的開發(fā)者和客戶多達數(shù)十萬家。
  02核心技術點分享
  前面簡單介紹了IM,接下來我將針對其中設計的核心技術點做詳細講解。我們今天的主題是全真互聯(lián)網(wǎng),所以不論是IM、音視頻流媒體還是實時音視頻都離不開網(wǎng)絡。
  2.1 IM全球加速網(wǎng)絡
  現(xiàn)在跨國之間的通信有兩種,一種是衛(wèi)星通信,另一種是海底光纜通信。因為衛(wèi)星通信成本高、帶寬低,所以目前的應用還不是十分廣泛。因此,大部分的通信方式都是依靠海底光纜。
  我國海底光纜現(xiàn)狀有三點:首先,國際網(wǎng)絡環(huán)境復雜,容易抖動丟包。其次,整個中國出口的帶寬很小!禖NNIC第47次中國互聯(lián)網(wǎng)報告》提到整個中國出口帶寬大概是11.5T,雖然每年的增長速度很快,但是相比去年全球400T的規(guī)模還是非常小的。全球人口總計70多億,互聯(lián)網(wǎng)人口只有40多億,中國可能只占據(jù)10多億。對比可以發(fā)現(xiàn)中國人均的帶寬非常低,經(jīng)常出現(xiàn)擁塞問題。最后國際訪問經(jīng)常繞行,直連時延高。在這樣的背景之下,IM會有登錄慢、斷網(wǎng)和消息延時的現(xiàn)象。
  
  上圖是騰訊云實測的從廣州到雅加達的路由數(shù)據(jù),這個數(shù)據(jù)是繞行的,大概在260ms。正常情況下,通過騰訊云自己的網(wǎng)絡,例如從廣州到香港或者到新加坡的直連、再到雅加達,大概只有50+ ms,差距很明顯。一個好消息是前不久騰訊云在雅加達正式開區(qū)了,那里有騰訊自建的數(shù)據(jù)中心,能將我們的能力更多的覆蓋到東南亞地區(qū)。
  2.2 IM全球網(wǎng)絡加速能力
  
  當前騰訊云全球加速能力已經(jīng)覆蓋六大洲的主要國家,包括120個接入點、2100+節(jié)點,提供了全球的服務。10或20年前,中國企業(yè)更多的是設備廠商出海,例如華為、聯(lián)想和TCL這樣的企業(yè)。移動互聯(lián)網(wǎng)的到來促使了更多的工具類企業(yè)出海,獵豹移動就是比較成功的案例,之后包括電商、社交、游戲、短視頻相關的出海在不斷增加。雖然現(xiàn)在國際形勢比較緊張,但是全球化對于中國來說是非常好的機會,希望大家能把握好這個機會,把業(yè)務向全球拓展。
  2.3 系統(tǒng)架構與加速原理
  
  如果想打造高速的網(wǎng)絡,不僅需要了解如何選擇一個最近的點,還需要知道如何在路由之間快速地交換以到達自己的源站。有三個核心點——如何選擇最優(yōu)接入、如何選擇最快的路由以及如何提升傳輸速率。
  2.3.1 精準IP調度
  接入點方面,騰訊云有自己的公網(wǎng)評測平臺,對各種加速點的數(shù)據(jù)進行實時計算,然后生成一個調度平臺。當用戶接入時,根據(jù)調度平臺為用戶選擇一個最優(yōu)的接入點。同時,因為這個平臺是實時的,所以在用戶使用中也會進行實時的干預。當發(fā)現(xiàn)有最優(yōu)的路徑后,平臺會將調度信息推送給用戶側,用戶下次使用時會選擇最優(yōu)的路徑。
  
  上圖右側是我們實時干預以后的效果展示。在馬尼拉的網(wǎng)絡出現(xiàn)故障以后,郵件告警即使生成,平臺把馬尼拉的路徑即時屏蔽掉,自動選擇其他的路徑進行調度,做到對用戶側無感,同時也極大了提升了接入質量和運營效率。
  2.3.2 通信協(xié)議優(yōu)化
 
  找到最優(yōu)接入點后,我們在路由之間做了一些協(xié)議改造。用戶一開始是以TCP或者UDP的方式傳輸,接著在路由之間是以QUIC加速的方式進行路由的中轉。QUIC的0RTT、連接復用和擁塞控制算法等能力都是非常優(yōu)秀的。在數(shù)據(jù)安全方面,客戶在做業(yè)務時大多都有自己的數(shù)據(jù)包加密,騰訊云的路由之間也有數(shù)據(jù)加密,同時會有預建連等技術,這里就不詳細介紹了。
  2.3.3 最優(yōu)路由選址
  
  那么如何選擇路線呢?比如上圖從迪拜到圣保羅可能有兩條路徑:一條是公網(wǎng)路徑,另一條是全球加速路徑。如果走公網(wǎng),雖然看起來距離會短一些,但數(shù)據(jù)時延為459ms;而通過騰訊云中轉,經(jīng)過倫敦再到迪拜,整個過程只需要304ms。我們將每個加速點都作為一個節(jié)點,加速點與加速點之間有一個邊連接,根據(jù)時延和丟包率計算出一個等比的邊,再根據(jù)邊的長度選擇一個最優(yōu)的路徑。同時,如果回來時存在另一條最優(yōu)的路徑,那么會選擇這條最優(yōu)路徑,而不是之前的,這樣就可以保證回程、去程的雙面加速,最后補充下,我們是在公網(wǎng)和專線之間選擇一個最優(yōu)的網(wǎng)絡,并不是說一定會走專線。
  2.3.4 多路無狀態(tài)傳輸
  
  路徑選好后,我們需要考慮如何提升傳輸速率,做法是將大包智能拆分成小包,小包通過多路并行傳輸,最后到達源站,這種方式可以提升效率,在一些場景下還會有小包合并為大包。兩邊會有狀態(tài),但是在鏈路中間是無狀態(tài)的,如果節(jié)點之間有抖動可以做到秒級踢出。此外,路徑之間還有預建連和連接復用的技術。
  
  上圖展現(xiàn)的是實際效果,一些區(qū)域的效果是非常明顯的——通過騰訊云加速,時延可以從200多ms降低到30多ms。通過測試,全球鏈路時延不超過300ms,實際驗證可以把平均時延降低24%,同時請求成功率提升17%。
  2.4 可靠的消息系統(tǒng)
  對于IM來說,完成選路以后,無論是信令消息還是其他普通消息,保證可靠性都是至關重要的,接下來和大家分享騰訊云消息系統(tǒng)的機制。大家從網(wǎng)上可能了解到QQ和微信的一些做法,微信是使用寫擴散的方式,但不管是寫擴散還是讀擴散,都是在一定業(yè)務場景之下來考慮的。
  
  騰訊云選擇的是讀擴散的模式。從上圖可以看到,對于收件人來說,以收件人為維度來儲存消息;對于群來說,是以群為維度儲存消息。消息的狀態(tài)一共有三種——已確認、未確認和待下發(fā)。收消息采用推拉結合的方式,當一個消息出現(xiàn),會把消息內容和通知發(fā)給接收端,接收端再上傳把消息拉回來。這里面會有sequence或者騰訊云自己的cookie控制時序的問題。對于群聊,目前是通過讀擴散的模型。如果群比較小,寫擴散確實比較方便,但當群的數(shù)量越來越大,比如微信群的數(shù)量上限是500人,可以使用寫擴散,而微信的視頻號和直播要使用寫擴散的模式是行不通的,很多都已經(jīng)改成了讀擴散的模式。騰訊云不僅可以支持500人的群,2000人乃至萬人的大群都能支持。
  
  上圖是我們自研消息存儲引擎,分為索引層和數(shù)據(jù)層,這是基本的拉消息的機制。目前騰訊云自己的能力已經(jīng)可以支持多拷貝的存儲,索引全部存在內存里,數(shù)據(jù)會分為冷、熱數(shù)據(jù)。熱數(shù)據(jù)會存在SSD盤里,冷數(shù)據(jù)會繼續(xù)下沉到云硬盤。此外,騰訊云還支持數(shù)據(jù)加密,同時我們在拉取數(shù)據(jù)方面也會更加靈活,支持指定SEQ拉取、指定時間區(qū)段拉取。
  2.5 億級別狀態(tài)系統(tǒng)
  
  對于IM來說,狀態(tài)系統(tǒng)也是非常重要的一點。舉個例子來理解狀態(tài)系統(tǒng),比如上下線——最開始的PC端QQ是否在線的狀態(tài)。當需要消息PUSH的時候,首先要查在線還是不在線,在線狀態(tài)才能走自己的PUSH通道,如果不在線就要通過廠商的離線PUSH通道。對于狀態(tài)系統(tǒng),采用分SHARD的模式,通過uin,做一致性哈希,分成一個個SHARD。SHARD支持水平擴展,對于每一個SHARD,也可支持垂直擴展,比如現(xiàn)在有三臺機器,隨著不斷增長的業(yè)務量,可以擴展成4臺或者5臺,擴容是非常高效的。除了在單地域,騰訊云可以多AZ或跨Region同步狀態(tài)實施。例如為了提升系統(tǒng)穩(wěn)定性,可以在上海和廣州各部署一臺,消息真正擴散的時候,并不是去遠程查詢(常規(guī)的做法是狀態(tài)存在Redis里,通過RPC的方式進行查詢)。騰訊云會分成多個SHARD,每一塊只負責某一個區(qū)段的帳號,當把信息請求過來時,只需要本地查詢就能將消息下發(fā)下去,非常高效。
  
  在做微信視頻號的時候,有提到如果把一億個人拉到一個群里會怎樣?這一定需要讀擴散的模式,寫擴散是完全不行的,這也是騰訊云即時通信IM的一個特色——無人數(shù)上限的直播群,很多客戶都會用到。這是一個基本的交互邏輯,看起來只是比較簡單的系統(tǒng)收發(fā),里面其實存在多級擴散。當收到消息后,經(jīng)過邏輯層的擴散,將其存儲到一個類似數(shù)據(jù)存儲層的結構里——這個數(shù)據(jù)存儲層可以儲存2分鐘或者5分鐘的一段時間內全部的消息,當用戶來拉取的時候,會按照就近的方式拉取。我們這里對消息采取一寫多讀的方式,具體的消息是一個環(huán)形的BUFFER,會記錄消息的偏移量,直播大群的群號、群ID、群消息的范圍也在里面。另外,網(wǎng)絡通信會有抖動和丟包,所以我們做了一個兜底的策略,將消息保存在高保障可靠存儲系統(tǒng),當發(fā)現(xiàn)消息的SEQ出現(xiàn)斷層,可以補拉,從而保證消息的高可靠。
  
  上圖是實際的補拉機制。補拉除了分鐘粒度維護索引之外,消息也會分優(yōu)先級。一個百萬人或者千萬人直播群的消息量是非常大的,消息里面可以設置優(yōu)先級,比如把紅包設置為高優(yōu)先級消息,點贊、送禮、彈幕設置為低優(yōu)先級消息,這樣可以保證紅包不會因為消息過多而丟失。騰訊云對此有一個淘汰機制,高優(yōu)先級消息會全量保存,這樣當客戶來拉消息是可以跳過非關鍵的彈幕數(shù)據(jù),直接把高優(yōu)先級數(shù)據(jù)合并后發(fā)給用戶端,保證用戶體驗。
  03融合場景的解決方案
  前面介紹了騰訊云的三個核心能力。對于IM來說,很多情況下不是單獨使用的,而是和其他一些能力結合使用。
  
  上圖是騰訊云底層能力。通信層我們有IM、移動推送、實時音視頻、直播、點播、CDN的能力,面向教育、電商、金融、政企等各個行業(yè)的客戶提供服務。服務主要分為三類:一是企業(yè)內部員工辦公、二是企業(yè)和客戶之間、三是用戶和用戶之間。此外,騰訊云還有PSTN、一鍵登錄、云呼叫中心和短信等其他通信能力。從行業(yè)來看目前騰訊云已經(jīng)是全國最大的綜合通信服務商。
  3.1 直播解決方案
  上圖是IM和其他業(yè)務場景的一些結合,包括TRTC、直播、點播等,這是用于低延時互動直播的,也支持各個端進行多人音視頻通話、低延時直播和PK連麥等類似的場景。
  3.2 在線課堂解決方案
  
  上圖是和教育白板相關的在線互動課堂解決方案。其中用到了騰訊云實時音視頻、IM、CDN和白板的能力。1對1小班課或者1對多大班課,乃至10萬人的直播課都可以結合騰訊云的通信PaaS以及白板能力,很快的開發(fā)出在線課堂的產(chǎn)品。
  04典型應用場景
  最后我將和大家簡單介紹一些使用IM的典型場景。
  4.1 企業(yè)內部場景
  
  騰訊會議底層已經(jīng)深度使用騰訊云通信的能力,包括主持人管理、消息和文件分享等等。在疫情期間,平安保險內訓也是通過直播的方式把騰訊云的IM集成進去。釘釘、企業(yè)微信提供的是標準化的SaaS產(chǎn)品,但是很多客戶因為業(yè)務場景原因會有更多的訴求和定制化的需求,為滿足這些訴求,需要把騰訊云的IM、TRTC集成進去,基于業(yè)務場景靈活開發(fā)產(chǎn)品,例如企業(yè)內通信的場景。
  4.2 企業(yè)與用戶場景 
  企業(yè)和用戶之間最常見的場景是客服。之前的客服模式是每個公司有專門的客服團隊,通過客服團隊來服務公司所有的產(chǎn)品,隨著互聯(lián)網(wǎng)紅利的消息,業(yè)務增長有拉新轉向存量客戶運營。未來客服會是非常重要的一環(huán),同時場景將更加分散,不再局限于某一個部門,每個產(chǎn)品都可能組建自己的小客服團隊,要搭建這樣一個呼叫中心和客服系統(tǒng)是很復雜的。騰訊云的云呼叫中心可以很方便的為客戶打造一個客服系統(tǒng)。
  在金融方面,不論是虛擬營業(yè)廳、證券還是保險都和直播互動結合得越來越緊密,因此會存在私密付費群,存在互動和推送的場景。
  此外除了前面提到的騰訊云在線教育方案,醫(yī)療也是一個很好的方向,醫(yī)療問診、實時的音視頻溝通、病例上傳分享都是很不錯的使用場景。
  4.3 用戶與用戶場景
  
  用戶與用戶之間的場景會更多,像線上社交直播、電商直播帶貨等等。電商直播會更多需要無人數(shù)上限的直播間,會有優(yōu)惠券、抽獎、送禮、貨物上下架、加購物車的訴求。陌生人社交場景會有附近的人、陌生人通信、精準匹配、個性裝扮等等訴求。另外在游戲互動方面也有很多應用場景。其實無論是直播、電商、陌生人社交還是游戲,都存在一個趨勢:以前只是提供一個產(chǎn)品給客戶使用就可以了,但是未來更多的產(chǎn)品會做社區(qū),以此來維護和客戶的關系,通過騰訊云的IM和TRTC可以很方便的把社區(qū)的通信能力搭建起來。
  以上是我今天的全部內容,感謝大家聆聽。
【免責聲明】本文僅代表作者本人觀點,與CTI論壇無關。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

專題

CTI論壇會員企業(yè)