我們將探討Agora.io實(shí)時(shí)云如何通過(guò)端到端的虛擬網(wǎng)絡(luò )體系結構來(lái)處理全球“移動(dòng)端到端”Web實(shí)時(shí)通信(WebRTC)的挑戰。本文的一個(gè)版本最初發(fā)布在《WebRTCWorld》(WebRTC世界)(參見(jiàn):http://bit.ly/Mobile2Mobile)中;此前,Agora.io剛剛宣布融資0.2億美元并推出首款產(chǎn)品(參考資料1)。
如今,應用程序和用戶(hù)的主要特點(diǎn)是全球化和移動(dòng)化,而且通常具有“移動(dòng)端到端”的性質(zhì)。實(shí)際上,“移動(dòng)爆發(fā)點(diǎn)”發(fā)生在2014年,就在這一年,移動(dòng)智能手機用戶(hù)達到近20億人,超過(guò)了全球的臺式機用戶(hù)數量(參考資料2)。這些統計數據表明,80%的互聯(lián)網(wǎng)用戶(hù)擁有智能手機,并且這些移動(dòng)用戶(hù)的在線(xiàn)時(shí)間更長(cháng),內容消費量也大幅增多。諸如Facebook和Twitter等社交媒體平臺指出,如今移動(dòng)交互次數顯著(zhù)多于臺式機交互次數,而且大多數新的社交媒體應用程序(例如Instagram、WhatsApp、WeChat、Snapchat等)主要都是移動(dòng)應用程序。
最近的研究表明,我們使用手機的時(shí)間超過(guò)了睡眠時(shí)間(參考資料3),更不用說(shuō)看電視或進(jìn)行其他活動(dòng)的時(shí)間!眾所周知,我們的在線(xiàn)社交、游戲和信息社區都是全球化的——我們每天都在與散布全球的人們分享信息和溝通交流。
在應用程序中加入實(shí)時(shí)通信功能,讓參與者可根據需要在任何地方與對方交談并能看到對方,這種全球化的和移動(dòng)化的實(shí)時(shí)通信無(wú)疑是一個(gè)巨大的挑戰。第一家真正切實(shí)簡(jiǎn)化互聯(lián)網(wǎng)全球通信的公司是Skype,正因為如此,我們中的許多人仍在使用Skype與遠在其他國家/地區的親屬進(jìn)行交談。然而,Skype已成為一個(gè)僵化的孤立平臺,由于其API較少,因此無(wú)法以靈活、隱形的方式輕易嵌入在其他應用程序中。此外,Skype現已納入Microsoft麾下,已經(jīng)成為Microsoft為擴展MSOffice并取代MSLync而重點(diǎn)開(kāi)發(fā)的Skype-For-Business中的關(guān)鍵一環(huán),似乎不會(huì )再回過(guò)頭來(lái)加入可以輕易嵌入的通信功能。
那么,對于自行構建應用程序來(lái)直接納入通信功能的應用程序開(kāi)發(fā)人員而言,有什么替代方案呢?過(guò)去四年來(lái),在Google和Mozilla以及最近Microsoft和其他公司(參考資料4)的推動(dòng)下,在IETF(參考資料5)和W3C(參考資料6)開(kāi)展的標準制定計劃的支持下,WebRTC登上了歷史舞臺,成為一種可將通信功能輕松集成到應用程序中的全新開(kāi)放式標準。
本博文將探討標準的WebRTC方案在為真正的全球化、移動(dòng)化的應用程序交付可靠、一致的體驗質(zhì)量(QoE)方面所面臨的挑戰,并討論可化解這些挑戰并針對全球化而優(yōu)化的體系結構。
“標準的”對等WebRTC體系結構所面臨的挑戰
WebRTC應用程序的基礎體系結構模式是“三角形”模式,如下所示。

無(wú)論應用程序位于移動(dòng)應用程序之中,還是位于瀏覽器的JavaScript代碼中,都會(huì )與集中式的Web應用程序服務(wù)器進(jìn)行通信,這些服務(wù)器為每個(gè)設備提供在各設備之間協(xié)調通信所需的信息。在每個(gè)設備上,API用于根據需要獲取對麥克風(fēng)、揚聲器和攝像頭的訪(fǎng)問(wèn),并計算設備之間的網(wǎng)絡(luò )路徑,此過(guò)程可能會(huì )因為防火墻、NAT和其他機制而變復雜。建立通信后,語(yǔ)音、視頻和數據通信媒體將以對等端到對等端的方式直接在設備之間流動(dòng)。一切看似完美無(wú)缺。
然而,雖然互聯(lián)網(wǎng)對等通信因為簡(jiǎn)便、免費且不需要其他基礎架構而堪稱(chēng)是“理想的”方案,但是用戶(hù)能否在整個(gè)通信過(guò)程中獲得出色的體驗質(zhì)量,則完全取決于網(wǎng)絡(luò )連接的質(zhì)量以及此質(zhì)量在整個(gè)通信會(huì )話(huà)期間的穩定性。
理想的WebRTC使用情形通常表述如下:兩個(gè)端點(diǎn)均為瀏覽器,二者分別基于具有適當性能且配備WiFi或有線(xiàn)網(wǎng)絡(luò )連接的筆記本電腦,并通過(guò)具有適當一致性的網(wǎng)絡(luò )在同一國家/地區內進(jìn)行通信。在這種情況下,不會(huì )有什么問(wèn)題。但是,如果這些設備是具有3G、4G或WiFi連接且可能在這些連接之間切換的手機,帶寬在用戶(hù)移動(dòng)過(guò)程中經(jīng)常波動(dòng),而且這些設備處于完全不同的國家/地區,其中某些國家/地區的網(wǎng)絡(luò )很不通暢,那么通信質(zhì)量就可能非常糟糕!因此,許多具有跨國家/地區通信經(jīng)歷的應用程序開(kāi)發(fā)人員發(fā)現,WebRTC的體驗質(zhì)量是一個(gè)真正的挑戰。標準互聯(lián)網(wǎng)不對實(shí)時(shí)通信提供任何類(lèi)型的“服務(wù)質(zhì)量”保證,這一點(diǎn)可從私有企業(yè)網(wǎng)絡(luò )中看出;因此,只要存在某種連接,就不會(huì )對用戶(hù)之間傳輸語(yǔ)音和視頻數據包的方式進(jìn)行任何重新路由或更改。即使狀況很糟,也會(huì )照舊進(jìn)行。
就本質(zhì)而言,WebRTC提供了各種庫和編解碼器,它們包括在某些Web瀏覽器中,或者由不同公司打包為SDK以供移動(dòng)應用程序使用,但是WebRTC并不為這些端點(diǎn)提供針對QoE優(yōu)化的網(wǎng)絡(luò )。網(wǎng)絡(luò )質(zhì)量完全取決于您以及用戶(hù)之間變化莫測的諸多移動(dòng)網(wǎng)絡(luò )和互聯(lián)網(wǎng)連接!
全球性的“移動(dòng)到移動(dòng)”應用程序
HelloTalk是一款典型的全球性移動(dòng)應用程序,同時(shí)適用于A(yíng)ppleIoS和Android,可為任何國家/地區的用戶(hù)提供一個(gè)交互式社交環(huán)境來(lái)學(xué)習新的語(yǔ)言。我們曾在之前關(guān)于HelloTalk的博文中深入探討過(guò)HelloTalk,因此本文不再贅述(參考資料7)。案例研究已經(jīng)說(shuō)明了對于像HelloTalk這樣的公司,為何必須要讓全球性的“移動(dòng)端到端”通信每次都得提供卓越的體驗質(zhì)量,并且無(wú)論用戶(hù)處于哪個(gè)國家/地區,無(wú)論采用何種網(wǎng)絡(luò )連接。
Agora.ioCaaS——針對RTC優(yōu)化的全球網(wǎng)絡(luò )
對于“移動(dòng)端到端”的WebRTC挑戰,其解決方案在于提供一個(gè)針對RTC優(yōu)化的全球虛擬網(wǎng)絡(luò ),盡可能以本地方式連接各個(gè)移動(dòng)設備,然后確保這些用戶(hù)之間的全球連接在整個(gè)通信會(huì )話(huà)期間都保持出色的QoE。

此體系結構包含兩個(gè)重要部分:
- 即使在移動(dòng)中的最后一英里,也能通過(guò)“高速通道”從移動(dòng)設備接入網(wǎng)絡(luò )。
- 網(wǎng)絡(luò )中的各個(gè)設備之間建立全球性連接。
移動(dòng)設備可通過(guò)3G、4G或WiFi和寬帶連接至Agora.io網(wǎng)絡(luò ),延遲和連接類(lèi)型可能會(huì )在用戶(hù)移動(dòng)中不斷變化。因此,這里的重點(diǎn)是容錯,并基于網(wǎng)絡(luò )狀況不斷調優(yōu)音頻/視頻。由于預計會(huì )出現“數據包丟失”和“抖動(dòng)”等技術(shù)問(wèn)題,因此體系結構在設計上也必須能夠處理它們。這需要對編解碼器和傳輸協(xié)議進(jìn)行創(chuàng )新,使之針對移動(dòng)設備而高度優(yōu)化。對于特定的設備,即使是回聲消除這類(lèi)功能,也必須高度調優(yōu),確保從一開(kāi)始就提供最佳語(yǔ)音質(zhì)量。
為確保從當地進(jìn)行快速訪(fǎng)問(wèn),需要提供大量的訪(fǎng)問(wèn)節點(diǎn)——Agora.io目前在全球擁有超過(guò)65個(gè)數據中心,而且還在不斷擴張。通信將會(huì )直接進(jìn)入Agora.io網(wǎng)絡(luò ),而不是在全球進(jìn)行隨機的對等傳輸。這使得“虛擬”Agora.io網(wǎng)絡(luò )可以自動(dòng)、持續地針對QoE進(jìn)行優(yōu)化。
當通信抵達Agora.io網(wǎng)絡(luò )節點(diǎn)后,如何將此通信路由至目標就成了關(guān)鍵問(wèn)題。為確保在全球保持較低的成本,Agora.io采用全球的互聯(lián)網(wǎng)(因此任何人都不需要為專(zhuān)用線(xiàn)路支付電信層面的成本),但其路由和優(yōu)化并不是完全依賴(lài)互聯(lián)網(wǎng)。Agora.io不斷監視其所有節點(diǎn),知道全球在每一時(shí)刻的最佳實(shí)時(shí)通信網(wǎng)絡(luò )路徑。因此,在路由過(guò)程中,系統會(huì )根據需要動(dòng)態(tài)重新路由實(shí)時(shí)通信,從而繞開(kāi)瓶頸并確保實(shí)現良好的QoE。Agora.io網(wǎng)絡(luò )節點(diǎn)還直接管理低層級冗余選項和重新傳輸決策,對實(shí)時(shí)語(yǔ)音和視頻通信提供最適當的處理,這一點(diǎn)不同于普通的Web需求或單向流式傳輸需求。
此方式對于處理網(wǎng)絡(luò )“不良”(Brown-Out)狀況具有重要意義。在網(wǎng)絡(luò )狀況不良時(shí),各互聯(lián)網(wǎng)路徑仍然有效,但狀況很糟,無(wú)法滿(mǎn)足實(shí)時(shí)通信對于低延遲和低數據包丟失率的需求。“中斷”(Black-Out)則與此不同,其中各連接均已中斷,互聯(lián)網(wǎng)可自行(緩慢)確定建立新路由的必要性。Agora.io虛擬網(wǎng)絡(luò )可快速發(fā)現整個(gè)網(wǎng)絡(luò )中較好和較差的通信狀況,并實(shí)時(shí)采取相應的措施。
因此,在整個(gè)會(huì )話(huà)期間,大部分Agora.io通信并非采取對等傳輸(盡管在本地可實(shí)現此功能),而是接受動(dòng)態(tài)管理;Agora.io的全球分布式節點(diǎn)(超過(guò)65個(gè))以虛擬網(wǎng)絡(luò )層的形式在標準互聯(lián)網(wǎng)之上運行。
其結果則是一款真正的端到端全球SDK和網(wǎng)絡(luò )管理解決方案,可確保為語(yǔ)音和視頻通信提供出色的體驗質(zhì)量,尤為注意滿(mǎn)足移動(dòng)設備的嚴苛要求。
結論——優(yōu)化的體驗質(zhì)量
為支持新一代“移動(dòng)端到端”的全球性應用程序,以及臺式機/瀏覽器和移動(dòng)混合情形實(shí)現實(shí)時(shí)通信,開(kāi)發(fā)人員需要一種針對RTC優(yōu)化的全球網(wǎng)絡(luò )。當今的大多數WebRTC方案只是提供相應的庫,而網(wǎng)絡(luò )是否夠好則完全取決于您!而且,這些庫和工具通常針對瀏覽器使用情形而優(yōu)化,不一定適合性能和網(wǎng)絡(luò )連接質(zhì)量均波動(dòng)劇烈的移動(dòng)設備。
Agora.io提供了一種富有創(chuàng )新的全球RTC網(wǎng)絡(luò ),其Agora。io移動(dòng)SDK中已內置移動(dòng)優(yōu)化,因此Agora客戶(hù)可直接受益于這些功能。Agora將繼續納入更多WebRTC標準,以便輕松連接至標準的WebRTC瀏覽器,同時(shí)通過(guò)SDK保持最佳的“移動(dòng)到移動(dòng)”體驗。這使得Agora客戶(hù)(例如HelloTalk等)能夠為其全球用戶(hù)提供更多選擇,并大幅提升體驗質(zhì)量。
- 參考資料1:http://cn.agora.io/press-releases/%E5%A3%B0%E7%BD%91agora%E5%AE%A3%E5%B8%83%E8%8E%B7%E5%BE%972000%E4%B8%87%E7%BE%8E%E5%85%83b%E8%BD%AE%E8%9E%8D%E8%B5%84/
- 參考資料2:http://www.smartinsights.com/mobile-marketing/mobile-marketing-analytics/mobile-marketing-statistics/
- 參考資料3:http://www.dailymail.co.uk/health/article-2989952/How-technology-taking-lives-spend-time-phones-laptops-SLEEPING.html
- 參考資料4:http://www.agora.io/webrtc-video-and-quality-of-experience/
- 參考資料5:https://tools.ietf.org/wg/rtcweb/
- 參考資料6:https://www.w3.org/2011/04/webrtc/