支撐全真互聯(lián)網(wǎng)的基礎網(wǎng)絡(luò )包括實(shí)時(shí)音視頻通信網(wǎng)絡(luò )、即時(shí)通信網(wǎng)絡(luò )和流媒體分發(fā)網(wǎng)絡(luò )。隨著(zhù)社會(huì )的進(jìn)步,人們對低延時(shí)即時(shí)通信的需求越來(lái)越高。本次LiveVideoStackCon 2021上海站大會(huì )邀請到了負責騰訊云千億級底層通信網(wǎng)絡(luò )的劉然,他為我們分享了穩健、可靠的全真即時(shí)通信網(wǎng)的架構與應用實(shí)踐。
大家下午好,我是來(lái)自騰訊云通信的后臺研發(fā)劉然。剛剛提到全真互聯(lián)網(wǎng)及“三合一”基礎網(wǎng)絡(luò )RT-ONE,它具體包括了實(shí)時(shí)音視頻通信網(wǎng)絡(luò )、即時(shí)通信網(wǎng)絡(luò )和流媒體分發(fā)網(wǎng)絡(luò )。前面薛笛已經(jīng)為大家介紹了實(shí)時(shí)音視頻通信網(wǎng)絡(luò ),接下來(lái)我給大家分享即時(shí)通信網(wǎng)絡(luò )的一些技術(shù)點(diǎn)和應用場(chǎng)景實(shí)踐。
今天分享將從4個(gè)方面展開(kāi),包括即時(shí)通信網(wǎng)的介紹、核心技術(shù)點(diǎn)、融合場(chǎng)景的解決方案以及典型的應用場(chǎng)景。
01即時(shí)通信網(wǎng)簡(jiǎn)介

即時(shí)通信網(wǎng)絡(luò )可以用來(lái)做什么呢?包括信令消息、雙人或者多人音視頻通話(huà)的邀請請求、上下麥的連麥請求、教育白板里的白板軌跡、直播場(chǎng)景下的紅包,點(diǎn)贊,送禮等。除此之外,我們還有社交的場(chǎng)景——單聊、群聊、直播大房間,以及圖文、語(yǔ)音、視頻、自定義消息,在終端方面支持全平臺多功能覆蓋,支持微信、QQ、支付寶、百度、頭條等類(lèi)似的小程序。從數據上看,騰訊云即時(shí)通信IM的月活已經(jīng)超過(guò)QQ的月活,海外也有數千萬(wàn)的用戶(hù)分布在200多個(gè)國家和地區。


上圖是騰訊云即時(shí)通信的基本架構。SDK層可分為網(wǎng)絡(luò )連接層、邏輯層、數據層和監控,在此之上是API接口層,再往上是給開(kāi)發(fā)者提供的TUIKIT,這是一種非常方便的aPaaS的能力。除了SDK,后臺模塊也有很多,除了最上層的接入層,還有業(yè)務(wù)邏輯層、數據存儲層,以及一些和運營(yíng)系統相關(guān)的邏輯。做IM要考慮到很多點(diǎn),包括高可靠、高性能、高可用、可擴展和安全性等等,另外還有日常的開(kāi)發(fā)運營(yíng)維護等成本。

如何快速搭建一套IM系統呢?現在只需要集成騰訊云SDK就可以輕松實(shí)現,騰訊云提供了全平臺、多終端SDK,它和騰訊云后臺打通以后,就可以和業(yè)務(wù)后臺進(jìn)行交互。在疫情中發(fā)揮重要的明星產(chǎn)品騰訊會(huì )議之所以能夠抓住機會(huì ),是各方面因素的共同結果,這其中非常重要的一點(diǎn)是騰訊會(huì )議的底層運用了我們的全套通信能力,包括實(shí)時(shí)音視頻、IM、PSTN、TPNS等能力,基于這些基礎能力的支撐,騰訊會(huì )議可以把更多的精力放在核心能力打造上,這也是我們做PaaS服務(wù)的初心——基于多年的積累把基礎的能力產(chǎn)品化再將其商業(yè)化,并開(kāi)放給開(kāi)發(fā)者,這樣除了可以降本增效,還可以加速業(yè)務(wù)創(chuàng )新。這個(gè)能力除了騰訊會(huì )議,騰訊公司內部有幾十款產(chǎn)品都在使用,并且國內外的開(kāi)發(fā)者和客戶(hù)多達數十萬(wàn)家。
02核心技術(shù)點(diǎn)分享
前面簡(jiǎn)單介紹了IM,接下來(lái)我將針對其中設計的核心技術(shù)點(diǎn)做詳細講解。我們今天的主題是全真互聯(lián)網(wǎng),所以不論是IM、音視頻流媒體還是實(shí)時(shí)音視頻都離不開(kāi)網(wǎng)絡(luò )。
2.1 IM全球加速網(wǎng)絡(luò )
現在跨國之間的通信有兩種,一種是衛星通信,另一種是海底光纜通信。因為衛星通信成本高、帶寬低,所以目前的應用還不是十分廣泛。因此,大部分的通信方式都是依靠海底光纜。
我國海底光纜現狀有三點(diǎn):首先,國際網(wǎng)絡(luò )環(huán)境復雜,容易抖動(dòng)丟包。其次,整個(gè)中國出口的帶寬很小。《CNNIC第47次中國互聯(lián)網(wǎng)報告》提到整個(gè)中國出口帶寬大概是11.5T,雖然每年的增長(cháng)速度很快,但是相比去年全球400T的規模還是非常小的。全球人口總計70多億,互聯(lián)網(wǎng)人口只有40多億,中國可能只占據10多億。對比可以發(fā)現中國人均的帶寬非常低,經(jīng)常出現擁塞問(wèn)題。最后國際訪(fǎng)問(wèn)經(jīng)常繞行,直連時(shí)延高。在這樣的背景之下,IM會(huì )有登錄慢、斷網(wǎng)和消息延時(shí)的現象。

