2016雲栖大會之前,阿裡雲關于移動服務方面的介紹比較少,為什麼現在開始在做移動服務方面的介紹?
從2013年開始,阿裡巴巴舉全集團之力解決無線app開發過程中的一些難題,經過三年多的積累,把阿裡集團積累的一些技術逐漸輸出出來,成為阿裡雲的産品。2016雲栖大會武漢峰會上,阿裡巴巴無線産品經理德泰把之前阿裡雲做的努力和成果跟參會嘉賓一起分享。移動應用解決方案這個話題比較大,可以分成一個系列來講,今天偏重從性能方面來講述阿裡這方面做的努力。
<b>移動域名解析存在哪些問題,如何優化?使用什麼協定?業務通路存在哪些問題,如何優化?性能度量的标準有哪些?這些問題都将可以從演講中得到解決。</b>
說起企業級移動應用,我們難免提出疑問,移動應用的整個通路流程到底是什麼樣子?
其實,移動端與pc端的通路流程比較接近。
通路一個業務首先要做域名解析,然後再去通路業務伺服器,中間可能有cdn。在域名解析階段,無線網絡的特征是延遲比較大、丢包率很高、解析失敗率也很高。

在業務通路階段,由于延遲大、丢包率高,是以建連的開銷比較大,成功率等各方面都會受到影響;并發方面,在有線情況下稍微好一些,比如浏覽器通路網站的時候為了提高并發度可以建多個連接配接,比如浏覽器對一個域名可以建4-8條連接配接,但是在無線情況下,建立這麼多連接配接就會産生問題,首先無線的接入資源是有限的,建立很多連接配接會有更多的資源消耗,還有耗電等方面限制。目前很多移動應用采用短連接配接,同時并發不能達到很高。如果想要建立長連接配接還會面臨一個問題:無線場景下怎麼把這個長連接配接維持的更長一些?傳統的tcp、http協定在無線場景下的弊端暴露的更加明顯。
性能度量階段,對無線業務的性能怎麼衡量?衡量什麼名額?怎麼得到比較合理的路徑成本?
<b>首先分析域名解析階段,域名解析存在哪些問題?如何進行優化?</b>
域名解析存在三個問題:
第一個問題是鍊路延遲比較大、丢包率高導緻解析延遲比較大并且解析失敗率比較高。無線網和有線網比較大的差別是無線網的接入比較耗時,2g情況下有300-600ms的延遲,3g情況下有50-100ms的延遲,4g情況下有10-20ms的延遲,并且無線網從接入網到核心網也有100ms的延遲,相對于有線網來說延遲大很多。另外一點,無線網絡的丢包率比較高、穩定性差。
第二個問題是域名劫持問題。域名劫持是指在使用者正常聯網狀态下(如3g、4g、wifi等狀态),目标域名被惡意地解析到其他ip位址上,造成使用者無法正常使用服務。2015年12月份國内6家頂級的網際網路公司發表聯合聲明抵制流量劫持,全網大概有5%左右的dns解析請求受到劫持,有一些地區部分時段甚至達到20%。
第三個問題是排程精确性的問題,local dns稀疏性和與client ip不比對,表現為在無線情況下,排程系統判斷使用者位置會存在較大問題。如下圖所示:
圖中記錄的是阿裡的真實案例。阿裡昆侖就是阿裡的cdn探測工具,客戶可以用這個工具看到手機的ip,local dns的ip。dns系統分為權威和非權威,比如上網需要配置上網的dns伺服器位址,這個dns不負責記錄域名對應的解析結果,隻是作為dns解析的一個代理,這個ip位址就是代理伺服器的位址,此時業務系統就會根據配置的這個dns伺服器位址來判斷使用者位置。如上圖所示,很明顯,在無線場景下,客戶本來屬于武漢聯通,結果local dns變成了珠海電信和上海電信。在國内,存在一個經典的問題——南北互通問題、即跨營運商通路的時候延遲比較高,因為互通的時候中間傳輸距離增加并且帶寬很小,即走一段很長、很擠的路。在無線情況下,local dns配置的參差不齊,導緻出現這種情況的時候,使用者的體驗非常差。
為了解決上述問題,阿裡内部使用的是httpdns。它的基本原理是使用http協定取代原有的udp協定進行域名解析。udp協定比較脆弱,把包截獲後回複一下就能實作域名劫持,通路劫持到指定的節點,而http協定是需要建連的,是以比udp協定要可靠一些。此外,udp發出去之後,是盡力投遞,沒投遞成功也不管,而http協定失敗後會重試,是以使用http協定對解析失敗率也有改善。使用httpdns還有一個好處:用戶端ip和local
dns ip不比對的問題也可以通過httpdns解決掉,因為用戶端是直接和httpdns伺服器建連,而不是通過local dns去代理,這樣httpdns可以拿到用戶端的真實ip而非local dns ip。
無線網絡通路的特征包括延遲大、丢包率高、不穩定,建連開銷很大,短資料流互動比較多。無線網絡通路的目标是1秒鐘法則:在4g或者wifi情況下1秒鐘可以把首屏顯示出來,3g情況下1秒鐘可以首位元組到達,2g情況下1秒鐘完成dns解析建連。
業務通路存在的第一個問題主要包括短連接配接、http協定串行特性、http頭部較大。短連接配接是指發送請求之前,三次握手把連接配接建好,然後開始發送資料,結束後把連接配接斷掉,這在無線場景下很不合适,因為建立一個連接配接開銷特别大,而實際傳輸資料時間很短,是以希望盡可能使用長連接配接。而使用并發連接配接是有限制的,相對于有線情況下,無線接入資源、電量等各方面的限制很多。http協定的串行特性導緻如果有一個請求的響應比較慢就會把其他請求阻塞掉。第二個問題是接入層未作優化,路由未作優化。如果想做長連接配接,源站就直接面臨長連接配接壓力,并且通路路由不可控,即發送包之後,包走的路徑是不可控的。第三個問題是對象大小未作優化,比如從肉眼看不出差別的時候,不同格式的圖檔大小差50%,而且内容也沒有進行優化就整個傳輸過去了。
在網絡協定方面,使用spdy/http 2.0協定來實作http通路請求的并行化,通過請求頭壓縮把多包變成單包,後期使用基于udp的協定降低建連的壓力;在接入和路由方面,接入cdn使其到源站的鍊路更優,對路由進行優化選擇最佳路徑;在對象大小方面,根據不同尺寸分辨率、網絡制式傳回不同尺寸、品質圖檔,同時選擇壓縮率更高的圖檔格式。
通過建立性能基線,進行解析延遲優化、精确排程,進行協定優化、cdn就近接入、圖檔壓縮、動态内容加速,對新聞媒體類的app全網加速40%,對lbs動态請求加速30%。
比較重要的三個分析名額:建連時間、首位元組時間、響應時間。
關注以下次元:時間、isp、網絡制式、地域、版本、域名、請求方式。
進行自定義性能統計與上報。
另外,阿裡提出了自己的企業級移動應用解決方案。
企業級移動應用解決方案主要包括雲、管、端三個方面的産品和服務。雲指的是比較成熟的網絡存儲、資料庫這些基礎設施和大資料服務。管指的是從我們手機端到雲上之間的傳輸鍊路,包括無線通道。端指的是阿裡提供的一些sdk或者api方式在端上給使用者提供的服務。
如上圖所示,端部分的第一個層次mbaas是做移動應用開發時候所需要的一些服務,比如資料分析、推送、域名解析和加速方面的需求。第二個層次mpaas是跟業務結合更緊密一些服務,比如支付類的app或者一些基于地理位置服務的需求的app,或者促銷、社交類的app。
<b>本文根據阿裡雲事業群飛天八部無線産品專家朱友志(花名:德泰)在</b><b>2016</b><b>雲栖大會</b><b>·</b><b>武漢峰會上演講整理而成。</b><b></b>