編者按:作為互聯(lián)網(wǎng)通信云服務(wù)商,除了滿足最基本的音視頻數(shù)據(jù)實(shí)時(shí)傳輸需求外,還會(huì)需要提供很多個(gè)性化的云端服務(wù)。本文來自融云的聯(lián)合創(chuàng)始人兼 CTO 楊攀在 LiveVideoStackCon2019 北京站上的精彩分享,結(jié)合融云去中心化的媒體服務(wù)架構(gòu),解析如何構(gòu)建靈活的、可擴(kuò)展的音視頻通訊云服務(wù)。
大家好,我是融云的聯(lián)合創(chuàng)始人兼 CTO 楊攀,本次我分享的主題是融云在公有云媒體服務(wù)設(shè)計(jì)的理念和思路。
我是從2002年參加工作,至今已經(jīng)十七年,其中有十五年的時(shí)間都是在做關(guān)于 IM 的工作。2004年時(shí)我加入了 MSN,作為 MSN 進(jìn)中國第一個(gè)落地的本地化服務(wù),我在其中擔(dān)任項(xiàng)目負(fù)責(zé)人的工作。2008年到2014年間我都在從事與飛信相關(guān)的工作,經(jīng)歷了飛信從一個(gè)非常小的業(yè)務(wù)成長為數(shù)億級規(guī)模的水平。2014年后隨著云服務(wù)的興起,我與團(tuán)隊(duì)創(chuàng)立了融云,將即時(shí)通訊與云服務(wù)結(jié)合提供給開發(fā)者,讓開發(fā)者可以通過調(diào)用 SDK 使用 IM 服務(wù)。
本次演講將分為設(shè)計(jì)概述、媒體服務(wù)、能力服務(wù)、服務(wù)集群和服務(wù)網(wǎng)絡(luò)五個(gè)部分展開。
1. 設(shè)計(jì)理念
融云是一家互聯(lián)網(wǎng)通信云服務(wù)商,眾所周知,要想做基本的音視頻服務(wù),首先你需要具備信令服務(wù)、能力服務(wù)和媒體服務(wù)這三種能力,這些能力都基于 WebRTC 技術(shù),但 WebRTC 本身的定義是 P2P 的通訊,它本身并沒有服務(wù)部分,在服務(wù)部分有很多開源的實(shí)現(xiàn)解決方案。其次 WebRTC 也沒有定義信令服務(wù)的部分,很多廠家都是通過自己開發(fā)或采用第三方信令的方式來解決這個(gè)問題。信令其實(shí)就是一個(gè)長鏈接的通信通道,它與 IM 即時(shí)通訊其實(shí)是一樣的,融云也有案例說明客戶可以采用融云的公有云即時(shí)通訊解決方案來滿足信令服務(wù)的需求。隨著基礎(chǔ)通信能力達(dá)到要求之后,又不斷引入新的需求,比如對音視頻內(nèi)容的審核、更大規(guī)模的使用WebRTC技術(shù)替代直播平臺的解決方案,這也就引入了類服務(wù)這樣新的功能。融云即時(shí)通訊業(yè)務(wù)的設(shè)計(jì)理念是各司其職、避免依賴,核心服務(wù)專注通信,能力服務(wù)專注業(yè)務(wù),只要做到這一點(diǎn),系統(tǒng)就可以實(shí)現(xiàn)部署簡單和運(yùn)維方便,降低管理的成本。另外融云作為全球互聯(lián)網(wǎng)通信云服務(wù)提供商,在設(shè)計(jì)之初就不可避免要考慮全球互聯(lián)的問題,全球互聯(lián)的架構(gòu)與私有架構(gòu)的不同需要充分照顧到。
2. 媒體服務(wù)
2.1 媒體服務(wù)基礎(chǔ)能力
首先從三大能力中的媒體服務(wù)能力談起,融云團(tuán)隊(duì)一般都稱之為"三無服務(wù)","三無"是指一個(gè)媒體服務(wù)對其他的服務(wù)沒有依賴,其他的服務(wù)對這個(gè)媒體服務(wù)自身也沒有依賴,并且每個(gè)服務(wù)沒有任何中心化的配置。根據(jù)工作中的經(jīng)驗(yàn),無論是在公有云、私有云還是混合云環(huán)境中,會(huì)面臨要部署的環(huán)境和客戶端的環(huán)境都非常復(fù)雜的情況,比如用戶會(huì)在防火墻后或者服務(wù)器本身就在防火墻里面,遇到這些情況,融云采用端口收斂的方式進(jìn)行通信的策略控制,這都是需要在設(shè)計(jì)之初就做到的事情。
另外融云還實(shí)現(xiàn)了兩個(gè)實(shí)時(shí)通信場景,第一個(gè)場景是絕大多基礎(chǔ)音視頻廠商都能做到的二人 P2P 會(huì)話,第二個(gè)場景是多人視頻會(huì)議,在這個(gè)場景中人數(shù)一般會(huì)在十人以上。隨著業(yè)務(wù)的發(fā)展,大家都能感覺到一個(gè)技術(shù)趨勢:用 WebRTC 的方式做直播,傳統(tǒng)的直播是將客戶端的流在服務(wù)端處理之后推給 CDN,最后由 CDN 進(jìn)行分發(fā),這樣做的好處是利用 CDN 的基礎(chǔ)架構(gòu)可以實(shí)現(xiàn)大規(guī)模用戶在一個(gè)房間收看直播,這是 CDN 技術(shù)特點(diǎn)所帶來的優(yōu)勢,但同時(shí) CDN 也存在著一些問題,比如首屏開屏的速度過慢,當(dāng)然目前針對這個(gè)問題也有著各式各樣的解決方案。有些客戶在這基礎(chǔ)上就會(huì)提出能否使用 WebRTC 來實(shí)現(xiàn)直播場景,業(yè)內(nèi)也稱這種方案為低延遲直播,由于延遲比較低,在直播中的互動(dòng)也會(huì)更加友好。
2.2 信令服務(wù)與媒體服務(wù)
關(guān)于信令服務(wù)和媒體服務(wù)的關(guān)系,絕大多數(shù)的廠商信令服務(wù)和媒體服務(wù)都是在一起的,融云的設(shè)計(jì)理念強(qiáng)調(diào)要解耦,使得部署和維護(hù)都更簡單,因此信令服務(wù)和媒體服務(wù)之間也需要解耦和無依賴,信令服務(wù)與媒體服務(wù)之間原本存在的狀態(tài)同步也要解開,而且融云本身就有特別健壯的信令服務(wù),因此可以復(fù)用融云的 IM 通道,融云本身在這方面的投入也相當(dāng)大。
上圖是信令服務(wù)與媒體服務(wù)的簡單架構(gòu),每一個(gè)媒體服務(wù)都與信令服務(wù)相關(guān),相關(guān)性的目的是讓彼此清楚各自的狀態(tài),這個(gè)設(shè)計(jì)模式的特點(diǎn)是客戶端與信令服務(wù)通信,通信結(jié)束之后可以與媒體服務(wù)通信,而媒體服務(wù)之間的對接不受影響。
2.3 實(shí)時(shí)通信發(fā)布/訂閱過程解析
上圖是為了實(shí)現(xiàn)解耦引入的實(shí)時(shí)通信發(fā)布/訂閱的模型,當(dāng) Client A 要與 Client B 進(jìn)行會(huì)話時(shí),第一步是進(jìn)行發(fā)布,首先用 Client 調(diào)用 IM Server,提交加入房間/通話申請,調(diào)用信令服務(wù)的目的是拿 Token 返回,Token 中包括之后整個(gè)訂閱/發(fā)布功能所需要的關(guān)鍵數(shù)據(jù),拿到這些 Token 之后去調(diào)用相關(guān)媒體服務(wù)的地址,傳統(tǒng)的設(shè)計(jì)通常是找信令服務(wù),在分析 IP 地址庫之后指到媒體服務(wù),由于我們需要做到解耦,因此在 Token 調(diào)用媒體服務(wù)后會(huì)給出一個(gè)返回值,返回值是 IP 地址和 Domain。返回 Client 之后就可以拿到 IP 的信息,連到媒體服務(wù)開始與 Client B 通信,通信的過程完全是依靠長鏈接的信令服務(wù)通道來進(jìn)行的,Client A 將它得到的 Domain 信息發(fā)送給 Client B,此時(shí)發(fā)送階段工作結(jié)束。發(fā)送階段結(jié)束之后由 Client B 來執(zhí)行訂閱工作,Client B 會(huì)找到離它比較近的信令服務(wù),調(diào)用媒體服務(wù)接口連到 Client A 連接的媒體服務(wù),這就是完整的發(fā)布/訂閱模式。
2.4 媒體服務(wù)對客戶端接口設(shè)計(jì)
對于媒體服務(wù)對客戶端接口的設(shè)計(jì),只需要提供發(fā)布/取消發(fā)布流、SFU 訂閱/取消訂閱和 MCU 訂閱/取消訂閱的接口,就可以完成解耦過程,整個(gè)通信的過程也可以建立起來。
3. 能力服務(wù)
3.1 能力服務(wù)分類
本身正常的一對一、多對多通信完全可以通過媒體服務(wù)就可以實(shí)現(xiàn),融云最初上線的版本也是基于媒體服務(wù)去實(shí)現(xiàn)通信需求。后續(xù)客戶和業(yè)務(wù)產(chǎn)生了新的需求,比如在 AB 通訊時(shí)需要錄像、對音視頻的審核以及 WebRTC 實(shí)現(xiàn)低延遲直播等,融云將這些需求統(tǒng)稱為能力服務(wù)。
3.2 能力服務(wù)設(shè)計(jì)原則
能力服務(wù)一樣也有設(shè)計(jì)原則,首先,需要與媒體服務(wù)或信令服務(wù)解耦、無依賴;第二,無中央配置,無需通過配置來控制能力服務(wù)的功能和邏輯,而是通過接口和調(diào)用關(guān)系來控制;第三,結(jié)構(gòu)簡單,能夠?qū)崿F(xiàn)低成本運(yùn)維;第四,能力服務(wù)可利用現(xiàn)有的網(wǎng)絡(luò)能力。
3.3 媒體服務(wù)對接能力服務(wù)過程
通過上圖來解釋媒體服務(wù)對接能力服務(wù)過程中的邏輯,與發(fā)布/訂閱模塊相同,都是用 Client 調(diào)用 IM Server,調(diào)用信令服務(wù)拿 Token 返回,Token 可以直接生成一個(gè) Hash 值,可以將 Token 理解為一個(gè)字符串,將想要的數(shù)據(jù)通過加密算法封到 Token字符串里,比如"host@clusterld","config",Token 返回 Client 之后還是尋找媒體服務(wù),在連接另外一個(gè)媒體服務(wù)做通信時(shí)接入能力服務(wù),由發(fā)起方提供能力服務(wù)的內(nèi)容。
3.4 媒體服務(wù)對能力服務(wù)接口設(shè)計(jì)
媒體服務(wù)對能力服務(wù)接口設(shè)計(jì)分為申請推流/接受推流申請和推出推流/接受推流推出兩種。
4. 服務(wù)集群
4.1 服務(wù)集群設(shè)計(jì)原則
關(guān)于服務(wù)集群的設(shè)計(jì)理念,首先還是貫穿始終的結(jié)構(gòu)簡單、易于維護(hù),其次是可低成本構(gòu)建集群以及可快速的擴(kuò)縮容。
4.2 媒體服務(wù)集群框架
整個(gè)媒體服務(wù)集群的架構(gòu)如上圖所示,其中每臺媒體服務(wù)器應(yīng)該有自己獨(dú)立向外暴露的 IP 地址,用于進(jìn)行 RTC 相關(guān)的通訊。媒體服務(wù)現(xiàn)在有兩個(gè)角色,一個(gè)是用于 RTC 相關(guān)的通訊,另外每個(gè)媒體服務(wù)器現(xiàn)在有自己 HTTP 的接口,用負(fù)載均衡和反向代理來控制這些 HTTP 接口的調(diào)用,通過反向代理實(shí)現(xiàn)規(guī)則調(diào)度。
4.3 服務(wù)集群實(shí)現(xiàn)
媒體服務(wù)集群還實(shí)現(xiàn)了實(shí)時(shí)通信單中心間媒體服務(wù)零調(diào)用,直播模式單中心理論上支持無限擴(kuò)容以及通過代理層的控制實(shí)現(xiàn)無業(yè)務(wù)中斷的更新。
4.4 MCU 能力服務(wù)集群
MCU 能力服務(wù)集群與媒體服務(wù)集群邏輯相同。
4.5 集群概況
在沒有能力服務(wù)的情況下,上半部分就是融云標(biāo)準(zhǔn)的數(shù)據(jù)中心模型,引入能力服務(wù)后,需要復(fù)用媒體服務(wù)集群現(xiàn)有的基礎(chǔ)設(shè)施,所有的能力服務(wù)就會(huì)與媒體服務(wù)部署在一起,但實(shí)際上由于架構(gòu)實(shí)現(xiàn)解耦,比較靈活,并不需要物理上部署在一起。
5. 服務(wù)網(wǎng)絡(luò)
5.1 全球網(wǎng)絡(luò)設(shè)計(jì)原則
融云在做 IM 的時(shí)候?qū)τ谌蚓W(wǎng)絡(luò)設(shè)計(jì)有非常豐富的經(jīng)驗(yàn),通過多年來在全球覆蓋地區(qū) IM 網(wǎng)絡(luò)和基礎(chǔ)數(shù)據(jù)的收集,基本可以了解全球各個(gè)地區(qū)的實(shí)時(shí)網(wǎng)絡(luò)變化情況。在這過程中團(tuán)隊(duì)總結(jié)出任何物理的優(yōu)化都不是特別穩(wěn)定,因此全球網(wǎng)絡(luò)的設(shè)計(jì)理念就包括客戶端就近接入,多鏈路選擇,數(shù)據(jù)中心間同源音視頻只有一路級聯(lián),利用IaaS能力進(jìn)行中心間級聯(lián)鏈路的優(yōu)化。
5.2 跨國級聯(lián)示意圖
跨國級聯(lián)示意
5.3 全球網(wǎng)絡(luò)的工作
另外,融云在全球網(wǎng)絡(luò)中還做了一些工作,比如 DoH 剛在2018年9月變成RFC 的標(biāo)準(zhǔn),主要解決 DNS 中間人劫持問題,根據(jù)融云這么多年業(yè)務(wù)開發(fā)經(jīng)驗(yàn)來看,很多連接問題最終發(fā)現(xiàn)都是由 DNS 劫持導(dǎo)致的。另外在引入 SmartDNS 時(shí)會(huì)遇到 LocalDNS 緩存不準(zhǔn)的問題,這些都會(huì)導(dǎo)致最終分配的就近地址不是真正的就近地址。融云目前的工作模式是將三者結(jié)合起來使用,在引入 SmartDNS 技術(shù)的同時(shí)引入 BGP Anycast 運(yùn)營商技術(shù)來解決最近地址問題,通過這三層技術(shù)最大化來保證找到用戶的最近地址。另外可以在某些特殊情況下采用公網(wǎng)鏈路來做數(shù)據(jù)中心之間的級聯(lián)通信,絕大多數(shù)廠商礙于成本的考慮也采取了這樣的方法,但公網(wǎng)存在某些特殊情況不穩(wěn)定的問題,因此需要有一些備用鏈路,甚至在一些特殊的國家地區(qū)做物理鏈路優(yōu)化,融云 IM 在全球的基礎(chǔ)網(wǎng)絡(luò)設(shè)施投入很大成本,也收獲了很可觀的成績。
6. 未來工作計(jì)劃
關(guān)于融云目前正在開展的工作計(jì)劃,隨著業(yè)務(wù)的不斷增加,按照現(xiàn)有的架構(gòu)其實(shí)可以引入更多基于場景的能力服務(wù),只要遵循架構(gòu)模型就可以不斷地引入新的模型。另外在融云的架構(gòu)模式下天生支持混合云模式,由于各個(gè)服務(wù)間都是解耦的,任何私有環(huán)境下的服務(wù)都可以直接利用已經(jīng)存在的公有媒體服務(wù)架構(gòu)之上,對于公有媒體服務(wù)來說,只要遵循相同的發(fā)布/訂閱模型就可以直接使用。
關(guān)于融云
融云,安全、可靠的全球互聯(lián)網(wǎng)通信云服務(wù)商,向開發(fā)者和企業(yè)提供即時(shí)通訊和實(shí)時(shí)音視頻通信云服務(wù)。iResearch 艾瑞權(quán)威數(shù)據(jù)報(bào)告顯示,融云即時(shí)通訊云市場份額連續(xù)多年穩(wěn)居首位。
11月30日,融云將在上海舉辦2019全球互聯(lián)網(wǎng)通信云大會(huì)(WICC 2019),這是全球范圍內(nèi)首個(gè)圍繞互聯(lián)網(wǎng)通信云技術(shù)開展研討的行業(yè)技術(shù)會(huì)議。目前,大會(huì)免費(fèi)報(bào)名通道限時(shí)開啟中,開發(fā)者們可通過大會(huì)官網(wǎng)(wicc.rongcloud.cn)申請限時(shí)免費(fèi)門票,參與WICC 2019大會(huì)期間含主會(huì)場與技術(shù)分論壇所有場次的內(nèi)容分享。
申請創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!