攜程陳浩然:借助性能優(yōu)化,提高用戶體驗(yàn)
原創(chuàng)WOT2016移動互聯(lián)網(wǎng)技術(shù)峰會第二天,我們非常榮幸的邀請到了攜程無線高級開發(fā)總監(jiān)陳浩然先生,就攜程無線網(wǎng)絡(luò)服務(wù)架構(gòu),弱網(wǎng)優(yōu)化方案,自動重試可控分析以及移動用戶體驗(yàn)優(yōu)化等方面進(jìn)行了采訪。
陳浩然先生目前主要負(fù)責(zé)攜程無線技術(shù)開發(fā)工作,在本次峰會上與大家分享的主題是《無線App網(wǎng)絡(luò)服務(wù)通道治理和性能優(yōu)化》。之所以選擇這樣一個分享主題,陳浩然先生首先表示這個主題來自于他工作中比較核心的業(yè)務(wù)實(shí)踐,其次他認(rèn)為網(wǎng)絡(luò)服務(wù)對于APP來講非常重要,對于所有相關(guān)的無線開發(fā)人員來說都是非常感興趣的。我們遇到一些問題他們也會遇到,通過分享這些解決方案,可以對他們有一些啟發(fā),有一些借鑒價值。
相信很多朋友跟筆者一樣,對攜程無線當(dāng)前的網(wǎng)絡(luò)服務(wù)架構(gòu)非常感興趣。在談到攜程無線目前的網(wǎng)絡(luò)服務(wù)架構(gòu)時,陳浩然先生表示,攜程無線服務(wù)架構(gòu)是比較清晰的,我們最新網(wǎng)絡(luò)服務(wù)都是通過TCP的連接到達(dá)TCP Gateway,通過TCP Gateway進(jìn)行網(wǎng)絡(luò)服務(wù)轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)到后端業(yè)務(wù)的SOA接口,或者轉(zhuǎn)發(fā)到HTTP Gateway,整個架構(gòu)以Gateway 作為核心中間件,所有的App前端網(wǎng)絡(luò)服務(wù)都是基于TCP協(xié)議,后端是基于HTTP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)。
當(dāng)筆者問到為何會選擇TCP時,陳浩然先生表示,之所以選擇TCP,是有一些歷史的原因。因?yàn)閿y程的APP用戶一般都是在景點(diǎn)、酒店等地方使用APP,眾所周知酒店的無線網(wǎng)絡(luò)都不會很好,景區(qū)的3G/4G網(wǎng)絡(luò)也比較差,我們發(fā)現(xiàn)如果使用HTTP協(xié)議,它的網(wǎng)絡(luò)服務(wù)成功率是不會令人滿意的。那么,我們就會考慮是不是可以用一些更基礎(chǔ)一點(diǎn)的協(xié)議?就是HTTP下層的傳輸層TCP協(xié)議做,如果使用TCP協(xié)議做,所有網(wǎng)絡(luò)服務(wù)階段都是可以劃分的很清楚,包括獲取服務(wù)端的IP、連接、發(fā)送請求、接受響應(yīng),所有階段都一清二楚。這個時侯,我們就可以針對每個階段做一些優(yōu)化,而不是像傳統(tǒng)HTTP請求一樣只能直接獲取結(jié)果。我們希望可控性更高,這樣網(wǎng)絡(luò)性能優(yōu)化這一塊兒有更多的優(yōu)化方法去做。
在無線環(huán)境較差的情況下使用 App,如何能夠保證順利使用例如查詢,減少出錯率,對無線技術(shù)工程師提出了嚴(yán)峻的挑戰(zhàn)。當(dāng)筆者問及攜程針對弱網(wǎng)情況下是怎么做好優(yōu)化時,陳浩然先生表示,在網(wǎng)絡(luò)信號時好時壞,網(wǎng)絡(luò)抖動的情況下,如果用TCP連接,是有很多優(yōu)化機(jī)制的。如果用傳統(tǒng)的HTTP連接,網(wǎng)絡(luò)弱時服務(wù)失敗了直接進(jìn)行重試,這個有很大風(fēng)險。比如我下了個單,由于網(wǎng)絡(luò)不好就發(fā)送了兩個請求,不知道請求是不是真的發(fā)到了服務(wù)器端,這時就會出現(xiàn)重復(fù)下單的情況,即服務(wù)冪等性的問題。如果用TCP協(xié)議做網(wǎng)絡(luò)服務(wù),就可以知道連接失敗了,還是序列化請求失敗,還是發(fā)送請求失敗。如果在前面這幾個階段失敗,直接進(jìn)行重試就可以。因?yàn)橛脩糁雷约涸诰皡^(qū),信號不好,是有一個心理預(yù)期的。但是,我們自動幫他重試以后,返回一個響應(yīng)給他,告訴他這個查詢是成功的,下單是成功的,他是可以接受一定時間的等待的。像HTTP協(xié)議可能直接我告訴他失敗,這個用戶體驗(yàn)是非常差的。在網(wǎng)絡(luò)抖動情況下,傳統(tǒng)的HTTP在網(wǎng)絡(luò)環(huán)境切換時,可能聯(lián)通網(wǎng)絡(luò)切到了電信網(wǎng)絡(luò),目標(biāo)服務(wù)器就不合適了,如果用TCP去實(shí)現(xiàn)的話,就會用自動 Ping的方式找到一個最合適服務(wù)網(wǎng)絡(luò)的IP地址,有很多優(yōu)化辦法,不斷地調(diào)整找到一個最優(yōu)的網(wǎng)絡(luò)通路,這也是通路治理的一個方面,這種優(yōu)化后就會讓連接成功率高很多。
談到自動重試可靠性分析,陳浩然先生表示,TCP本身就有很多重傳的機(jī)制,重試本身就是提高成功率很好的辦法。最大的問題什么時候可以重試。我們發(fā)現(xiàn)所有失敗里面90% 以上失敗都是TCP連接失敗,包括HTTP請求,是因?yàn)檫B不上服務(wù)器失敗了,這時是不是可以自動重試一下,這種重試機(jī)制類似于傳輸層TCP協(xié)議這一層的。想要保證可靠傳輸?shù)脑捰型瑐鲾?shù)據(jù)包的機(jī)制,那應(yīng)用層是不是也可以做到重試。因?yàn)檫€沒有連上,把它在連接這一步加上一個重試機(jī)制,很大程度上可以解決90%以上的失敗的情況的發(fā)生,整體的網(wǎng)絡(luò)服務(wù)成功率就是提升了。這種重試也是參考了TCP協(xié)議本身一些機(jī)制來做一些優(yōu)化的思路。
在采訪最后,筆者針對攜程在移動優(yōu)化方面對用戶體驗(yàn)的影響有哪些好的做法進(jìn)行了提問,陳浩然先生表示,攜程的用戶體驗(yàn)優(yōu)化有兩種方式,一是技術(shù)層面,二是產(chǎn)品層面。技術(shù)層面這塊就是目前我負(fù)責(zé)的這些工作,會有一些客戶端的APM來做性能管理的工作,通過埋點(diǎn)等發(fā)現(xiàn)一些性能問題,不斷優(yōu)化來提升整體用戶體驗(yàn)。產(chǎn)品端層面我們有一個比較好的AB Testing機(jī)制,并且很早已經(jīng)建立了這套機(jī)制。在產(chǎn)品設(shè)計方面不是哪一個老板說B版比A版好就用B版,而是依賴于AB Testing實(shí)驗(yàn)結(jié)果判定。我們所有產(chǎn)品端的變動都用這套機(jī)制。比如我們換一個下單流程,這個流程跟原來流程比,哪一個好?我們都是用AB Testing方式對比,最終效果是要根據(jù)AB testing以后,根據(jù)定單的轉(zhuǎn)化率來計算的,B版確實(shí)比A版好的時候,才會把所有App版本換成B版,兩個用戶在使用的時候有可能同時使用一個App,某一個地方的流程是不一樣的。A版和B版哪一個好?通常要經(jīng)過1-3個月時間進(jìn)行試驗(yàn),試驗(yàn)結(jié)束了以后,我們確定版本以后換成新版本。所以說,AB Testing對于攜程來講是比較重要的用戶體驗(yàn)提升方式。