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