在 2021 LiveVideoStackCon 音視頻技術大會上海站,聚焦 「輕端重雲和邊緣架構新模式」 專場,阿里雲視頻雲的 RTC 傳輸專家楊成立(忘籬)帶來 「基於邊緣雲原生的 RTC 服務架構演進」 的主題演講,與行業夥伴分享視頻雲在 RTC 服務架構演進之路上的挑戰和經驗,如下爲完整的演講內容。
後端傳輸網絡是 RTC 系統的核心能力,好比阿里雲的 GRTN、聲網的 SD-RTN 等。本文介紹了阿里雲視頻雲如何不斷改進 RTC 架構,擴展 GRTN 網絡,並基於雲原生技術得到雲的強大能力。算法
你們好,我是楊成立(忘籬),目前在阿里雲負責 RTC 的傳輸網絡,以前在藍汛 CDN 負責直播的傳輸網絡,這十年左右一直在作視頻的後端服務,也是開源視頻服務器 SRS 的做者,SRS 目前是全球 Top1 的開源視頻服務器。後端
後端服務都架構在雲上,CDN 的趨勢也是邊緣雲,這是由於雲計算成爲各類服務的基礎設施,固然也包括視頻的後端服務。開發者能夠便捷的直接使用雲廠商的 SDK 和視頻雲服務,也可使用開源方案在雲上構建本身的系統。安全
我正好活躍在視頻開源和雲服務這兩個領域,一直都有朋友詢問這兩個的差別,藉此次機會正好分享下這個話題,但願經過此次分享,你們能夠了解,從一個開源服務器,到能夠提供服務的商業系統,到底有哪些路要走。性能優化
由於有些朋友不是作服務器的,我仍是先介紹下 RTC 服務是什麼吧。服務器
直播通過這些年的發展,你們都理解須要後端服務,好比 OBS 推流,是不能直接推給播放器的,而是通過 CDN 轉發,CDN 就是直播的後端服務了。網絡
RTC 是大不相同的,好比 WebRTC 自己設計是通話,通話場景大部分時候都是一對一的對話,因此 WebRTC 設計了多種傳輸方式,好比直接 P2P、經過 STUN 轉發、經過 SFU 或 MCU 轉發。架構
若是隻是跑 DEMO,那麼不用 RTC 服務器,直接 P2P 也是能夠跑起來的。真實線上,確定是要通過服務器,如今使用最廣的是 SFU 轉發。主要緣由以下:併發
各家雲廠商都有本身的後端服務,好比阿里雲的 GRTN,聲網的 SD-RTN 等等。實際上傳輸網絡並不等於傳輸服務器,而是一個傳輸的系統,包括調度、路由、協議處理、發佈和維護、問題排查、數據分析等等。負載均衡
AliRTC(阿里雲 RTC)的傳輸網絡,傳輸協議使用 GRTN,除了 GRTN (CDN) 的網絡,咱們還擴展實現了 GRTN (Tenfold);GRTN (Tenfold) 補充了 BGP 專線、ENS、專有云網絡、第三方雲支持 K8S 的雲網絡等,適應多種不一樣場景的傳輸要求。ide
其中 GRTN (Tenfold) 就是基於 SRS 作的,增長了不少能力,有些已經反饋給了 SRS 社區。
下面介紹下 SRS,以及咱們爲什麼要選擇 SRS。
視頻服務器的主要問題是:門檻高、領域廣、更新快,開源和雲服務不一樣步。
爲何這個問題很重要?
SRS 如何解決這個問題?SRS 的定位是雲原生的視頻服務器,應對雲原生作了大量改造,能夠很是方便上雲和遷移。
除了雲原生的能力,SRS 也是很是高性能的開源服務器。固然性能沒有最高只有更高,每一個大版本都須要作性能優化,而後用性能交換功能和用戶體驗。
特別說明下,這裏並非說 Nginx 和 Janus 就作不到 SRS 的併發,只是目前的版本壓測出來的數據。性能和行業背景是很是相關的,好比 2012 年大可能是千兆網絡時代,因此 Nginx 的性能足夠能打滿帶寬了。而 Janus 同類的服務器差很少都是 Janus 這個量級。SRS 之因此一直重視性能是由於互聯網很關注成本,成本必須使用性能交換。
今年是 SRS 第八個年頭,去年已經成爲開源視頻服務器的 Top1,主要仍是由於國內的視頻行業發展很快,另外活躍的視頻開源服務器比較少。
這裏說點八卦,此次疫情給全球經濟帶來很大影響,也帶來了互聯網視頻的大爆發,好比直播、教育、會議、雲遊戲、IoT 等等。你們只能在家活動,因此互聯網成了你們交流的重要方式,各個開源項目也在 20 年初有很大的增加,好比 Janus。
極可能這是咱們惟一會經歷的黑天鵝了,我以前一直有個疑問,就是疫情結束後,是否互聯網視頻會回到解放前?從 Janus 的增加速度看,半年後增加的速度回落到疫情前了。這也許也說明了,就算是作開源也不能依賴這種事件。
SRS 的快速增加是在 19 年末,這個時間點也是 SRS 支持 WebRTC、SRT 和 GB28181。因此也分不清多少是疫情的拉動,多少是由於 SRS 本身的努力。好消息是 SRS 的增加並無回落,並且是目前增加最快的開源視頻服務器項目。持續的增加和全球 Top1,這不是結束,而是一個新的開始。
咱們認爲只有公衆號訂閱的開發者超過 100K,纔能有機會提高了整個視頻行業開發者的創造力。只有達到 100K 的 Star,才能叫互聯網視頻的標準開源服務器。只有不斷推進新場景的 DEMO 和探索,才能不斷拓展視頻的邊界。
SRS 是一個雄心勃勃的開源項目,十年的 OKR 是個挺大的目標。若是咱們看三十年後,那麼有三代新的開發者進入視頻行業,而隨着視頻成爲互聯網基礎設施的一部分,那麼這個目標也不算是很大,最大的問題多是在於 SRS 可否活夠 30 年吧。
回到今天的主題,從開源 SRS 到商業服務,還須要解決哪些問題。
這些問題,前四個和雲原生是有很是緊密的關係。後面幾個問題,每一個都是很大的話題,限於時間關係,咱們會在之後給你們分享。
雲的發展方向,無論是中心雲、邊緣雲仍是專有云,都是雲原生方向。雲自己就雲裏霧裏,雲原生更加雲山霧罩了,咱們能夠看看雲自己的思考。
能夠說,開源項目若是作了雲原生的改造和從新設計,具有了雲架構的能力,就解決了商業化服務一個大問題。咱們一塊兒來看,須要作哪些改造。
長會話:RTC 中最長有 48 小時的會議,甚至更長,直播有時候也是很是長時間推流,好比昨天雷軍的視頻號直播,摺疊小米手機的摺疊屏,連續直播摺疊三天。這三天直播服務怎麼升級?
問題:長會話,最長有 48 小時會議,升級困難。
爲什麼重要:真正提供服務的線上系統,不是在升級,就是在升級的路上,一天到晚都是升級。是不可能徹底停下來,中斷服務,全量升級後再提供服務。長會話意味着必須支持無中斷升級,不然就會形成不可用和服務中斷的問題,嚴重影響客戶體驗。
擴縮容也會受到長會話的影響。業務量增加時,須要增長機器擴容,現有長會話沒法遷移到新的機器,擴容只能應對新的流量。業務量下降後,能夠縮容下降成本,若是長會話的週期,超過了業務週期,就沒法實現縮容。
直播的業務質量,是按百分比計算,好比百分之 N 的卡頓是能夠接受的。而在 RTC 中,會議中有一我的不可用,整個會議就沒法繼續。每一個會議都很重要的,一個會議的重要性,並不必定低於另一百個會議。
現狀和將來:開源 SRS 改進了退出邏輯,能夠作到等待必定時間後退出。SRS 還作不到無狀態升級,由於要作到無狀態化須要依賴存儲,而開源的 SLA 還不須要那麼高。
GRTN (Tenfold) 已經作到無狀態化升級,可隨時升級(固然會選擇業務低峯期升級)。因爲能夠無狀態重啓,咱們也順便解決了 Crash 後恢復的問題,C++ 的程序,就像移動端的 Crash 率同樣的,必定會有 Crash。
將來 GRTN (Tenfold) 還會作到狀態遷移和 K8S 的滾動升級。
中心、邊緣、專有云 SLA 差別大:中心雲的網絡情況,基礎設施的完善度很高,會話的遷移相對比較容易。而邊緣和專有云的 SLA 就差不少,不能用一樣的機制作遷移。
問題:沒有 100% 的 SLA,底層設施必定會出問題,早晚會出問題,宕機、IO Hang、網絡不可用;中心、邊緣、專有云,SLA 差別大,遷移難。
爲什麼重要:當底層基礎設施出現問題,雖然機率不大,但一旦出現問題,服務就是不可用了。一臺服務器不可用時,影響的不只僅是這臺服務器的會話,而是這個服務器上的全部會議,一個會議通常會跨多個服務器。
中心雲的遷移,可用的基礎設施比較完善。邊緣雲和專有云,網絡情況和基礎設施可靠性,不如中心雲,遷移的難度更大。
現狀和將來:SRS 沒有支持遷移,開源的 SLA 容忍度高一些,同類開源服務器也沒有遷移能力;將來計劃使用體驗差的重連方案支持遷移。
GRTN (Tenfold) 具有了底層遷移能力,預計今年能夠支持中心雲遷移。將來須要不斷優化遷移能力,支持邊緣雲和專有云的遷移;還須要考慮計劃中的遷移,好比流量再均衡。
端口和 IP 複用:傳統 RTC 通常是內網應用,有能夠隨便使用的 IP,能夠分配幾萬個隨機端口,這些在雲上有安全隱患,公網 IPv4 地址不能隨意用幾萬個,擴容就很難作。
問題:安全要求只能開固定的端口;企業防火牆只能開特定的端口;不能開必定範圍端口,好比 10000 到 20000 端口。
爲什麼重要:不符合安全規範,沒法經過安全審覈。多端口更容易被攻擊,若是出現安全事故,比一臺服務不可用還要嚴重,這也是爲什麼 WebRTC 正在作 E2E(端到端)加密的緣由。
有些用戶在企業防火牆後面,訪問公網時不能訪問任意端口,必須收斂到某些 IP 和端口。若是不支持端口複用,就沒法在這些企業場景下使用。
端口本質上是一種狀態,它是一種對用戶的標示,好比 IP+ 端口就能夠認爲是某個客戶端。這也給服務遷移帶來問題,須要遷移更多的狀態。
現狀和將來:雲原生的標準作法,是經過 SLB/Service 隱藏服務,流量經過 SLB 轉發到真實的 Pod 服務器。SRS 已經支持了這種方式。
線上還有移動端切網問題,會影響 SLB 定位客戶端。SRS 目前使用 ICE 的 PingPong 標示客戶端,將來和更好的作法是用 QUIC,QUIC 協議自己考慮了會話的標示,在 SLB 層就能夠解決問題。
GRTN (Tenfold) 還支持了 TURN 協議的 SLB 轉發。將來還須要解決在邊緣雲中的端口複用問題,和中心雲不一樣,邊緣雲多是分運營商的,客戶端切網後須要更換 IP 入口。
流多且有關聯,還有切網問題:直播的流之間沒有關聯性,能夠在服務器負載高時調度新的會話到其餘服務器,而 RTC 流之間有關聯性,有時候不能隨意調度,致使負載均衡很難作。
問題:流有關聯性,服務的會話數不變,負載可能會突增。流的關聯性,碼率的波動,以及 QoS 算法的動態變化,致使水位評估不許,會話數目不增長時,消耗的 CPU 和帶寬都不一樣。
爲什麼重要:水位若是沒法精確評估,就只能預留較多資源,保持較低的水位運行,避免水位突增,服務器被打爆。保持較低水位致使總體成本高。
現狀和將來:SRS 尚未解決這個問題,正在作 QUIC 級聯,將來會考慮給出服務器的水位,但不會作流量調度和負載均衡,這個是系統要作的。
GRTN (Tenfold) 已經支持多級級聯,跨區域級聯,有粗略的水位評估。正在作精確的水位評估,將來會考慮作流量均衡。
總結來講,雲原生解決的都是髒活累活,並且仍是幹不完的髒活累活。雲原生往前走了一大步,讓基礎設施能夠不斷的標準化發展,應用只要遵照雲原生的規範,就能夠在多個雲上怡然自得。
視頻的門檻真的很是很是很是的高,還記得十一年前剛開始接觸 Flash 和 FFmpeg,僅僅各類概念和協議,就讓人一頭霧水。SRS 但願能讓視頻的門檻不斷下降,保持易用性讓開發者少一些焦慮和壓力,保持濃密的頭髮。
但,這不是 RTC 服務的所有挑戰。生生不息,填坑不止,後端服務就沒有作完的那一天。
「視頻雲技術」你最值得關注的音視頻技術公衆號,每週推送來自阿里雲一線的實踐技術文章,在這裏與音視頻領域一流工程師交流切磋。