聲網Agora合夥人&高階架構師孫雨潤在 Qcon 上海站分享了主題演講《下一代實時傳輸體系結構的升級與應用》,以下為演講實錄。
過去三年,從百萬到億
剛剛在QCon視訊裡看到有一位Facebook的工程師覃超,說我想有一個機會加入一家公司成為前100號員工,甚至是創始團隊的成員。很感慨也很榮幸,我就是聲網Agora這家公司第5號員工,在2014年合夥創辦了這家公司。
我們做的技術有可能讓在座各位工程師也能成為一家公司、或者一個成功產品的初創員工。這項技術我在2016年4月份北京QCon跟大家分享過雛形,當時的題目叫“全球實時音視訊傳輸的技術挑戰”,演講中分析了全球音視訊傳輸的各項技術難點以及我們的解決方案,希望我們提供的服務能幫助各位開發者和工程師打造出成功的產品。實際上除了技術上的挑戰,當時市場情況對我們來講也頗具挑戰。我們從發現、定義這個問題,到初步解決,最終探索出了一個技術方向,但我們當時還不確定其面向的市場空間到底會有多大。
當時平臺上每天會有100萬分鐘的實時音視訊使用量,經過3年的發展,現在已經增長到每天3億分鐘。在平臺上註冊的專案數從2,000增長到100,000,並且現在全球有超過20億裝置安裝了我們的SDK。讓我最興奮的是同時每天通話分鐘數從當時的百萬級別到現在的幾億級別。幾億分鐘是怎樣的級別,大家可能沒有概念。舉個例子,中國聯通大概一天的通話量在十幾到二十億分鐘,中國聯通已經做了幾十年,是幾千億市值的公司規模,我們在網際網路上經過三年的時間就做到了和運營商同級別的通話量。我們的使用者不僅來自比較發達的地區比如說中國、北美,歐洲,同時中東、中南亞、非洲、俄羅斯這些地方活躍使用者數也在快速增長。
實時互動技術平臺成為技術爆款
大家現在可以想一個問題。Internet已經發展很多年了,90年代左右小鎮上開始湧現一個個的網咖,大家開始能夠接觸到Internet;2000年以後PC開始普及,大概2010年、2011年左右移動網際網路開始興起。現在大家覺得Internet已經解決了很多問題、已經非常成熟了,甚至像空氣、水、電、米飯一樣普通了。如果哪天告訴你家裡停電、斷網你會覺得痛不欲生。Internet發展的太成熟,以至於很少聽到一項技術革新能催生大規模爆發式的用量增長。
目前大家所見的爆款基本都是在應用層面,比如抖音、快手、頭條、微博、微信,每一個用的都是成熟的技術,在應用層面解決了使用者的痛點,在產品設計和使用者體驗上取勝,成為爆款。但我們確實已經很多年沒有在技術上拿出讓大家眼前一亮的爆款了,VR、AR、MR某種程度上肩負了可能成為技術爆款的使命,但從普及程度和用量增長的資料上就能看出它們仍處於探索階段。
為什麼如此成熟的網際網路此前卻無法滿足巨大潛力的實時互動需求?
要大家想一個問題,Internet到底能做什麼。假設你是中國上海的電信使用者。如果美國有一家電商把自己網站放上線,例如Zulily 這家美國比較小眾的母嬰網站。為什麼中國電信的使用者就可以直接訪問到Zulily這個網站呢?中國電信使用者難道要告訴Zulily說“我這邊有一個上海的使用者”嗎?或者Zulily公司要告訴中國電信要上線一個網站嗎?都不需要。
全球有18.6億網站,中國電信有5.6億使用者,兩邊都在不停地增長,如果通過兩邊互相註冊、互相告訴的機制是不可能實現今天網際網路的蓬勃發展的。那隔著大洲、大洋,大家如何知道彼此,並實現連線呢?答案在於Internet的兩個支撐它迅速成長的技術特性:互聯互通性、高可擴充套件性。
中國電信只需要告訴美國Level 3運營商哪些 IP 是自己的,美國運營商Level 3也只需要告訴中國電信他有哪些 IP,可通過這些地址訪問我。這些就是路由資訊,運營商通過邊際閘道器協議BGP4來完成路由資訊的交換。
進一步由於這些資訊量量增長太快,所以他們會有路由的壓縮忽略細節,比如說中國電信可以告訴對方從1到10000是我們的,美國運營商告訴他們從10000到50000是我們的。這樣一個新上線的網站不需要專門通知中國電信的使用者,而是在彼此交換的匯聚後的路由資訊中包含了訪問的方法。
Internet = Best-Effort系統
雖然能隨意的全球訪問,但長期以來中國大陸的網際網路使用者都可能遭遇過以下三種問題。
(1) 當我們訪問國內其他運營商的時候很容易失敗、網速很慢。很多年前就有“南電信北聯通”的說法:如果你是電信的使用者在打遊戲的時候會推薦你選擇電信1區、2區,但要是你登陸聯通的區,打遊戲可能會很卡。
(2) 你用二級小運營商的時候會很慢,其實小運營商自己是沒有線路的,他們要藉助中國電信、中國聯通的線路。電信100M的寬頻價格大概是1000塊錢一年,但小運營商可以做到300塊錢。小運營商租中國電信、中國聯通的線路反而能夠提供更廉價的服務,聽起來很奇怪。因為他們把頻寬、線路複用了,在晚上高峰期的時候小區樓可能就是一個區域網,導致頻寬資源競爭。
(3) 在訪問國外資源的時候會非常不爽,前年中國電信推出了“氮氣瓶出國加速器”的服務,就是為了嘗試解決高峰期訪問海外資源非常慢的問題,比如說遊戲從海外伺服器下副本,或者你看海外的視訊,體驗很差。
這些問題的原因在於運營商之間、地區之間訪問有很多政治、經濟、商業上限制的條件。比如說2018年1月份的時候國家CNIC釋出了一個報告,中國出口頻寬電信是3.6T,聯通有2T,移動有1.5T。網民規模已經達到了7.8億到8億的量級,理論上如果人均出口只有幾K,即便是有1%的使用者有出國的需求,也最多不超過1M,這就是為什麼我們在晚上高峰期的時候訪問海外資源會感覺到非常非常緩慢,這還沒算上出國流量不均衡等問題。
我們再回過頭看一開始舉的例子,在國內跟中國電信簽約可以訪問zulily,因為Internet的互聯互通和高可擴充套件性。但如果我們們工程師用chrome瀏覽器開啟開發者模式看網站首頁每個資源下載的時間,在我家裡電腦上把整個所有的資源、圖片載入到本地用了至少1.5分鐘。所以我們可以給這個問題一個結論:Internet能解決什麼問題?能解決你非常方便訪問全球的資源,但是缺點是沒有QoS保證,是Best Effort系統,沒有保證,也沒有辦法滿足Inelastic的應用需求。如果要求資料包必須在多少毫秒內到達、要求發1000個包必須要到達995個以上,這些Internet是做不到的。
業界的那些嘗試
難道只有我們團隊注意到了這樣一個事情嗎?並不是。為了滿足實時和有QoS保證的技術需求,從高校學術界、科研機構、到工業界,像思科等大公司都意識到了這樣的問題。他們嘗試過哪些解決方案呢?我給大家回顧一下。
第一個解決方案是用專用的WAN。Internet是一種網際網路,但是網際網路並不是Internet。為了實現質量保證,能不能自己再建一個網際網路?這需要鋪設線路,搭機房,城市之間通過專線連在一起,成本非常高。如果不是家裡有礦或者開運營商的,很難把這件事情做起來。
第二個解決方案是MPLS專線。美國一些運營商像Sprint他們在這方面做了早期的嘗試,現在也做的比較成熟了。他們把MPLS的接入點叫POP(Point of Present),放在全球的各個資料中心,在他們之間通過專用的線路連線在一起,這部分專線是不開放給Internet使用者使用的,所以他們的頻寬是有保證的,也很少有擁塞和丟包的問題。如果在座各位有來自大公司,比如微軟,在西雅圖、上海、北京都有辦公樓,有可能就是通過這種方案實現互聯互通的。
這個方案的缺點是,不能適用於移動網際網路的使用習慣,同時它的地區覆蓋存在限制,它的接收點大部分集中於已開發國家,而像中東、非洲、南美這些地區仍缺少接入點。另外,還需要施工,把線拉到你所在的辦公環境。
第三個解決方案是SD-WAN,本質上還是通過MPLS的專線來實現有質量保證的傳輸,但是做的改進是當我不需要實時以及不需要保證的時候走公共的Internet,它有軟體控制的模組線路的選擇切換,節省使用專線的成本。可想而知它還是基於上一代MPLS線技術,專線所遇到的侷限缺點它也都會遇到。
第四個解決方案是SD-WAN as a Service,雲端計算的時候大家聽到了很多“as a Service”,PaaS、IaaS,像Aryaka等SD-WAN公司想把SD-WAN也as a Service,也就是作為一項服務,給終端使用者使用。使用者需要通過Internet接入到Aryaka的接入點,之後資料就跑在Aryaka的骨幹網上。傳統的MPLS部署可能需要幾個月,而現在一兩天就可以了。
軟體化、共享化、服務化
回顧這四個階段的改進發現它們有一定的規律,想通過軟體化、共享化、服務化三個維度解決全球有質量保證傳輸的難題。
(1) 軟體化:歷史上我們做過很多硬體化解決問題的嘗試,像IP的協議裡有為QoS保留的欄位,標註著不同Level的QoS。本意是希望路由器交換機等裝置保證多媒體包的傳輸質量,但是歷史證明是失敗了。如果這樣有效果,所有的應用都會把這一個欄位標成是一定要保證傳輸質量的,又回到了原樣。想通過升級硬體裝置來解決問題也解決不了,因為網際網路實在太龐大了,交換機、路由器如果徹底更新換代太難了。
(2) 共享化:不需要各個運營商的專線資源。一邊是專線專網建設成本高、增長速度慢,另一邊是高頻寬 inelastic 應用使得對 QoS 網路需求急劇增加,專線資源依然解決不了Internet上大規模大範圍的使用者的實時互動需求。
(3) 服務化:利用技術將 QoS 網路本身交付給客戶,而非銷售裝置再繼續增加客戶的維護、管理成本。
2016年我們做了一個嘗試,Agora SD-RTNTM,對上述3個方向問題解決得更為徹底。軟體化方面從需要特定的 SD-WAN 硬體裝置,簡化到只需要裝有 linux 作業系統的 X86 伺服器;共享化方面從需要各個運營商的專線資源,簡化到只需要公共 Internet 頻寬資源;服務化方面從需要在客戶提供的場所進行部署安裝,到賬號開通立即使用,從特定場所接入的限制,擴充套件到 200 個國家和地區,對LAN、 3G、 4G使用者的覆蓋。
PaaS服務平臺要解決的問題
軟體化、服務化、共享化不是我們提出來的,也不是業界在解決這個問題提出來的,是整個PaaS服務平臺都需要滿足的條件。大家想一下Google的實時翻譯、高德地圖、AWS,都需要沿著軟體化、服務化、共享化推進。
那麼PaaS服務平臺解決的是什麼問題呢?
-
一定是系統的基礎模組Fundamental part of a system;
-
開發者和公司都需要的某種能力;
-
大多數人不喜歡做的;
-
很複雜很瑣碎的事物;
-
很難解決的問題;
-
同時還是Application體驗,以及成功決定性因素之一。
總結來講:PaaS服務要解決的是困難,但解決後能深得人心的問題。
它的價值是提供開發者所需要的基礎技術,特別是非核心但又存在普遍需求的技術。把PaaS服務平臺當成水電煤來類比的話:平臺就是提供水電煤資源,SDK就是水龍頭、電飯煲、燃氣灶,開發者就是廚師。廚師關注的是做的菜怎麼樣,關注的是蕃茄炒蛋味道怎麼樣,而不是關注怎麼劈柴怎麼生火。PaaS服務會像水電煤一樣通用。下圖是大家耳熟能詳的PaaS服務,像即時訊息SDK。如果你想做一個類似QQ 這樣的IM功能放在客服的系統裡,需要自己開發離線訊息、上線下線通知等服務嗎?有人把這些事情做了最好。還有地圖導航、語音輸入、留存統計、Crash分析,當然還有我們聲網提供的RTC SDK,這樣可以讓Application開發者專注在業務邏輯、玩法、體驗、創新、場景。
什麼是好的RTC PaaS服務?
那什麼是好的RTC PaaS服務呢?我們最初做這個技術平臺的時候,也在時刻思考這個問題。因為市場上沒有先驅讓我們追趕,我們必須自己想清楚怎麼定義好的PaaS服務。
好的PaaS服務第一是Reliable,要穩定不出事兒,要像水龍水一樣隨時有水,如果家裡水龍頭不出水,那要打一個差評。二要Scalable和Efficient,也就是保證大規模、高併發,仍然拿水做例子,要能同時滿足十幾億人的用水需求。RTC SDK平臺要做到今天,就算有100萬觀眾的線上演唱會,也能夠穩定支援,且質量不打折。第三,Performant。這是立身之本,要解決技術難題,要有門檻,這是PaaS平臺與外包團隊的本質區別。第四是Self- Service和Easy to use,自助服務和易用性。我用你的服務做音視訊實時通訊、實時互動,當音視訊卡頓的時候我要知道為什麼,我還要知道全球1000萬使用者有百分之多少是對質量滿意的。這個識別不僅要準確,還要把質量給透明出來,提供給開發者。要做一個成功的App,開發者和App運營者需要對資料門兒清。第五是Cost-Effective,要節省成本。像AWS等雲服務成功的原因之一是他們相對於dedicated server,能提供較低成本的服務。
我把它放在這樣的圖裡,劃分的更清楚:要支援千萬CPU、千萬PCC,任意速度湧進頻道、在全球能夠覆蓋多少國家和地區,網內傳輸達到什麼樣的水平,這些都是我們要追求的技術目標。
實時通訊平臺的技術指標:傳輸
接下來給大家講一下,目前平臺的技術水平能做到什麼程度。首先是全球海外覆蓋,接入節點在全球覆蓋是非常重要的,如果沒有辦法在某個地區提供在當地有質量保證的使用者接入服務,我們客戶的產品很難在這個地方運營。客戶問我們服務質量的時候,經常會問在中東有沒有接入點,有沒有質量保證?如果沒有保證客戶花了錢投了人力在中東、非洲這些地方出海運營了,但是效果不好、體驗不好,那麼我們這個雲服務是有問題的。
作為一個開發者怎麼確定在非洲到底有沒有覆蓋,在巴拿馬、阿爾及利亞有沒有覆蓋呢?有一個經驗的公式。如果一個統計週期裡丟包小於5%的話,傳輸層面可以通過FEC、ARQ等手段把資訊恢復出來,因此可以把丟包小於5%作為優質傳輸點。優質傳輸點與該地區所有統計資料點做比值,佔所有統計點裡的比例就是在這個地區的優質傳輸率,當然,實際使用時針對各地區各運營商還有很多細節要補充矯正。優質傳輸率能夠直接反應PaaS服務的覆蓋水平,在中國大陸對電信、聯動、移動、華東、華南的覆蓋率到底是多少。目前為止在平臺上全球分鐘數過萬的國家有120個以上,覆蓋水平良好和優秀的能夠超過90個。
第二個立身之本是網內傳輸的技術目標。網內傳輸要達到專線級別的水平,這是用PaaS服務、實時傳輸服務最關鍵的指標。一個使用者在澳大利亞,第二個使用者在山西,第三個使用者在俄羅斯,他們能不能得到很好的傳輸體驗呢?剛剛說到有20億的Application在平臺上跑,大家可能好奇到底是哪些應用在用,我可以給大家列舉一些比較有代表性的。2017年比較火的是《狼人殺》,為什麼一個歷史很悠久的遊戲在2017年的時候線上上突然火起來了呢?也是由於背後RTC技術的驅動,技術能夠解決一個房間裡13、14個人無論在全球任何地方都可以實時交流,就像人在身邊一樣玩遊戲。2017年全球有80%以上的《狼人殺》都是跑在聲網Agora這個技術服務平臺上的,類似的應用場景還有很多,都集中得到了滿足,這也是為什麼這個PaaS服務在短時間內實現了從百萬級到幾億級別的分鐘數增長。
除了像《狼人殺》這種遊戲類產品,還有一些更典型的應用。有一家公司做了一個眼鏡,它能解決什麼問題呢?某運營商把自己的機房布在全球的各個角落,甚至是荒山野嶺、山上等等人跡罕至的地方,他們派工程師到現場解決問題的時候經常遇到很難解決的問題,需要傳回來給專家解決。那家供應商做了一幅眼鏡,眼鏡把現場的錄影實時傳到總部、或者專家所在的任意地方,邀請該運營商的全球專家來分析解決問題。眼鏡背後的資料傳輸這也是基於這個平臺來做的。大大提高了該運營商在全球裝置故障診斷修復的效率。反過來這些裝置的快速修復也幫助了Internet更加穩定,事情就這麼有趣。
日本有些醫院也在用我們這項技術,國內一些小孩兒不幸患有很特殊的病在國內沒有合適的主治醫師和外科大夫做手術。這些醫院和日本的醫院有合作,日本醫生遠端與國內醫生一起會診,給出關鍵的專業意見,跟國內醫生一起完成小孩子的手術。看到這些案例的時候,我們做技術的會有滿滿的成就感。這些應用的背後都是對於跨國、跨地區有非常強烈的要求,這也就是為什麼我們要把網內傳輸做到接近專線級別的水平。下圖是美國第三大供應商Sprint提供的專線質量,分為Intra-Reglon和Inter-Region,這是他給的SLA來約束自己提供服務的質量。
SD-RTN™與它質量接近,另一方面給大家對比一下聲網SD-RTN™與運營商專線在成本的巨大差別:Sprint提供的專線服務成本大概是600美元左右1Mbps,換算成人民幣4000元左右。那麼公共網際網路1兆大概是專線1%的成本,如果能夠通過軟體技術、利用公共網際網路的成本實現幾千塊錢的專線質量,對於開發者和普通Internet使用者就太友好了。
我們在平臺上抽取過各個地區兩秒之間的質量,除了印度和國內有的時候會質量不好之外,其他的時候都已經達到了專線級別的質量。大家在評價平臺的時候除了看剛才的丟包小於5%的比例,還有一點是更嚴格的:是以1分鐘為統計週期,這1分鐘丟包要小於0.5%就認為傳輸不穩定。一天24小時有1440分鐘,一共有多少分鐘傳輸不穩定,這個能衡量傳輸網的核心能力,也是大家對比其他相同PaaS服務的引數之一。左邊是通過公共網際網路沒有改進時候的不穩定質量,像中國到東亞一天又377分鐘是不穩定的,中國到歐洲有247分鐘是不穩定的,但是經過軟體技術保證以後都能夠降低到個位數甚至1分鐘以內。
軟體路由技術能夠實現專業級別的數量是大家過去30年都想做到的成就,但是在學術界有限制,學校實驗室裡不具備這麼大流量、機房、實際的頻寬跑,有很多問題是需要實際跑出來才能知道的。
除此之外還有一些技術是我們要來探索的。小學的時候《自然》課本里有土電話:跟隔壁房間通話,用兩個杯子中間系一根繩子做的土電話,反而比經過運營商網路繞一圈更好。我們也發現,像在大學宿舍裡和隔壁宿舍做實時通訊、玩《狼人殺》,通過SD-RTNTM網路繞一圈的質量,有時候可能沒有直接發給隔壁宿舍更好。下面這張圖裡,我們把傳輸分成3種,綠線代表不同的區域、不同的國家,藍線是相同的區域不同的國家,紅線是完全相同的國家。完全相同的國家,再加上相同運營商、地理位置比較近的時候,理論上某些情況下使用P2P技術能獲得更好效果,但要以質量和體驗為目標。
做我們技術驅動的雲服務公司成就感來自當你技術改進的時候,使用者的使用量和使用者的體驗是以非常直觀的數字能夠告訴你結果的。我做了A/B的對比,印度地區帶優化之前和之後,降低了丟包率、延時,最後使用者的使用時長得到了大幅增長。
印度的高階人口喜歡往美國走,而很多普通民眾會到中東打工,所以印度到UAE(阿拉伯聯合大公國)之間的資料流量是很大的,這裡面有強烈的需求。當你優化這裡面傳輸質量的時候,同樣的場景,同樣的Application平均使用時長有大概40% 、50%的增長,質量是決定Application體驗的關鍵因素之一。
實時通訊平臺的技術指標:Scale
服務的另一個關鍵點是RTC PaaS的穩定擔當是Scalable和Efficient,網際網路所有的硬體裝置,包括網線、交換機、路由機都會出故障,經常看到新聞一些大的網際網路公司說網線又被挖斷了,引起了服務故障。不過聲網在歷史上基本沒有出現過全網故障,怎麼保障高可用性呢?關鍵原則之一是一個區域內至少做足夠的對等的部署,當任何一個線路出現問題的時候可以無縫地切換到另一個線路,在使用者沒有感知的情況下切換。另外在架構設計的時候還要遵守第二個原則,再大的故障也不能超過20%的影響範圍,20%在技術要求裡是一級故障,技術設計上要做分割槽、隔離。第三個原則是任何技術改進都以不打擾使用者為底線,做好預埋、相容、灰度上線、A/B測試,我們內部叫飛行中換引擎。
在大規模使用者的支援上還是很有挑戰的,一開始SD-RTN™這個傳輸平臺是針對一對一來優化的,但後來發現有實時大頻道的需求。2017年的時候和滬江合作,做了50000人學生的大課,把中國山區和偏遠地區的學生都組織起來上公益性質的教學大課。這些地區的師資力量很差,不過在中國經濟飛速發展的一個結果是他們的網路條件是很好的,都有4G,家裡都有電腦。滬江會聯絡英國、美國的外教,外教們會把很多學生拉“上麥”,帶他們一起讀英語,一個個糾正山區小孩兒的發音。山區小孩兒可能從來都沒有見過外教,也沒有體驗過真人帶著他們讀英語,滬江和聲網通過SD-RTNTM這個傳輸網路,把外教和山區學生拉到了一起。
50000人實時互動的技術難點在於流量與傳輸的模型會實時變化。比如說一開始只有一位老師,位元速率是1兆,算下來是50個G的流量,這個時候如果有學生來連麥作為第二個主播加入進來,網路上的流量都會翻倍成100G,如果有5個10個小孩兒都加線上上的話流量還可能繼續翻倍。流量突然增長的話對每個節點會有很大沖擊。比如對於G口網路卡的伺服器,本來可能已經跑了六七百兆了,再來5個10個小孩兒的時候怎麼辦呢?這裡面就要架構的實時調整,還要讓終端使用者沒有感知。目前,在類似場景下,我們已經可以支援100萬人同時線上進行實時互動了。
總結
怎麼衡量好的RTC PaaS服務就是這幾方面:架構能水平擴充套件,能夠支援高併發、大頻道,能夠支援任意蜂擁速度進頻道。同時在全球各個地區的覆蓋水平、在網內傳輸質量水平等Perfomant方面有非常苛刻的要求,能夠滿足醫療、教育、遊戲等方方面面應用的需求。
全球最大的實時應用技術平臺實現了迅速的增長,此前Internet為什麼需求沒有釋放呢?因為沒有QoS保證。我們通過軟體化、服務化、共享化解決難題,實現Carrier Level QoS,從而帶來使用者從百萬到幾億規模的增長。相信在接下來三年用量仍然能夠實現1000倍的增長,讓全球凡是有智慧手機的使用者都能夠享受全球範圍的、實時有QoS保證的技術服務。
觀眾提問
提問:我有一個問題想向您請教,您剛剛也提到了Internet也是網際網路成功的一種,在現在成熟網際網路應用技術較為成熟的前提下,能不能在區域網裡?或比較複雜的異構網路中使用您這邊提供的PaaS服務?
孫雨潤:你提的問題是私有化部署。我們的大服務是建立在Internet基礎上,但其實很多客戶、開發者都有這樣的需求,尤其是在金融、政府等行業。現在我們也在和銀行、金融機構、運營商做合作,已經基本解決了此類問題
提問:我有一個問題,如果在內容傳輸過程中需要對內容的稽核,你們在軟體層會不會有通用的解決方案?
孫雨潤:尤其是出海的直播,海外國家都面臨內容稽核的問題,尤其中國更嚴重,但是中國一般比較保守,海外的妹子們都比較開放,他們這類產品在海外運營的時候受到政府更為嚴格的監管。目前我們自己沒有提供這樣的技術,但是我們有和其他公司合作,提供對圖片、視訊,進行分析並過濾。現在會為使用者提供深度整合的解決方案,不需要使用者自己開發。同時我們也預留裸資料的介面,開發者也可以靈活地接入其他供應商介面來完成對內容的稽核、鑑黃。