上圖是騰訊云實(shí)測的從廣州到雅加達的路由數據,這個(gè)數據是繞行的,大概在260ms。正常情況下,通過(guò)騰訊云自己的網(wǎng)絡(luò ),例如從廣州到香港或者到新加坡的直連、再到雅加達,大概只有50+ ms,差距很明顯。一個(gè)好消息是前不久騰訊云在雅加達正式開(kāi)區了,那里有騰訊自建的數據中心,能將我們的能力更多的覆蓋到東南亞地區。
2.2 IM全球網(wǎng)絡(luò )加速能力

當前騰訊云全球加速能力已經(jīng)覆蓋六大洲的主要國家,包括120個(gè)接入點(diǎn)、2100+節點(diǎn),提供了全球的服務(wù)。10或20年前,中國企業(yè)更多的是設備廠(chǎng)商出海,例如華為、聯(lián)想和TCL這樣的企業(yè)。移動(dòng)互聯(lián)網(wǎng)的到來(lái)促使了更多的工具類(lèi)企業(yè)出海,獵豹移動(dòng)就是比較成功的案例,之后包括電商、社交、游戲、短視頻相關(guān)的出海在不斷增加。雖然現在國際形勢比較緊張,但是全球化對于中國來(lái)說(shuō)是非常好的機會(huì ),希望大家能把握好這個(gè)機會(huì ),把業(yè)務(wù)向全球拓展。
2.3 系統架構與加速原理

如果想打造高速的網(wǎng)絡(luò ),不僅需要了解如何選擇一個(gè)最近的點(diǎn),還需要知道如何在路由之間快速地交換以到達自己的源站。有三個(gè)核心點(diǎn)——如何選擇最優(yōu)接入、如何選擇最快的路由以及如何提升傳輸速率。
2.3.1 精準IP調度
接入點(diǎn)方面,騰訊云有自己的公網(wǎng)評測平臺,對各種加速點(diǎn)的數據進(jìn)行實(shí)時(shí)計算,然后生成一個(gè)調度平臺。當用戶(hù)接入時(shí),根據調度平臺為用戶(hù)選擇一個(gè)最優(yōu)的接入點(diǎn)。同時(shí),因為這個(gè)平臺是實(shí)時(shí)的,所以在用戶(hù)使用中也會(huì )進(jìn)行實(shí)時(shí)的干預。當發(fā)現有最優(yōu)的路徑后,平臺會(huì )將調度信息推送給用戶(hù)側,用戶(hù)下次使用時(shí)會(huì )選擇最優(yōu)的路徑。

上圖右側是我們實(shí)時(shí)干預以后的效果展示。在馬尼拉的網(wǎng)絡(luò )出現故障以后,郵件告警即使生成,平臺把馬尼拉的路徑即時(shí)屏蔽掉,自動(dòng)選擇其他的路徑進(jìn)行調度,做到對用戶(hù)側無(wú)感,同時(shí)也極大了提升了接入質(zhì)量和運營(yíng)效率。
2.3.2 通信協(xié)議優(yōu)化

