成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

攜程APP好用的秘訣大起底 告訴你APP性能優化也有捷徑可走!

原創
網絡
陳浩然,攜程負責無線基礎技術的高級開發總監。在WOT2016移動互聯網技術峰會上,他與大家分享了攜程APP在網絡性能方面一些優化實踐和方案。

[[173156]]

   陳浩然,攜程負責無線基礎技術的高級開發總監。在WOT2016移動互聯網技術峰會上,他與大家分享了攜程APP在網絡性能方面一些優化實踐和方案。

  攜程無線網絡服務通道架構

  陳浩然介紹了2016年年初攜程無線網絡服務通道的架構圖,其中無線APP有兩個通道,一是Native,基于TCP設計的一套網絡服務通道,連了TCP Gateway;二是Hybrid,用GS寫界面,***是通過傳統的HTTP請求到達HTTP Gateway,TCP Gateway和HTTP Gateway最終鏈接到對應的SOA服務。

  陳浩然表示,APP端是通過TCP連接連到TCP Gateway,轉化后通過HTTP請求轉化到后端一個標準的SOA接口當中,是一個標準的HTTP協議,前端通過TCP連接。

  他在演講中表示,TCP協議是傳統協議,位于第三層,只控制網絡層的傳輸協議,到了應用層還是需要設計一層應用層協議,類似RPC機制。攜程的TCP Gateway分為兩個部分,***部分是在接入層管理TCP連接,主要基于Netty實現,負責App端TCP連接管理。第二部分是在路由層,基于Netty Zuul對服務進行路由、監控、安全、鑒權方面的管理。“實現方式就是一個可插件式的中間件,不同插件實現不同功能,如路由、安全、鑒權,數據格式***的是基于Protocol Buffers實現的。”

  HTTP Gateway功能較為簡單,直接負責HTTP請求轉發,路由層也是基于Zuul實現,功能上和TCP Gateway非常接近,數據格式就是傳統JSON數據格式。

  之所以需要Gateway,陳浩然解釋道,因為攜程業務很多,目前有20多個事業部,每個事業部有自己的服務集群,如果將所有的服務集群耦合在一起,每個BU的發布都會影響到其他BU。而設置Gateway進行服務轉化,后端所有業務邏輯是完全分割開來的,相應的部署、發布、監控都是完全割離開來的,這樣可以避免干擾,提升效率。

  TCP與HTTP協議優劣勢對比

  談及為什么要基于TCP實現時,陳浩然認為,主要是與HTTP協議對比得出的結論。HTTP協議優勢非常明顯,封裝性好,HTTP協議更標準化,客戶端和服務端解決方案相對成熟。但是劣勢在于可控性很差,受網絡影響嚴重,像HTTP1.1協議里的KeepAlive、Pipeline這些機制很難發揮作用。

  而 TCP協議做網絡服務,優勢是可以針對網絡連接、發送請求和接受響應,不同階段可以完全分割很清楚,可以針對不同階段做定制性優化。劣勢是實現很復雜,因為要實現自己的應用層協議,開發成本和復雜度都比較高。

  優化APP網絡服務全生命周期

  陳浩然表示,App對網絡環境要求較高,不同的網絡類型帶寬和延遲差別非常大,其中延遲對網絡性能影響***。雖然服務端做了很多優化,但是如果網絡性能不佳,依然會帶來較大延遲,優化效果不如在App端做優化更好。

  陳浩然將App網絡服務生命周期劃分為六個部分:一是DNS解析,二是建立連接,三是序列化網絡請求報文,四是發送網絡請求,五是接受網絡響應,六是反序列化網絡響應報文。“攜程的做法是把生命周期每個步驟都進行細化,針對每個階段進行優化。”

  DNS解析的優化

  DNS解析階段有三個問題:一是解析有1%失敗概率,二是域名解析地址影響網絡服務,三是解析耗時容易產生延遲。

  DNS解析優化有兩種解決方案:一種是自建HTTP-DNS,用IP地址訪問,發一個HTTP請求上來訪問DNS服務器,可以根據客戶端IP地址,告訴最合適服務端的IP地址是多少,但服務端開發部署成本比較高,而且***次還是要發HTTP-DNS服務,前置服務帶來額外延遲。第二個解決方案是在App端內置服務器IP列表,徹底取消DNS解析,但是客戶端如何能夠快速知道哪個服務端IP地址***,需要自行判斷。

  攜程采取的解決方法是在App內置服務IP列表,每個IP都有一個權重機制,會根據每次網絡服務選擇權重***的IP地址。IP權重如何計算?攜程在客戶端用Ping值,每個服務IP啟動之后立刻進行Ping值,根據Ping值的延遲時間進行計算,Ping值***的權重***,如果Ping不通可能是權重為零,最差的服務端地址。在網絡環境切換時,IP權重會重新計算。

  TCP連接的優化

  這方面優化的重點是保持長連接。如果每次都建立連接整體耗時會非常大,用戶體驗非常差。攜程的做法是配置一個TCP長連接池,專門用來存放長連接,根據網絡環境不同更新連接池大小的上線。每次網絡服務要發一個網絡請求,用戶點擊查詢,會優先從長連接中拿出一個空閑長連接出來進行網絡服務,發完收到響應一切都成功了,會再將空閑長連接放回到連接池當中,等待下一次網絡服務發起。如果TCP長連接服務失敗,也會用短連接進行重試,會有一些限制條件,實際上是長短結合的概念。為了簡單處理目前還沒有支持Pipeline或者是Multiplexing機制。

  弱網和網絡抖動情況優化

  攜程會根據網絡類型以及端到端的Ping值進行計算,首先將當前網絡質量劃分為好、中、差、非常差四類網絡質量參數,然后根據參數調整長連接個數,在4G/WIFI會增加長連接池大小,目前長連接池是四個。其次根據網絡質量參數調整TCP連接、發送請求,以及調整write或者read的超時時間。第三個方法是當網絡類型切換時,一旦客戶端IP變化,直接關閉所有長連接,現有正在發的網絡服務會進行自動重試。

  數據格式優化

  陳浩然表示,之前攜程App是使用自定義數據格式。后來調研了Protocol Buffers、Flat Buffers、Thrift這幾種比較常見的格式,最終選用了Protocol Buffers。在攜程特定的數據類型下,數據包大小可以降低,相對于之前的數據格式大小降低了20%-30%。序列化、反序列化時間也是可以降低10%-20%。如果大家自己開發這樣一個網絡協議,數據格式主要是考察兩點:一個是數據包大小,一個是序列化和反序列化時間。數據包大小更重要,因為如果數據包太小,網絡服務在傳輸過程中非常耗時。

  “我的感觸主要有兩點:一是盡量減少網絡連接時間,第二個盡量減少傳輸Size,盡量減少網絡帶寬和延遲的影響,延遲是必不可免的,帶寬是受限制的,數據量越小越好,同時也是連接越少越好。”陳浩然總結道。

  他認為選擇格式和自身業務類型相關,Flat Buffers更適合于社交關系型數據存儲。而Thrift不單單是一個數據格式的解決方案,更多是IPC解決方案,包含了一個完整IPC解決方案。陳浩然告訴聽眾,Facebook的App就使用Flat Buffers,用于本地數據Modle存儲。

  網絡服務重試機制

  攜程發現所有網絡服務失敗原因中有90%都是因為TCP連接失敗。連接失敗是否可以進行重試?陳浩然認為重試更多需要考慮可靠性問題,服務是否有冪等性問題,需要自己去解決。

  攜程在這方面的經驗是如果在建立連接、序列化網絡請求報文,包括發送網絡請求這三個階段失敗,則直接進行重試,并不需要業務程序來通知需要重試。另外也可以自行確保服務冪等性,添加重試參數。“攜程目前網絡服務成功率已經從95.3%增長到99.5%。”陳浩然告訴聽眾。

  Hybrid網絡性能優化

  傳統Hybrid網絡服務基于系統接口,無法控制網絡流程,平均網絡服務成功率僅為97%左右,攜程想了兩個方案:一是攔截所有HTTP請求進行直接轉發。二是用Hybrid網絡接口方式進行轉發。最終攜程選擇了第二個方案。

  通過這張圖可以看出,發一個網絡請求是走Hybrid接口,由Native發一個TCP連接到TCP Gateway,并不知道TCP這個通道存在,還是正常發一個網絡請求,是Get還是Post,告訴Hybrid庫要發HTTP請求,以為還是HTTP請求,到Hybrid框架這一層,現在知道要發一個HTTP請求,把HTTP請求所有參數作為一個正常的TCP服務,傳到TCP Gateway,這一層解析出服務號之后,其實要發HTTP請求,會拼接成一個正常的HTTP請求,再發到HTTP Gateway。對于HTTP Gateway而言,并不知道HTTP請求是從傳統Hybrid還是H5網站發來的HTTP請求,還是從TCP Gateway這一層發送的請求,對HTTP Gateway不需要做任何改造動作。只不過在HTTP端Hybrid網絡層和TCP Gateway做一些改造,這樣HTTP請求做一個通道的動作去做協議轉發。HTTP Gateway把包裝過的HTTP請求轉發到后端服務器之后,服務端響應之后會把相應HTTP響應報文再傳給TCP Gateway,再會重新打包成一個正常攜程協議TCP響應報文給客戶端,會再把這個報文解開,類似于把一個HTTP請求發送完了,得到響應概念,再傳給Hybrid業務層。需要做的改造只是針對HTTP里Hybrid網絡發送接口需要進行改造,包括TCP Gateway要加一個功能。對于業務端,傳統Hybrid業務層面開發者完全不需要知道這一層,HTTP Gateway也不需要這一層,對于業務來說是完全透明。

  通過這樣的通道架構,所有HTTP請求都會通過TCP Gateway進行中轉,中轉到HTTP Gateway,對于業務是完全透明的,平均網絡服務成功率已經提升到了99.2%,同時還把網絡服務耗時降低了30%。

  海外網絡性能優化

  攜程在海外沒有IDC,除了CDN靜態資源之外,業務服務所有的請求都需要回源,速度非常慢。如何破?

  攜程采用了Akamai(全球***的CDN廠商解決方案),有一個專署通道,到海外可以走Akamai專署通道,而不是傳統Internet路由線路到達服務端。如果海外用戶登錄,Akamai通過定制域名獲取服務端IP,之后所有網絡服務會優先走Akamai通道,然后直接落地到攜程IDC,不需要再走傳統聯通、電信運營商通道。當然陳浩然也表示,Akamai通道不是***的,但平均耗時可以減少到30%,比傳統Internet通道優化很多。

  ***的無線網絡服務通道架構圖,不管Hybrid還是Native,都是走TCP連接做網絡服務,Hybrid有一個內部API來控制去發送網絡請求,不需要再讓系統來控制HTTP請求到HTTP Gateway,而只是全部用Native TCP連接到TCP Gateway,如果是Hybrid請求被包裝過了,就轉成HTTP請求到HTTP Gateway,如果是正常TCP請求就直接發送到對應后端服務,這是***的網絡服務通道。

  本文由陳浩然于2016年8月,在WOT2016移動互聯網技術峰會性能專場《無線App網絡服務通道治理和性能優化》主題演講整理而成。WOT2016大數據峰會將于2016年11月25-26日在北京粵財JW萬豪酒店召開,屆時,數十位大數據領域一線專家、數據技術先行者將齊聚現場,在圍繞機器學習、實時計算、系統架構、NoSQL技術實踐等前沿技術話題展開深度交流和溝通探討的同時,分享大數據領域***實踐和最熱門的行業應用。了解WOT2016大數據技術峰會更多信息,請登陸大會官網:http://wot.51cto.com/2016bigdata/

