干貨!建設(shè)高質(zhì)量通訊云平臺的要點(diǎn)和關(guān)鍵技術(shù)!
12月19日,UPYUN架構(gòu)與運(yùn)維大會(Arch&Ops Conf)深圳專場在科興科學(xué)園舉辦,這場面向運(yùn)維和架構(gòu)從業(yè)人員所舉辦的大型技術(shù)會議,致力于推動各項(xiàng)運(yùn)維技術(shù)、產(chǎn)品架構(gòu)等在互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)的研發(fā)和應(yīng)用。深圳場是此次會議的收官之場,云之訊CTO賈俊杰先生作為本次大會的***嘉賓,為大家?guī)砹祟}為《高質(zhì)量通訊PAAS平臺的架構(gòu)要點(diǎn)》的主題演講。
云之訊CTO賈俊杰演講內(nèi)容實(shí)錄(摘要版):
(云之訊***技術(shù)官,賈俊杰先生,請叫我最帥CTO~)
賈俊杰:我的主題是建設(shè)高質(zhì)量通訊云平臺的要點(diǎn)和關(guān)鍵技術(shù)。通信概念非常廣,有信息交互的都可以算通訊,所有可見的互聯(lián)網(wǎng)業(yè)務(wù)都可以稱之為通訊。我講的概念是屬于大家認(rèn)知的傳統(tǒng)中,電信網(wǎng)里的通信概念,包括我們熟悉的打電話、視頻通話、短信、會議、社交中心。云平臺,大家應(yīng)該非常熟悉,我們現(xiàn)在用得非常廣泛,從IaaS、PaaS、SaaS,大家經(jīng)常使用這三層,PaaS包括推送等云平臺。估計(jì)大家用過短信業(yè)務(wù),我認(rèn)為這屬于通信領(lǐng)域,比如我們發(fā)驗(yàn)證碼,怎么把傳統(tǒng)的打電話能力集成到APP里,把視頻通話、語音會議、視頻會議集中到APP里,這是通訊云平臺的概念。我們是做融合通訊的云平臺服務(wù)商,今天我們把在構(gòu)建過程中遇到的問題以及對這方面的問題解決方法,給大家提供個方向。
我們看通訊云平臺的構(gòu)建方式,要看通訊業(yè)務(wù)的發(fā)展趨勢。如果對通訊有所了解,我們會發(fā)現(xiàn),通訊在全面向IP化、移動互聯(lián)網(wǎng)化發(fā)展。非常傳統(tǒng)的窄帶通訊傳輸,不管在電信網(wǎng)里都是完全I(xiàn)P化傳輸。移動互聯(lián)網(wǎng)更不用說,肯定也是在IP化的基礎(chǔ)上進(jìn)行傳輸,這是一個非常大的發(fā)展方向。一是傳統(tǒng)的電信網(wǎng)的通訊服務(wù)商,它的通訊能力非常單一,傳統(tǒng)的通訊能力只可能進(jìn)行語音通話、發(fā)短信,無法滿足互聯(lián)網(wǎng)的發(fā)展需要。二是像微信、QQ做了這個事情,能夠在移動互聯(lián)網(wǎng)的場景下做通信。
云化發(fā)展方向,這主要來自于互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)的業(yè)務(wù)發(fā)展需要,包括傳統(tǒng)互聯(lián)網(wǎng)以及現(xiàn)在主流的傳統(tǒng)電信網(wǎng)、主流IP網(wǎng)通訊服務(wù)商蠻封閉。現(xiàn)在在各行各業(yè)都需要通訊能力,比如在線醫(yī)療、在線教育、智能硬件等各行各業(yè)都需要通訊能力。這兩年在逐漸興起通訊云化服務(wù),在這樣一個發(fā)展趨勢下,我們怎么構(gòu)建一個通訊的云平臺。我們總結(jié)出以下幾個要點(diǎn),一是精巧和高效,在基于互聯(lián)網(wǎng)的通訊,由于本身的特點(diǎn),對實(shí)時性的要求特別高,二是這個通訊是雙向的,這對我們平臺的架構(gòu)要求非常大。
從高效方面來講,我們做了分層架構(gòu)設(shè)計(jì),我們把服務(wù)層、業(yè)務(wù)層等進(jìn)行分離,我們底層有OTP網(wǎng)絡(luò)支撐。在不同的層面單獨(dú)負(fù)責(zé)不同的能力,接入層設(shè)計(jì)來講,網(wǎng)絡(luò)層來講完全不理解業(yè)務(wù),我們叫做透明轉(zhuǎn)發(fā)的網(wǎng)絡(luò),對于接入層,他與業(yè)務(wù)相吻合,不完全理解業(yè)務(wù),對業(yè)務(wù)層是完成了各種各樣的通訊業(yè)務(wù),達(dá)到不同層次的能力的分工,方便以后的發(fā)展。擴(kuò)展隔離方面,接入層不理解業(yè)務(wù),最需要通過業(yè)務(wù)ID或是通訊過程中的備ID做路由,根據(jù)不同ID和路由的請求,分到不同的模塊。我們有會議、點(diǎn)對點(diǎn)語音做分割,不會有耦合關(guān)系。異構(gòu)多元化在接入層和網(wǎng)絡(luò)層,我們的趨勢按照現(xiàn)在理解處于傳統(tǒng)的電信網(wǎng)和互聯(lián)網(wǎng)的融合通訊的時代,相互補(bǔ)充。
接入層有豐富的接入能力,對于互聯(lián)網(wǎng)的接入能力來講,我們需要支持像各種移動端、PC固定端、網(wǎng)頁打電話等技術(shù),它的連接方式主要通過TCP實(shí)現(xiàn)的。短信有多的接入方式,可能是HTTP、傳統(tǒng)電信短信的協(xié)議。在穩(wěn)定高可用上,主要構(gòu)建了OTT通訊網(wǎng)絡(luò),這個網(wǎng)絡(luò)是基于公共互聯(lián)網(wǎng)的加速網(wǎng)絡(luò),我在這個網(wǎng)絡(luò)上跑我的業(yè)務(wù),避免通用的互聯(lián)網(wǎng)帶給我實(shí)時通訊的影響,后面我們也會專門給大家介紹一下。
談到網(wǎng)絡(luò),我們要了解互聯(lián)網(wǎng)做VOIP的現(xiàn)狀,網(wǎng)絡(luò)非常復(fù)雜,無論從用戶的接入網(wǎng)絡(luò)、骨干傳輸網(wǎng)絡(luò)都非常復(fù)雜。用戶網(wǎng)絡(luò)是Wifi、3G、4G,傳輸網(wǎng)絡(luò)是時多種運(yùn)營商,涉及跨運(yùn)營商、跨地域的通訊,這對實(shí)時通訊的影響非常重要。實(shí)時通訊主要看丟包、延遲和抖動。這跟我們通用的互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)的差異非常大,在實(shí)時通訊里,延遲的要求是幾十毫秒或百毫秒級的,很多互聯(lián)網(wǎng)的業(yè)務(wù)沒什么高要求。丟包,有時候丟包1-2%的時候,非常影響通話的體驗(yàn),這在平常的業(yè)務(wù)上基本沒有感知。
所有的問題導(dǎo)致了我們在做通訊云平臺的時候遇到了各種各樣的困難,我們怎么做?這也是回到剛才我們所說的OTT網(wǎng)絡(luò)建設(shè)上,一個透明的智能路由網(wǎng)絡(luò),這是我自建的加速平臺,包括谷歌、騰訊、YY等***的互聯(lián)網(wǎng)通訊都有網(wǎng)絡(luò)。這個網(wǎng)絡(luò)很大程度上可以加速我的通訊服務(wù),保證通訊質(zhì)量,解決網(wǎng)絡(luò)復(fù)雜以及***一公里的問題。
這類似于主流SDN的技術(shù),通過自己管理路由的方式,把核心部署的節(jié)點(diǎn)關(guān)聯(lián)起來,如果兩個用戶在做通訊的時候,我只需要把用戶通過它的IP地址識別,接入離他最近的節(jié)點(diǎn)上,被叫也是通過IP識別,這兩個節(jié)點(diǎn)的通訊一定是通過自己的探測技術(shù)、監(jiān)控技術(shù)實(shí)現(xiàn),進(jìn)行動態(tài)的運(yùn)算,保證這兩個用戶之間選擇一條最快,質(zhì)量***、最穩(wěn)定的通道傳輸語音數(shù)據(jù)。這里主要應(yīng)用到隧道技術(shù)以及OSFP協(xié)議路由技術(shù)。在性能上,如果我們考慮到媒體轉(zhuǎn)發(fā)對機(jī)房、網(wǎng)絡(luò)的笑話比較大,所以我們有轉(zhuǎn)發(fā)的模塊進(jìn)行加速,提高性能。
建設(shè)OTT網(wǎng)絡(luò)的核心問題,一是路由機(jī)制,二是策略問題,三是怎么部署這些點(diǎn),如果用戶選擇這個節(jié)點(diǎn)離用戶不是最近的,或是離用戶的節(jié)點(diǎn)效果不是***的,策略非常好,用戶的效果也保障不了。這是我們根據(jù)兩點(diǎn),一是自身分布情況,你的用戶分布在哪里,用戶類型是怎樣的,在某一個地區(qū)是Wifi的多還是3G的多,是聯(lián)通的多還是電信的多,根據(jù)用戶的分布情況決定選擇的點(diǎn)。我們會根據(jù)全國的情況劃分區(qū)域,針對不同的區(qū)域針對性選點(diǎn)。這是用戶區(qū)域分布和某一個容量節(jié)點(diǎn)有很大的關(guān)系,在選點(diǎn)的過程中用一些第三方或是自己業(yè)務(wù)的測試方法監(jiān)控。
我選擇的這個點(diǎn)對我來說一定是最有效的,保證我選的點(diǎn)是最有效的。這是我們大概組網(wǎng)的網(wǎng)絡(luò)拓?fù)?,包括分層次網(wǎng)絡(luò)架構(gòu),分布式部署,按區(qū)域劃分業(yè)務(wù)。最前端的是用戶部署,這一定部署在離用戶最近的地方,保證用戶就近選擇一個點(diǎn)進(jìn)行接入。另一個是核心的轉(zhuǎn)發(fā)節(jié)點(diǎn)。這種接入節(jié)點(diǎn)可能是單線的,這個點(diǎn)只接入聯(lián)通的用戶,這個點(diǎn)只接入電信的用戶,我可以通過中間的轉(zhuǎn)發(fā)節(jié)點(diǎn),這一定是三線或是BGP的機(jī)房。分布式部署,這在網(wǎng)絡(luò)拓?fù)渖弦灿畜w現(xiàn),比傳統(tǒng)的通訊網(wǎng)分布的更廣泛一些,傳統(tǒng)的做電商、點(diǎn)播、直播可能不需要那么多分布點(diǎn),我們分布得更廣泛,覆蓋到地市級的水平。按區(qū)劃分業(yè)務(wù),每個地區(qū)只負(fù)責(zé)接入本地區(qū)的業(yè)務(wù),核心點(diǎn)也是,某一個節(jié)點(diǎn)只負(fù)責(zé)本地的,某一些接入點(diǎn)的中轉(zhuǎn),而不是負(fù)責(zé)全局的,它有一個分配策略。
在建設(shè)OTT網(wǎng)絡(luò)的同時,怎么對網(wǎng)絡(luò)進(jìn)行監(jiān)控和質(zhì)量管理。一是全網(wǎng)絡(luò)節(jié)點(diǎn)網(wǎng)絡(luò)狀態(tài)監(jiān)控;二是全網(wǎng)絡(luò)節(jié)點(diǎn)故障實(shí)時預(yù)警;三是基于業(yè)務(wù)運(yùn)營不斷優(yōu)化。我會動態(tài)根據(jù)它的監(jiān)控情況做調(diào)整,某種情況下可以做到自動切換。用戶一般會動態(tài)得到兩個以上的節(jié)點(diǎn),離它最近的節(jié)點(diǎn)出故障,它會動態(tài)選擇次近的節(jié)點(diǎn),不會導(dǎo)致接入失敗。我們會根據(jù)業(yè)務(wù)的情況不斷做調(diào)整,這是非常關(guān)鍵的。尤其是我們選了這么多點(diǎn),我們選的每個點(diǎn)在本地不一定是***的,即使當(dāng)時是***的,長期來講不一定是非常好的,有可能會變壞。
通過業(yè)務(wù)運(yùn)營的數(shù)據(jù)做判斷,我們在通訊里語音,它有一些值,如果這個值在持續(xù)下降,我會把這個點(diǎn)撤掉,選擇更好更新的節(jié)點(diǎn)替換它。通過網(wǎng)絡(luò),還有一些需要優(yōu)化的東西,這跟剛才說的不太一樣,剛才說的都是HTTP等協(xié)議,這里基本不用HTTP,我們用得比較多的是SIP、XMPP、私有協(xié)議,我們選擇的是私有協(xié)議。私有協(xié)議類似于完全二進(jìn)制,自己編碼、解碼實(shí)現(xiàn),這種效率是***的,尤其是針對移動互聯(lián)網(wǎng)的場景。
媒體傳輸質(zhì)量保障,這不同于一般的點(diǎn)播,這是雙向的,丟包率的影響非常大,對實(shí)時的要求非常高。我們會做非常多的糾錯以及保證質(zhì)量的措施,我在傳輸一份數(shù)據(jù)的時候,它可能會傳2份或是1.5份,具體看不同的網(wǎng)絡(luò),在某一個包丟掉后,我可以通過其他的包把它修復(fù)掉。在某一些丟包場景下,可以保證我的傳輸數(shù)據(jù)的效果。我們現(xiàn)在丟包5-25%,在大于30%的時候,Mos值會低于正常的情況,無法保證,效果會受一定影響。
通過ARQ的技術(shù),我們稱之為自動同傳,尤其是視頻的時候,每一幀的大小不一樣,我們對關(guān)鍵值會做同傳的處理,某一些I幀丟掉了,我們會保持一些。
統(tǒng)一策略控制,我們認(rèn)為這是非常關(guān)鍵的。就通訊來講,它對終端的適應(yīng)性不太好,終端不同的手機(jī)對語音通訊和視頻通訊的參數(shù)非常大,我們的策略是把所有的策略統(tǒng)一配置,比如客戶端在語言設(shè)置時選擇多大的流、連接方式、路由方式、優(yōu)選編碼解碼等,都是通過后臺的中心進(jìn)行控制。策略控制的思路主要包括后端、統(tǒng)一制定策略;動態(tài)、智能調(diào)動;前端,使能可控。
不管是時網(wǎng)絡(luò)的因素還是手機(jī)本身所在不同的網(wǎng)絡(luò)類型上,經(jīng)常會有變化,如果策略寫死會對各種情況下的通訊指南有很大的影響,這是在后臺做統(tǒng)一配置。這是動態(tài)的,智能調(diào)整,我們講每次通話的參數(shù)都不一樣,在打電話或通信之前,動態(tài)獲取信息,我會判斷這次通話用的是什么網(wǎng)絡(luò),你的網(wǎng)絡(luò)質(zhì)量怎么樣,我給你動態(tài)確定,你在這樣的參數(shù)下需要什么樣的參數(shù),保證動態(tài)獲取配置,選擇一個最合適的通訊方式跟后臺通訊。
使能方面,很多通訊參數(shù)配置分不同等級,后面談到有一些是全局的,有的是按業(yè)務(wù)的,不同的業(yè)務(wù)采用不同的參數(shù),***級的是某些用戶才會遇到的問題,我們會單獨(dú)為他定制參數(shù)。這是流量控制的策略和參數(shù),***個是全局的配置,一個心跳的技術(shù),最小流量的消耗。在媒體數(shù)據(jù)壓縮上,我們會選擇私有壓縮的方式,把信息進(jìn)行壓縮。在碼率上,我們動態(tài)做調(diào)整。比如3G情況下,碼率一般在150至200Kbps之間,效果最合適,不然可能會有問題。
Wifi情況倆下面大概是200至300之間。如果設(shè)置得不合理,你采用非常高的碼率會導(dǎo)致帶寬不夠,傳輸數(shù)據(jù)越多,丟包率越大。本身在Wifi情況下,帶寬的利用率不好,很多帶寬沒利用起來。
客戶端連接策略上,我們可以動態(tài)調(diào)整,主要有幾點(diǎn),一是就近接入自有網(wǎng)絡(luò),二是做同網(wǎng),尤其是通訊業(yè)務(wù),按我們的經(jīng)驗(yàn),丟包率等影響非常差;三是預(yù)埋的信息,把歷史上獲取的接入層預(yù)埋到里面去,你可以同時選擇多個節(jié)點(diǎn),根據(jù)實(shí)際情況把差的節(jié)點(diǎn)保持一個***的節(jié)點(diǎn)。這是媒體路由的策略,我們會選擇媒體多個節(jié)點(diǎn)選擇策略,我會運(yùn)用最小路徑的算法,我會選擇怎么跳轉(zhuǎn),假如兩個都是同網(wǎng),可能是P2P,或是一跳中轉(zhuǎn)。其他的是動態(tài)的策略調(diào)整的技術(shù),這是我們策略控制機(jī)制,我們控制策略的時候會把所有終端類型、版本號、網(wǎng)絡(luò)狀態(tài)情況,我們都會統(tǒng)計(jì)出來,根據(jù)不同的手機(jī)型號,他可能采用什么參數(shù)***,我會定制一套參數(shù)在后面,一定保障它在這種參數(shù)下,通訊的質(zhì)量和通訊效果是***的。這是具體的客戶端控制參數(shù),我需不需要做冗余,是否需要做日志檢測的機(jī)制,這些后臺都可以控制。
這是IM消息同步機(jī)制,這適用于IM通訊技術(shù)里。傳統(tǒng)來講,可能直接推下去了,這種方式可能會更好,開始是這種通知,挖取所有的通知,保障消息100%不丟失,這是非常好的策略。實(shí)時通訊是當(dāng)前的小眾業(yè)務(wù)方向,希望對大家有幫助,如果大家想深入了解,我們可以線下交流,謝謝大家!