找到最優(yōu)接入點(diǎn)后,我們在路由之間做了一些協(xié)議改造。用戶(hù)一開(kāi)始是以TCP或者UDP的方式傳輸,接著(zhù)在路由之間是以QUIC加速的方式進(jìn)行路由的中轉。QUIC的0RTT、連接復用和擁塞控制算法等能力都是非常優(yōu)秀的。在數據安全方面,客戶(hù)在做業(yè)務(wù)時(shí)大多都有自己的數據包加密,騰訊云的路由之間也有數據加密,同時(shí)會(huì )有預建連等技術(shù),這里就不詳細介紹了。
2.3.3 最優(yōu)路由選址

那么如何選擇路線(xiàn)呢?比如上圖從迪拜到圣保羅可能有兩條路徑:一條是公網(wǎng)路徑,另一條是全球加速路徑。如果走公網(wǎng),雖然看起來(lái)距離會(huì )短一些,但數據時(shí)延為459ms;而通過(guò)騰訊云中轉,經(jīng)過(guò)倫敦再到迪拜,整個(gè)過(guò)程只需要304ms。我們將每個(gè)加速點(diǎn)都作為一個(gè)節點(diǎn),加速點(diǎn)與加速點(diǎn)之間有一個(gè)邊連接,根據時(shí)延和丟包率計算出一個(gè)等比的邊,再根據邊的長(cháng)度選擇一個(gè)最優(yōu)的路徑。同時(shí),如果回來(lái)時(shí)存在另一條最優(yōu)的路徑,那么會(huì )選擇這條最優(yōu)路徑,而不是之前的,這樣就可以保證回程、去程的雙面加速,最后補充下,我們是在公網(wǎng)和專(zhuān)線(xiàn)之間選擇一個(gè)最優(yōu)的網(wǎng)絡(luò ),并不是說(shuō)一定會(huì )走專(zhuān)線(xiàn)。
2.3.4 多路無(wú)狀態(tài)傳輸

路徑選好后,我們需要考慮如何提升傳輸速率,做法是將大包智能拆分成小包,小包通過(guò)多路并行傳輸,最后到達源站,這種方式可以提升效率,在一些場(chǎng)景下還會(huì )有小包合并為大包。兩邊會(huì )有狀態(tài),但是在鏈路中間是無(wú)狀態(tài)的,如果節點(diǎn)之間有抖動(dòng)可以做到秒級踢出。此外,路徑之間還有預建連和連接復用的技術(shù)。

上圖展現的是實(shí)際效果,一些區域的效果是非常明顯的——通過(guò)騰訊云加速,時(shí)延可以從200多ms降低到30多ms。通過(guò)測試,全球鏈路時(shí)延不超過(guò)300ms,實(shí)際驗證可以把平均時(shí)延降低24%,同時(shí)請求成功率提升17%。
2.4 可靠的消息系統
對于IM來(lái)說(shuō),完成選路以后,無(wú)論是信令消息還是其他普通消息,保證可靠性都是至關(guān)重要的,接下來(lái)和大家分享騰訊云消息系統的機制。大家從網(wǎng)上可能了解到QQ和微信的一些做法,微信是使用寫(xiě)擴散的方式,但不管是寫(xiě)擴散還是讀擴散,都是在一定業(yè)務(wù)場(chǎng)景之下來(lái)考慮的。

騰訊云選擇的是讀擴散的模式。從上圖可以看到,對于收件人來(lái)說(shuō),以收件人為維度來(lái)儲存消息;對于群來(lái)說(shuō),是以群為維度儲存消息。消息的狀態(tài)一共有三種——已確認、未確認和待下發(fā)。收消息采用推拉結合的方式,當一個(gè)消息出現,會(huì )把消息內容和通知發(fā)給接收端,接收端再上傳把消息拉回來(lái)。這里面會(huì )有sequence或者騰訊云自己的cookie控制時(shí)序的問(wèn)題。對于群聊,目前是通過(guò)讀擴散的模型。如果群比較小,寫(xiě)擴散確實(shí)比較方便,但當群的數量越來(lái)越大,比如微信群的數量上限是500人,可以使用寫(xiě)擴散,而微信的視頻號和直播要使用寫(xiě)擴散的模式是行不通的,很多都已經(jīng)改成了讀擴散的模式。騰訊云不僅可以支持500人的群,2000人乃至萬(wàn)人的大群都能支持。

上圖是我們自研消息存儲引擎,分為索引層和數據層,這是基本的拉消息的機制。目前騰訊云自己的能力已經(jīng)可以支持多拷貝的存儲,索引全部存在內存里,數據會(huì )分為冷、熱數據。熱數據會(huì )存在SSD盤(pán)里,冷數據會(huì )繼續下沉到云硬盤(pán)。此外,騰訊云還支持數據加密,同時(shí)我們在拉取數據方面也會(huì )更加靈活,支持指定SEQ拉取、指定時(shí)間區段拉取。
2.5 億級別狀態(tài)系統