責任編輯:周雪 來源: 51CTO
相關推薦

2021-05-13 09:07:37

Android捷徑App

2015-09-17 09:29:12

Android性能優化

2022-07-15 09:20:17

性能優化方案

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合

2015-07-30 13:47:42

實惠

2014-10-28 16:11:37

AndroidApp性能優化

2023-05-12 10:14:38

APP開發

2023-04-24 15:10:23

優化方案

2017-03-06 16:43:04

無人駕駛Google X懸滑板

2016-09-01 09:39:20

攜程無線

2009-09-08 09:45:23

App Engine性

2015-05-30 10:04:24

線下公開課51CTO沙龍MDSA

2013-10-25 10:51:24

諾基亞WP

2021-09-17 12:54:05

AI 數據人工智能

2023-06-09 09:54:36

攜程工具

2015-05-28 14:43:09

2022-06-03 08:58:24

APP攜程流暢度

2020-02-14 13:10:03

iPhoneAndroid捷徑

2023-07-28 07:31:26

2014-07-29 13:18:04

聽云基調網絡
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久国产精品久久久久久 | 国产一区二区在线免费视频 | 久久成人精品视频 | 亚洲免费人成在线视频观看 | 欧美久久久久久 | 一区二区在线不卡 | 久久精品国产久精国产 | 在线播放一区 | 日韩在线一区二区 | 久久久成人一区二区免费影院 | 天天干夜夜操 | 在线观看免费av网 | 中文字幕在线剧情 | 亚洲第1页| 精品乱码一区二区三四区视频 | 国产视频线观看永久免费 | www.日本国产 | 免费毛片网 | 国产免费一区二区 | 欧美伊人影院 | 亚洲 精品 综合 精品 自拍 | 国产精品美女在线观看 | 黄色中文字幕 | 在线日韩福利 | 亚洲欧美国产精品一区二区 | 成人3d动漫一区二区三区91 | 一区二区三区四区在线播放 | 91精品免费视频 | 欧美456| 欧洲成人免费视频 | 91精品国产91久久久久久最新 | 精品视频在线免费观看 | 久久中文视频 | 国产精品欧美一区二区三区不卡 | 日韩一级 | 欧美色图综合网 | 97偷拍视频 | 日韩精品视频一区二区三区 | 九九在线视频 | 国产精品一区二区三区久久 | 91资源在线 |