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




























