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