融云楊威:移動(dòng)IM服務(wù)如何做到極致優(yōu)化

    北京2015年11月26日電 /美通社/ -- 近日,全球知名技術(shù)媒體InfoQ專訪了融云技術(shù)副總裁楊威。以下是訪談全文,原文出自InfoQ中文站:

    目前,隨著移動(dòng)應(yīng)用的泛社交化,移動(dòng)即時(shí)通訊(IM)第三方服務(wù)被越來(lái)越多開發(fā)者所接受。對(duì)于這類服務(wù),功能和穩(wěn)定性是開發(fā)者關(guān)注的重點(diǎn),但在此之外,性能和體驗(yàn)也是非常重要的因素。InfoQ 記者對(duì)融云技術(shù)副總裁楊威進(jìn)行采訪,探討了移動(dòng) IM 服務(wù)如何做到性能和體驗(yàn)上的極致優(yōu)化。

    受訪嘉賓介紹:

    楊威,融云技術(shù)副總裁,移動(dòng)通信技術(shù)專家,智能終端軟件研發(fā)專家。北京郵電大學(xué)通信工程系學(xué)士和碩士學(xué)位,長(zhǎng)期從事智能移動(dòng)終端上的軟件開發(fā)工作,曾在三星中國(guó)通信研究院工作八年。曾負(fù)責(zé)第三方軟件的本地化開發(fā)工作,如高德導(dǎo)航等軟件在全部中國(guó)三星終端上的商業(yè)化過(guò)程。曾作為項(xiàng)目經(jīng)理領(lǐng)導(dǎo)了包括 Galaxy Note 在內(nèi)等多款商業(yè)智能終端的研發(fā)和商業(yè)化項(xiàng)目工作。作為三星融合通信/RCS產(chǎn)品線研發(fā)總負(fù)責(zé)人和技術(shù)專家,參與了中國(guó)移動(dòng)融合通信產(chǎn)品規(guī)范的整體設(shè)計(jì),帶領(lǐng)團(tuán)隊(duì)設(shè)計(jì)了三星 RCS、VoIP/VoLTE 產(chǎn)品線的軟件架構(gòu),并負(fù)責(zé)研發(fā)和團(tuán)隊(duì)管理工作。

    InfoQ:請(qǐng)介紹一下融云在哪些方面做了性能和體驗(yàn)優(yōu)化?是否設(shè)立了性能指標(biāo)?

    楊威:因?yàn)槿谠铺峁┑氖敲嫦蜷_發(fā)者的云服務(wù),我們十分重視性能和用戶體驗(yàn)。我們?cè)谔峁┘磿r(shí)通訊服務(wù)上有三個(gè)基本原則:節(jié)省客戶的資源,讓客戶可擴(kuò)展和可定制,和提供盡量好的功能質(zhì)量。根據(jù)這三個(gè)原則我們其實(shí)是有一些指標(biāo)的,我們內(nèi)部比較關(guān)注5個(gè)性能指標(biāo),分別是流量、電量、速度、質(zhì)量和包大小。

    不過(guò),在很多時(shí)候這些指標(biāo)之間其實(shí)是互相矛盾或者沖突的,所以需要權(quán)衡,不可能在每一個(gè)方面都做到完美。

    InfoQ:目前市面上比較主流的通訊協(xié)議有哪些?融云在通訊協(xié)議方面做了哪些優(yōu)化,和業(yè)界主流或標(biāo)準(zhǔn)相比有哪些優(yōu)勢(shì)?

    楊威:對(duì)于通訊協(xié)議,可能不了解的人覺(jué)得它很神秘,但像我們這種整天面對(duì)它們的人覺(jué)得并沒(méi)有什么特別的地方。用通俗的話來(lái)講,就是兩者之間制定一條規(guī)則,然后遵守這個(gè)規(guī)則我把一個(gè)東西傳給你,你確認(rèn)收到了,這個(gè)規(guī)則就是通訊協(xié)議。在通信、電信行業(yè)里,比較常用的 IM 協(xié)議可以舉三個(gè)例子:

    第一類常用的是 SIP/SIMPLE 等協(xié)議,這個(gè)在電信網(wǎng)絡(luò)用的比較多,包括全球運(yùn)營(yíng)商都在推廣的下一代融合通信。這類協(xié)議的特點(diǎn)是非常健壯,但是規(guī)范非常復(fù)雜,光是看英文規(guī)范文檔可能就要學(xué)習(xí)一兩年,它能夠讓信息在通信節(jié)點(diǎn)之間傳輸?shù)玫胶芎玫陌踩U,非常高的互通行,擴(kuò)展性,同時(shí)在私有部署 的時(shí)候也可裁剪,所以實(shí)際上現(xiàn)在仍然非常多的業(yè)務(wù)在使用這類協(xié)議。  

    第二類常用的就是 XMPP 協(xié)議,XMPP 是互聯(lián)網(wǎng)開源標(biāo)準(zhǔn)的典范。常用的還是 C/S 架構(gòu)。XMPP 協(xié)議的初衷是為互聯(lián)網(wǎng)設(shè)計(jì)的一套協(xié)議,基于 XML協(xié)議,是可擴(kuò)展的,所以理論上你可以將它擴(kuò)展和配置成你想要的業(yè)務(wù)。但是,XMPP 協(xié)議是基于互聯(lián)網(wǎng)早期標(biāo)準(zhǔn)所衍生的,所以它在某些特性上是不適合 移動(dòng)端的,更適合于 PC 端,比如它的數(shù)據(jù)包比較大,另外在斷線重連上做的也不夠好。一般來(lái)講,我還是推薦初學(xué)者用 XMPP 來(lái)搭建系統(tǒng),因?yàn)橛蟹浅XS富的開源資源,但往往在一段時(shí)間之后你會(huì)發(fā)現(xiàn)進(jìn)入瓶頸,比如丟消息,延遲響應(yīng)慢等等,根源還在于 XMPP 機(jī)制上更多的還是考慮了穩(wěn)定的網(wǎng)絡(luò)環(huán)境設(shè)計(jì)的。XMPP 雖然是開源的軟件,開源代表免費(fèi),但開源不代表不需要花時(shí)間,很多時(shí)候?yàn)榱私鉀Q一個(gè)小小的問(wèn)題,你必須通讀它的源代碼,你才知道問(wèn)題出在哪里,如何解決。我們接觸了很多客戶,都是因?yàn)榻鉀Q不了開源協(xié)議帶來(lái)的復(fù)雜問(wèn)題而重新改變了方案。

    第三類常用是物聯(lián)網(wǎng)協(xié)議,比如目前比較知名的MQTT協(xié)議,這是 IBM 開發(fā)的一款支持多平臺(tái)的,非常節(jié)省資源的一套通信協(xié)議。這類協(xié)議的特點(diǎn)就是預(yù)設(shè)場(chǎng)景很簡(jiǎn)單,發(fā)送和接收信息都是一次,報(bào)文盡量簡(jiǎn)短。融云在設(shè)計(jì)自己的協(xié)議 的時(shí)候參考了物聯(lián)網(wǎng)協(xié)議,當(dāng)然,我們也參考了其他業(yè)界比較優(yōu)秀的協(xié)議,比如我們還要發(fā)送圖片、多媒體內(nèi)容,所以加了很多自己的業(yè)務(wù)模型在基本協(xié)議里。

    這第三類例子,其實(shí)代表的是業(yè)內(nèi)很大一部分的通訊協(xié)議,即各個(gè)公司私有定制的通信協(xié)議,從互聯(lián)網(wǎng)早期的雅虎、MSN、到移動(dòng)互聯(lián)網(wǎng)時(shí)代的微信,它們其實(shí)都是私有協(xié)議。這些私有協(xié)議支撐的是一種 OTT 業(yè)務(wù),跨過(guò)電信運(yùn)營(yíng)商來(lái)提供即時(shí)通訊服務(wù)。移動(dòng)互聯(lián)網(wǎng)時(shí)代,App 開發(fā)者和他們的用戶們其實(shí)并不需要關(guān)心底層是怎么實(shí)現(xiàn)的,只要一個(gè)用戶能和另一個(gè)用戶發(fā)送信息就可以,對(duì)于這樣的場(chǎng)景,其實(shí)根據(jù)它們的需求定制一套私有協(xié)議是最好的,事實(shí)上,這也是即時(shí)通訊(軟件)領(lǐng)域主流甚至唯一的實(shí)現(xiàn)方法。

    InfoQ:你們?cè)谑‰娚献隽四男﹥?yōu)化?

    楊威:省電也是開發(fā)者和用戶比較關(guān)心的問(wèn)題,特別是安卓平臺(tái)。電量問(wèn)題分為兩類,一類是前臺(tái)耗電,就是應(yīng)用啟動(dòng)時(shí)消耗的電量,另一類是后臺(tái)耗電,就是應(yīng)用被關(guān)閉或屏幕熄滅時(shí)候的耗電。前臺(tái)耗電的主要指標(biāo)是:1)流量,2)內(nèi)存,3)方法。第一在手機(jī)上,當(dāng)我們?cè)谑褂脭?shù)據(jù)網(wǎng)絡(luò)傳輸時(shí)的耗電量是使用 Wi-Fi 或者不使用網(wǎng)絡(luò)時(shí)候的幾倍到上百倍之間,因?yàn)橥ㄐ判酒墓氖欠浅8叩,所以減小流量就是減小電量的消耗,同時(shí)還有減少通信次數(shù),同樣的留言,發(fā)送兩次和發(fā)送一次,電量消耗其實(shí)差別很大;第二就是內(nèi)存,盡量不使用壓縮算法和其他消耗內(nèi)存大的方法,消耗內(nèi)存越大,使用內(nèi)存越頻繁,耗電量也越高。這里提到壓縮算法,其實(shí)就是指標(biāo)沖突的一個(gè)例子,像你用壓縮算法將內(nèi)容體積減少一半,流量減少一半,但是使用內(nèi)存多了,增加了耗電量,這是個(gè)度的問(wèn)題,如何選擇,需要反復(fù)的測(cè)試和調(diào)整。因?yàn)槲覀儌鬏數(shù)臄?shù)據(jù)本來(lái)就是二進(jìn)制數(shù)據(jù),壓縮作用不大,所以選擇不壓縮。最后就是流 程問(wèn)題,不必要的操作和數(shù)據(jù)會(huì)加大耗電量。在序列化和反序列化方面我們使用 JSON 和 protobuffer,這是谷歌官方推薦的省流量省內(nèi)存的方法,當(dāng)然這也是業(yè)內(nèi)比較通用的方案。

    還有后臺(tái)耗電,IM 類服務(wù)在后臺(tái)時(shí)為了保持長(zhǎng)連接,需要向服務(wù)端發(fā)送心跳包。這里我們除了做了減少心跳包大小這樣常規(guī)的優(yōu)化以外,還做了智能心跳的優(yōu)化,在不同的網(wǎng)絡(luò)條件下發(fā)送心跳的間隔時(shí)間不同,比如 2G 連接和響應(yīng)速度慢,會(huì)消耗更多的電量。這里面的很多數(shù)據(jù)其實(shí)是一種“Magic Number”,因?yàn)檫@是根據(jù)大量的經(jīng)驗(yàn)和測(cè)試數(shù)據(jù)對(duì)比,以及內(nèi)部的數(shù)據(jù)得到的,并經(jīng)常調(diào)整。

    最后其實(shí)很多用戶都有一個(gè)誤區(qū),因?yàn)榘沧渴謾C(jī)比較耗電,其實(shí)根據(jù)我們的測(cè)試,后臺(tái)耗電其實(shí)還是遠(yuǎn)遠(yuǎn)小于前臺(tái)耗電的。耗電往往是因?yàn)槭謾C(jī)軟件有各種bug。一些開發(fā)者會(huì)覺(jué)得IM類的軟件比較耗電,其實(shí) IM 類的軟件一定是相對(duì)最耗電軟件品類,因?yàn)槟阋粩喔渌吮3滞ㄐ,如果其他軟件耗電超過(guò)了 IM 軟件,那才是問(wèn)題。之所以大家覺(jué)得安卓手機(jī)后臺(tái)耗電大的原因,一是因?yàn)槭謾C(jī)上不止裝一個(gè) IM 軟件,二是不光 IM 軟件發(fā)心跳,其實(shí)所有的 App 都在做類似的事情,融云作為開發(fā)包的提供者,每個(gè)版本都會(huì)對(duì)電量和流量進(jìn)行監(jiān)控和測(cè)試,我們對(duì)此會(huì)比應(yīng)用開發(fā)者付出更多的努力,也會(huì)有更強(qiáng)的保證。

    InfoQ:你們?cè)诳焖夙憫?yīng)和傳輸速度上做了哪些優(yōu)化?

    楊威:第一點(diǎn)是數(shù)據(jù)包盡量小,第二點(diǎn)是我們盡量不分包,一次傳輸完所有信息,我們目前服務(wù)的使用場(chǎng)景,用戶發(fā)送的信息往往比較短的,第三點(diǎn)是鏈路盡量短,服務(wù)器對(duì)數(shù)據(jù)做完處理后就發(fā)出去,一些阻塞的操作都是異步進(jìn)行的,另外一些比較耗時(shí)的處理我們會(huì)放到客戶端,第四點(diǎn)是“先收先發(fā)”,比如說(shuō)在客戶端,收到消息之后馬上把它展現(xiàn)出來(lái),然后再做其他操作。比如圖片這類收發(fā)比較慢的消息,我們會(huì)優(yōu)先展示,然后異步再收發(fā)。

    InfoQ:融云在SDK上是否做了多路復(fù)用,安卓后臺(tái)服務(wù)如何防殺死?

    楊威:多路復(fù)用是肯定的,如果后臺(tái)有多個(gè)使用我們 SDK 的應(yīng)用在運(yùn)行,我們可以保證它們同時(shí)只使用一個(gè)心跳。另外還有一個(gè)方面,就是我們?cè)诤笈_(tái)其實(shí)是需要保持兩個(gè)通道的,一個(gè)是 TCP 的長(zhǎng)連接,就是 IM 的,另外還有一個(gè)推送的長(zhǎng)連接。對(duì)于移動(dòng) IM 來(lái)說(shuō),推送是必須要有的,因?yàn)槭謾C(jī)熄屏后其實(shí)后臺(tái)的服務(wù)已經(jīng)停止工作了,只有推送能夠提醒用戶有新消息。對(duì)于這兩個(gè)通道,我們也將它合并為一個(gè)心跳,只需要一個(gè)心跳就可以保持和服務(wù)端的兩個(gè)長(zhǎng)連接。另外在前臺(tái),我們的多路復(fù)用使用進(jìn)程池,保證多條消息的收、發(fā)能夠同時(shí)進(jìn)行,這些進(jìn)程池在使用后也會(huì)回收掉。總之就是,能少發(fā)出一個(gè)心跳消息,我們盡量少發(fā)出去一次,同時(shí)還要一定確保通信鏈路的穩(wěn)定。

    至于后臺(tái)進(jìn)程防殺這是個(gè)比較敏感的問(wèn)題,因?yàn)楝F(xiàn)在用戶不喜歡有一堆進(jìn)程在后臺(tái)消耗它的電量,而且國(guó)內(nèi)的各個(gè) ROM 廠商也在這方面做了一些工作,有些應(yīng)用長(zhǎng)時(shí)間占用系統(tǒng)資源的做法可能會(huì)被封禁。以前業(yè)內(nèi)一般常用的做法是做了很多技術(shù)性工作來(lái)保證后臺(tái)進(jìn)程永遠(yuǎn)殺不死,因?yàn)閱拘崖蕦?duì)于很多 App 廠商都 是很重要的評(píng)測(cè)指標(biāo),把后臺(tái)殺死消息就收不到了。不過(guò)融云作為一家服務(wù)提供商,我們優(yōu)先還是要對(duì)客戶負(fù)責(zé),因此所有的灰色地帶都是不碰的,我們現(xiàn)在的 SDK 默認(rèn)設(shè)置是一定不觸犯系統(tǒng)或者 ROM 廠商的紅線,如果系統(tǒng)一定要?dú)⑦M(jìn)程還不想你重啟,那我們的后臺(tái)就不再啟動(dòng),我們一定優(yōu)先遵從手機(jī)操作系統(tǒng)的規(guī)定,也就是用戶的意愿。

    InfoQ:融云用戶目前有哪些使用場(chǎng)景,針對(duì)這些場(chǎng)景做過(guò)哪些優(yōu)化?

    楊威:有用戶對(duì)我們總結(jié)說(shuō),融云最大的價(jià)值就是提供了一個(gè)穩(wěn)定的長(zhǎng)連接,用這個(gè)長(zhǎng)連接其實(shí)可以干很多事。我們認(rèn)為融云最大的價(jià)值是服務(wù),客戶想到的點(diǎn)子我們可以快速的研發(fā)和實(shí)現(xiàn)業(yè)務(wù)。群眾的力量是無(wú)窮的,我們的用戶發(fā)掘了很多以前我們從來(lái)也想不到的用法。比如做視頻直播、發(fā)信令(遙控器)、彈幕,還有做像滴滴打車一樣的實(shí)時(shí)地理位置共享。像微信一樣的聊天界面很容易相信,但很多應(yīng)用場(chǎng)景的界面完全都不是 IM,但其實(shí)他就是 IM。比如滴滴打車的首頁(yè),因?yàn)槟憧梢韵胍幌滤莻(gè)界面,每個(gè)車都定時(shí)發(fā)送自己的地理位置,然后一起顯示,其實(shí)原理和聊天室是一樣的。我們經(jīng)常和用戶溝通,也為這些場(chǎng)景做了很多優(yōu)化,舉個(gè)例子,比如視頻直播的聊天室,我們之前做得比較簡(jiǎn)單,就是滿足了收發(fā)信息的需求,但是有些做視頻直播的開發(fā)者還希望有排隊(duì)、進(jìn)場(chǎng)順序等等,對(duì)于有些客戶,我們會(huì)為它做一個(gè)定制版系統(tǒng),有些如果是非常好的建議,我們也會(huì)吸收到我們的主系統(tǒng)里面。

    InfoQ原文鏈接:http://www.infoq.com/cn/news/2015/11/yangwei-interview


微信掃描分享本文到朋友圈
掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
  • 1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書
  • 2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書-2022_03-21
  • 3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無(wú)線接入網(wǎng)白皮書
  • 4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書》
  • 5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5GNTN技術(shù)白皮書
  • 6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解
  • 7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書
  • 8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《R1623501-g605G的系統(tǒng)架構(gòu)1
  • 本周熱點(diǎn)本月熱點(diǎn)

     

      最熱通信招聘

    業(yè)界最新資訊


      最新招聘信息

    最新論壇貼子