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

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

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

    受訪嘉賓介紹:

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

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

    楊威:因為融云提供的是面向開發(fā)者的云服務(wù),我們十分重視性能和用戶體驗。我們在提供即時通訊服務(wù)上有三個基本原則:節(jié)省客戶的資源,讓客戶可擴展和可定制,和提供盡量好的功能質(zhì)量。根據(jù)這三個原則我們其實是有一些指標(biāo)的,我們內(nèi)部比較關(guān)注5個性能指標(biāo),分別是流量、電量、速度、質(zhì)量和包大小。

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

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

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

    第一類常用的是 SIP/SIMPLE 等協(xié)議,這個在電信網(wǎng)絡(luò)用的比較多,包括全球運營商都在推廣的下一代融合通信。這類協(xié)議的特點是非常健壯,但是規(guī)范非常復(fù)雜,光是看英文規(guī)范文檔可能就要學(xué)習(xí)一兩年,它能夠讓信息在通信節(jié)點之間傳輸?shù)玫胶芎玫陌踩U,非常高的互通行,擴展性,同時在私有部署 的時候也可裁剪,所以實際上現(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è)計的一套協(xié)議,基于 XML協(xié)議,是可擴展的,所以理論上你可以將它擴展和配置成你想要的業(yè)務(wù)。但是,XMPP 協(xié)議是基于互聯(lián)網(wǎng)早期標(biāo)準(zhǔn)所衍生的,所以它在某些特性上是不適合 移動端的,更適合于 PC 端,比如它的數(shù)據(jù)包比較大,另外在斷線重連上做的也不夠好。一般來講,我還是推薦初學(xué)者用 XMPP 來搭建系統(tǒng),因為有非常豐富的開源資源,但往往在一段時間之后你會發(fā)現(xiàn)進入瓶頸,比如丟消息,延遲響應(yīng)慢等等,根源還在于 XMPP 機制上更多的還是考慮了穩(wěn)定的網(wǎng)絡(luò)環(huán)境設(shè)計的。XMPP 雖然是開源的軟件,開源代表免費,但開源不代表不需要花時間,很多時候為了解決一個小小的問題,你必須通讀它的源代碼,你才知道問題出在哪里,如何解決。我們接觸了很多客戶,都是因為解決不了開源協(xié)議帶來的復(fù)雜問題而重新改變了方案。

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

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

    InfoQ:你們在省電上做了哪些優(yōu)化?

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

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

    最后其實很多用戶都有一個誤區(qū),因為安卓手機比較耗電,其實根據(jù)我們的測試,后臺耗電其實還是遠遠小于前臺耗電的。耗電往往是因為手機軟件有各種bug。一些開發(fā)者會覺得IM類的軟件比較耗電,其實 IM 類的軟件一定是相對最耗電軟件品類,因為你要不斷跟其他人保持通信,如果其他軟件耗電超過了 IM 軟件,那才是問題。之所以大家覺得安卓手機后臺耗電大的原因,一是因為手機上不止裝一個 IM 軟件,二是不光 IM 軟件發(fā)心跳,其實所有的 App 都在做類似的事情,融云作為開發(fā)包的提供者,每個版本都會對電量和流量進行監(jiān)控和測試,我們對此會比應(yīng)用開發(fā)者付出更多的努力,也會有更強的保證。

    InfoQ:你們在快速響應(yīng)和傳輸速度上做了哪些優(yōu)化?

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

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

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

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

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

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

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


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

     

      最熱通信招聘

      最新招聘信息