對于IM來(lái)說(shuō),狀態(tài)系統也是非常重要的一點(diǎn)。舉個(gè)例子來(lái)理解狀態(tài)系統,比如上下線(xiàn)——最開(kāi)始的PC端QQ是否在線(xiàn)的狀態(tài)。當需要消息PUSH的時(shí)候,首先要查在線(xiàn)還是不在線(xiàn),在線(xiàn)狀態(tài)才能走自己的PUSH通道,如果不在線(xiàn)就要通過(guò)廠(chǎng)商的離線(xiàn)PUSH通道。對于狀態(tài)系統,采用分SHARD的模式,通過(guò)uin,做一致性哈希,分成一個(gè)個(gè)SHARD。SHARD支持水平擴展,對于每一個(gè)SHARD,也可支持垂直擴展,比如現在有三臺機器,隨著(zhù)不斷增長(cháng)的業(yè)務(wù)量,可以擴展成4臺或者5臺,擴容是非常高效的。除了在單地域,騰訊云可以多AZ或跨Region同步狀態(tài)實(shí)施。例如為了提升系統穩定性,可以在上海和廣州各部署一臺,消息真正擴散的時(shí)候,并不是去遠程查詢(xún)(常規的做法是狀態(tài)存在Redis里,通過(guò)RPC的方式進(jìn)行查詢(xún))。騰訊云會(huì )分成多個(gè)SHARD,每一塊只負責某一個(gè)區段的帳號,當把信息請求過(guò)來(lái)時(shí),只需要本地查詢(xún)就能將消息下發(fā)下去,非常高效。

在做微信視頻號的時(shí)候,有提到如果把一億個(gè)人拉到一個(gè)群里會(huì )怎樣?這一定需要讀擴散的模式,寫(xiě)擴散是完全不行的,這也是騰訊云即時(shí)通信IM的一個(gè)特色——無(wú)人數上限的直播群,很多客戶(hù)都會(huì )用到。這是一個(gè)基本的交互邏輯,看起來(lái)只是比較簡(jiǎn)單的系統收發(fā),里面其實(shí)存在多級擴散。當收到消息后,經(jīng)過(guò)邏輯層的擴散,將其存儲到一個(gè)類(lèi)似數據存儲層的結構里——這個(gè)數據存儲層可以?xún)Υ?分鐘或者5分鐘的一段時(shí)間內全部的消息,當用戶(hù)來(lái)拉取的時(shí)候,會(huì )按照就近的方式拉取。我們這里對消息采取一寫(xiě)多讀的方式,具體的消息是一個(gè)環(huán)形的BUFFER,會(huì )記錄消息的偏移量,直播大群的群號、群ID、群消息的范圍也在里面。另外,網(wǎng)絡(luò )通信會(huì )有抖動(dòng)和丟包,所以我們做了一個(gè)兜底的策略,將消息保存在高保障可靠存儲系統,當發(fā)現消息的SEQ出現斷層,可以補拉,從而保證消息的高可靠。

上圖是實(shí)際的補拉機制。補拉除了分鐘粒度維護索引之外,消息也會(huì )分優(yōu)先級。一個(gè)百萬(wàn)人或者千萬(wàn)人直播群的消息量是非常大的,消息里面可以設置優(yōu)先級,比如把紅包設置為高優(yōu)先級消息,點(diǎn)贊、送禮、彈幕設置為低優(yōu)先級消息,這樣可以保證紅包不會(huì )因為消息過(guò)多而丟失。騰訊云對此有一個(gè)淘汰機制,高優(yōu)先級消息會(huì )全量保存,這樣當客戶(hù)來(lái)拉消息是可以跳過(guò)非關(guān)鍵的彈幕數據,直接把高優(yōu)先級數據合并后發(fā)給用戶(hù)端,保證用戶(hù)體驗。
03融合場(chǎng)景的解決方案
前面介紹了騰訊云的三個(gè)核心能力。對于IM來(lái)說(shuō),很多情況下不是單獨使用的,而是和其他一些能力結合使用。

上圖是騰訊云底層能力。通信層我們有IM、移動(dòng)推送、實(shí)時(shí)音視頻、直播、點(diǎn)播、CDN的能力,面向教育、電商、金融、政企等各個(gè)行業(yè)的客戶(hù)提供服務(wù)。服務(wù)主要分為三類(lèi):一是企業(yè)內部員工辦公、二是企業(yè)和客戶(hù)之間、三是用戶(hù)和用戶(hù)之間。此外,騰訊云還有PSTN、一鍵登錄、云呼叫中心和短信等其他通信能力。從行業(yè)來(lái)看目前騰訊云已經(jīng)是全國最大的綜合通信服務(wù)商。
3.1 直播解決方案

上圖是IM和其他業(yè)務(wù)場(chǎng)景的一些結合,包括TRTC、直播、點(diǎn)播等,這是用于低延時(shí)互動(dòng)直播的,也支持各個(gè)端進(jìn)行多人音視頻通話(huà)、低延時(shí)直播和PK連麥等類(lèi)似的場(chǎng)景。
3.2 在線(xiàn)課堂解決方案

上圖是和教育白板相關(guān)的在線(xiàn)互動(dòng)課堂解決方案。其中用到了騰訊云實(shí)時(shí)音視頻、IM、CDN和白板的能力。1對1小班課或者1對多大班課,乃至10萬(wàn)人的直播課都可以結合騰訊云的通信PaaS以及白板能力,很快的開(kāi)發(fā)出在線(xiàn)課堂的產(chǎn)品。
04典型應用場(chǎng)景
最后我將和大家簡(jiǎn)單介紹一些使用IM的典型場(chǎng)景。
4.1 企業(yè)內部場(chǎng)景

騰訊會(huì )議底層已經(jīng)深度使用騰訊云通信的能力,包括主持人管理、消息和文件分享等等。在疫情期間,平安保險內訓也是通過(guò)直播的方式把騰訊云的IM集成進(jìn)去。釘釘、企業(yè)微信提供的是標準化的SaaS產(chǎn)品,但是很多客戶(hù)因為業(yè)務(wù)場(chǎng)景原因會(huì )有更多的訴求和定制化的需求,為滿(mǎn)足這些訴求,需要把騰訊云的IM、TRTC集成進(jìn)去,基于業(yè)務(wù)場(chǎng)景靈活開(kāi)發(fā)產(chǎn)品,例如企業(yè)內通信的場(chǎng)景。
4.2 企業(yè)與用戶(hù)場(chǎng)景

企業(yè)和用戶(hù)之間最常見(jiàn)的場(chǎng)景是客服。之前的客服模式是每個(gè)公司有專(zhuān)門(mén)的客服團隊,通過(guò)客服團隊來(lái)服務(wù)公司所有的產(chǎn)品,隨著(zhù)互聯(lián)網(wǎng)紅利的消息,業(yè)務(wù)增長(cháng)有拉新轉向存量客戶(hù)運營(yíng)。未來(lái)客服會(huì )是非常重要的一環(huán),同時(shí)場(chǎng)景將更加分散,不再局限于某一個(gè)部門(mén),每個(gè)產(chǎn)品都可能組建自己的小客服團隊,要搭建這樣一個(gè)呼叫中心和客服系統是很復雜的。騰訊云的云呼叫中心可以很方便的為客戶(hù)打造一個(gè)客服系統。
在金融方面,不論是虛擬營(yíng)業(yè)廳、證券還是保險都和直播互動(dòng)結合得越來(lái)越緊密,因此會(huì )存在私密付費群,存在互動(dòng)和推送的場(chǎng)景。
此外除了前面提到的騰訊云在線(xiàn)教育方案,醫療也是一個(gè)很好的方向,醫療問(wèn)診、實(shí)時(shí)的音視頻溝通、病例上傳分享都是很不錯的使用場(chǎng)景。
4.3 用戶(hù)與用戶(hù)場(chǎng)景

用戶(hù)與用戶(hù)之間的場(chǎng)景會(huì )更多,像線(xiàn)上社交直播、電商直播帶貨等等。電商直播會(huì )更多需要無(wú)人數上限的直播間,會(huì )有優(yōu)惠券、抽獎、送禮、貨物上下架、加購物車(chē)的訴求。陌生人社交場(chǎng)景會(huì )有附近的人、陌生人通信、精準匹配、個(gè)性裝扮等等訴求。另外在游戲互動(dòng)方面也有很多應用場(chǎng)景。其實(shí)無(wú)論是直播、電商、陌生人社交還是游戲,都存在一個(gè)趨勢:以前只是提供一個(gè)產(chǎn)品給客戶(hù)使用就可以了,但是未來(lái)更多的產(chǎn)品會(huì )做社區,以此來(lái)維護和客戶(hù)的關(guān)系,通過(guò)騰訊云的IM和TRTC可以很方便的把社區的通信能力搭建起來(lái)。
以上是我今天的全部?jì)热荩兄x大家聆聽(tīng)。