投稿 | 阿里移動電商背后的技術航母
2015天貓雙11 全球狂歡節剛剛結束,912億的全天成交額再次刷新了記錄,其中無線占比68.67%,無線交易額高達626億。
美國時間11月16日,InfoQ英文站邀請到了阿里無線事業部資深技術總監莊卓然(花名:南天)、阿里無線高級技術專家徐昭(花名:長恭) 在QCon全球軟件開發大會舊金山站發表演講《ALIBABA MOBILE INFRASTRUCTURE AT "CHINA SCALE"》,揭秘手機淘寶這個超級App的技術架構演進,向世界的技術同行分享中國互聯網在無線領域的技術發展。
莊卓然 擁有10余年的互聯網研發和管理經驗,是見證并主導阿里業務架構演進的當事人之一。他于2009年加入阿里巴巴,先后在淘寶、天貓負責營銷、會員、交易、導購等系統的架構和研發工作,經歷了淘寶從簡單應用到承載數億用戶的分布式服務化業務平臺的技術演進過程。同時,他還是2011-2013年雙十一的天貓技術負責人,持續推動雙十一的產品架構演進、穩定性改造和性能優化等研發工作。2013年轉戰移動研發戰場,帶領團隊專注于手機淘寶和移動基礎平臺的研發建設。
徐昭 2012年加入天貓成為技術核心,前后帶領過天貓賣家、導購詳情等多支技術團隊,親身打造并見證雙11成為電商行業的重要節日。現任手機淘寶賣家生態團隊技術負責人,專注在無線整體架構、大型復雜移動應用構建框架及無線技術開放等領域,同時關注新技術和開發模式在移動互聯網產品中的演進和落地。
小編在現場為大家帶來莊卓然的演講實錄:
我眼里的阿里巴巴
在過去的十年里,阿里逐漸影響和改變了中國人的生活方式。在此之前,大家都只能在線下門店消費,但是現在大家都養成了線上購物的習慣,并且樂在其中。一方面,到目前為止有超過千萬的賣家選擇在阿里開線上的門店;另外一方面,阿里構建了中國***的公共云計算平臺,并躋身世界前三。在中國,阿里云目前服務了超過30%的網站和超過50%的中小型企業。
阿里巴巴是一家國際化的公司,從今年的雙十一就可見一斑。除了把各種海外尖貨帶到國內,我們也把國內的優質商品帶到全世界。成立于2010年的AliExpress,已經發展成為全球***的跨地域交易平臺。除了電子商務,阿里巴巴在全球的業務還包括金融、物流、健康、娛樂和云計算。這也是為什么我覺得把阿里看做是中國的Amazon和ebay是不準確的。如同馬云所說“如果把亞馬遜或者京東比作蘋果,那么阿里就應該是一顆蘋果樹”。我們把自己看做是一個生態系統,是未來生活的水電煤。我們的目標是創建一個開放、透明、合作的商務平臺,讓天下沒有難做的生意。
過去兩年,阿里電商平臺中移動成交占比提升了2倍,達到60%以上,這得益于我們在移動和系統架構上做了很大的改造。所以,今天主要介紹我們的電子商務操作系統在移動環境下面的演進,以及這個架構是怎么應對PC時代***的挑戰。整體來說會分為四個部分:客戶端的容器化架構、移動網絡管道架構、云服務架構和數據架構,由于時間的限制,我們將更多的闡述前三者。
7年前,雙十一在中國還被戲稱為光棍節,但在2009年,阿里巴巴***次決定在這一天舉辦購物促銷,把這個日子變成了世人矚目的購物狂歡節。
5天前,我和團隊剛剛經歷了第7年的雙十一,這一天阿里巴巴的交易額約143億美元(912.17億人民幣)。去年黑色星期五期間的全美總交易額是114億美元(包括了線下和線上所有的電商公司的銷售總額),而雙十一產生的143億美元,僅僅是阿里巴巴電商平臺一天的交易額,整個狂歡覆蓋了200多個國家和地區。全社會共同參與,把平凡的一天變成全球狂歡的節日,這就是阿里巴巴生態的力量、互聯網的力量。
手機淘寶
手機淘寶作為阿里集團移動端的“航空母艦”,近兩年發展非常迅猛,用戶量增長接近10倍。在2015雙十一這天,我們的無線端成交占比高達68% 。在高峰期,更有超過4500萬人同時在線,每秒14萬筆下單;今天我們擁有超過3億的月活躍用戶,是全球***的消費類移動APP。而這些,都對我們的系統能力提出巨大挑戰。
下面給大家分享一個典型用戶在手淘的一天。

移動架構的反思
阿里巴巴打造的不是一個軟件系統平臺,而是一個電子商務操作系統。這樣的電商操作系統,支撐了過去10年的快速發展。同樣,我們在移動端也在重新思考如何繼續升級,如何在手機APP中完成生態建設。
移動互聯網不僅僅是傳統互聯網的延伸。這個共識一方面來自于手機終端的強大特性對產品和商業模式產生的“破壞式”影響,另一方面來自于技術的變化趨勢。
在web的時代,我們說BS架構,通常也可以理解為是CS架構的一種變體。只不過在Client端,我們運行在Browser這樣一個容器環境中,通過穩定的寬帶網絡接入,通過HTML這樣簡單、透明的協議與服務端進行通訊。由于瀏覽器只提供了非常簡單的能力接口。所以,客戶端上只有非常薄的一層,只做渲染的工作。而在這里工程師的主要工作是在集中解決兼容性的問題。 而所有的邏輯計算和我們所有要解決的核心問題,擴展性、伸縮性、穩定性、性能等等,其實都集中在后端。
隨著個人計算機計算能力的發展,前端技術像Ajax、Angular這樣的技術如雨后春筍般冒出,我們進入web2.0時代。但這個時候云和端之間的邊界并沒有發生本質變化。
在移動時代,移動設備的計算能力發展的越來越迅猛。更重要的是,移動操作系統將移動設備上百個sensor的能力暴露了給上層的應用,使得我們能獲得比在broswer里更強的能力。這樣app側就能夠做到更多的以前在browser無法做到的事情。所以,互聯網發展到今天,到了移動互聯網的時代,我們真正意義進入到了一個富客戶端時代,之前簡單清晰的云端界限被徹底的模糊。
在這個階段,我們原來談論的很多架構問題,擴展性、隔離性、穩定性、性能等很多問題就不在僅僅只是服務端的問題,客戶端也需要開始從架構的維度來思考這些問題。同時云端之間通訊的簡單的協議,穩定的通道,也在發生了很多的變化。移動網絡隨時隨地需要接入的特點,也對我們的基礎架構提出了更高的要求。接下來我們就展開看一下這里的區別。
#p#
Rethinking Mobile Architecture-夾心面包的尷尬
但這個問題的解決之道并不像服務端。在這個過程中我們全面反思,大家看到這張圖里面我們用了一個形象的比喻來體現傳統的服務端軟件。最下層是操作系統,通常是linux,最上層是我們的業務功能和服務。在服務端架構,我們很習慣用增加一個架構層次的方式來解決問題。例如緩存層、數據訪問層等。我們在架構上按照自己的意愿去搭建不同層次的銜接環節,使架構具有足夠的靈活性和擴展性。即使堆成這個樣子,它依舊是非常合理的。

而移動app架構則是一個完全不同的場景。我們必須回到遠古的CS架構時代,一個喪失web靈活性的時代,因為所有功能都必須集成到一個APP里面。
我稱之為“看上去簡單,但實際上卻非常尷尬的夾心層“ 。

所以,我們需要有一個優雅的客戶端架構設計,讓我們能夠重拾以前web互聯時代的能力。在這種背景下,我們構建了手機淘寶這樣一個能夠支撐電商生態系統的客戶端架構。概要來說,設計理念可以為總結如下幾點:
***,設計時的隔離性。這個架構必須具備設計時的隔離性,這樣我們在開發、打包時才能夠***化并發能力;
第二,運行時的隔離性。這個隔離性作用在客戶端,主旨在于提高端側可靠性。我們必須確保單個模塊的故障影響范圍內斂到自己內部,不會引發整體crash。
第三,動態渲染能力和部署能力。這個架構必須具備一定程度上的運行期調整和動態部署能力。在這個過程中,我們構建了一個速度更快的類HTML5渲染引擎;同時,我們也實現了一個私有的容器,支持模塊的動態加載和更新。坐擁這兩大利器,線上問題的修復和新模塊的自動更新都脫離了版本發布的依賴。不幸的是,由于AppStore和GooglePlay尤其是前者較封閉和嚴苛的審核制度,我們的動態部署能力常常無法施展,盡管在中國的安卓應用市場上已得到充分的使用。
第四,***力度的兼容性保證,以確保我們在系統版本升級過程中不出現整體的陣痛。
整體的架構反思過程中,我們重新定義了客戶端和服務端(云端)的邊界。一旦確立這樣一個合理的架構,就能保證我們的移動APP在相當時間內,持續高效的支撐業務發展。
Challenge in mobile architecture -移動架構的挑戰
另一個挑戰來自于不穩定的移動網絡環境。PC時代,我們訪問網站的接入條件是相對恒定的,所以在開發時很少考慮網絡對于用戶體驗的影響。
但是移動APP則不然,尤其是在中國,基礎的移動網絡環境并不好,而且我們有很多用戶的訪問是發生在地鐵、公交車這樣的環境下,移動基站的頻繁切換進一步增加了網絡的不穩定。從手機淘寶的數據可以看出,我們每天活躍用戶中有15%來自于類似2G這樣的弱網環境。如果端到云的連接不穩定,有高延時,那么所有的用戶體驗都無從談起。
基礎網絡的效率就像一輛列車,時延是火車的速度(啟動時間),而帶寬就像火車的車廂裝載量,整個傳輸的物理鏈路就像火車的鐵軌。我們面對的移動網絡條件非常復雜,既有高鐵這樣先進的傳輸渠道,也有不少老舊緩慢的綠皮車還在服務很多用戶。我們的目標很簡單,就是想讓所有用戶都能在手機淘寶獲得流暢的體驗,不論你坐的是“高鐵”還是“綠皮車”。
下面這張圖,能夠讓大家更加直觀的了解中國的移動網絡環境。它描述了從用戶到IDC的端到端的路由情況,不僅數據傳輸耗時長,而且丟包率高,同時安全性也相當糟糕,DNS劫持、內容劫持在中國就是家常便飯。

因此,我們在改善網絡通道上做了很多的事情,探索突破運營商基礎網絡的局限性,力爭為用戶創造***的購物體驗:
• 減少網絡交互:使用更高效的通訊傳輸技術,提高了連接復用,減少roundtrip次數;
• 降低流量:通過更高效的壓縮技術和同步技術減少了網絡的流量;
• 更安全:在不降低體驗的基礎上通過對tls1.3的優化提高數據的安全性;
• 更穩定:更靈活的調度系統實現異地多活,縮短故障切換的時間。
#p#
阿里的無線技術實踐
以上整體介紹了阿里對移動時代架構重新思考的過程。基于這些思考,我們對架構演進的方向提出了以下幾個核心要求:
隔離性:傳統的移動App的開發和集成方式并不適合企業級開發。一個具備很好隔離性的模塊化架構是大規模并行開發的基礎。
動態性:互聯網追求唯快不破,從架構上將我們希望能夠在富客戶端時代同樣也能保留web的輕盈和靈活。動態性是很重要的前提。
***的網絡體驗:全雙工的接入平臺保障了接入層的伸縮性和穩定體驗,不管用戶在何種網絡環境下都能擁有順暢的體驗。
相比PC時代,移動開發非常復雜。用戶既想要一個驚艷的體驗,又期望安裝包盡可能小。那么開發者們就既要具備如web時代的輕量級開發部署能力,又要能獲取到native的能力、性能和擴展性。

平臺級產品的并行開發和獨立部署架構
一個好的架構需要支持并行的開發、獨立的部署,這樣才能夠滿足靈活多變的業務增長。同時,發揮航母級的平臺優勢,支撐更多元的客戶端應用,產生規模效應,拓展商業邊界。所以,我們的解決方案是在native平臺(準確來說是Android)上構建一個隔離性的架構,在此之上,功能盡可能的切割的越小越簡單越好;同時,在不損失native性能和能力的前提下,我們也引入了更多的web特性到移動開發中來。

我們的客戶端容器架構設計的原則是“everything is a component”,在Android平臺上,基于我們的隔離化容器架構設計,我們既可以提高在集成期的多團隊協作效率,又收獲了在運行時的靈活部署。通過把龐大的工程拆分成一系列的獨立服務,以及我們具備的容器自升級能力,就不需要同時編譯和集成所有的功能模塊。一旦一個模塊完成了測試,我們就可以按需對他進行升級。另外,我們的APP還具備線上可熱修復的能力。

跨平臺的思考引發了敏捷性(WEEX)
另一個殘酷的事實是,我們所有的功能需要在Android、iOS和H5上重復實現。當我們面對客戶端包大小,方法數的限制的同時又需要支持200+的功能升級、多平臺持續交付、覆蓋度、容錯、熱修復等等龐雜的事情 。所以在設備和OS的限制下做伸縮,我們需要一個超輕量靈活的解決方案,能夠基于某個高度重用的東西上進行低成本的并行開發、快速發布。
Weex就是我們想要的殺手锏,開發者可以通過一套跨平臺的代碼構建iOS和Android的APP。在構建應用UI的時候,開發者可以使用我們的基礎庫,這個庫抽象了不同平臺之間的差異性。開發者面對的DSL是基于一個叫做Vue.js的輕量級js庫,相對于React的JSX語法,這是一個更加面向組件的、腳本樣式分離的語言,對于開發者來說更加友好,更利于開發者和設計師之間的協作。JSBundle可以所見即所得的進行及時更新,V-DOM的抽象層提供了跨平臺渲染能力,同時也具備native組件優雅降級的能力。

這套方案跟業界相似方案的效果對比如何呢? 首先我們選擇了一個標準場景:渲染一個定制化的圖片列表,展示200+的頁面。
下圖是我們實際測量的數據情況,包含渲染時間、內存消耗、CPU消耗和幀率。我們并不是想通過這個圖來強調我們比所有其他方案都好,因為場景不同所有效果也會有所不同,我們想說的是能通過這么一個方案取得性能和動態性的雙豐收。

#p#
靈活高效、安全穩定的網絡調度服務(ACCS)
接下來,我們需要解決的是端到端的伸縮性。隨著手機淘寶業務的擴張,我們的活躍用戶也在不斷的增長,為了提供更好的端到端的能力,我們必須提高連接服務的質量。這得益于在以下四個方面的努力:
***, 作為服務消費方,我們不能決定網絡的延遲和帶寬,但是我們可以努力減少round-trips。
第二, 我們建立了httpdns服務并緩存在本地,減少客戶端DSN檢索的時間損耗;而且基于TLS1.3進行了改造,在保障鏈路安全的情況下性能得到的較大提升。
第三, 阿里的后端系統采用多數據中心多活的架構部署方式,所以無線網關需要具備正確的、靈活可變的用戶調度能力。
第四, 我們把網絡能力整體封裝成了標準的SDK,一方面以確保我們的APP群能夠一起享受整個優化的收益,另一方面也確保了H5頁面能夠使用到Native通道的能力。

在闡述完客戶端架構和網絡架構之后,我們再次把目光聚焦到后端服務上。2010年左右,我們開始考慮多數據中心的事。一方面,我們做到了服務和數據的水平擴展。隨著業務規模的不停增長,我們的應用伸縮規模也越來越龐大,單點不穩定性帶來的風險也成倍放大。另一方面,部署的應用越來越多,覆蓋電商、物流、大數據等等,而一個城市能夠提供給我們的空間畢竟是有限的。更加致命的是,如果單機房發生故障,這對于電商來說基本上不可接受的,所以我們在2011年開始進入雙活乃至多活的改造。
阿里無線技術的開源計劃
架構是非常值得分享和討論的,好的技術架構能夠持續支持偉大的商業夢想。所以今天阿里具備的無線能力,很多都將會通過開源或云服務和外界共享,希望回饋整個社區。同時也希望我們的技術思考能夠給大家帶來啟發。大家如果感興趣,歡迎持續關注我們的github地址。

移動時代只是DT時代的過渡
技術發展將從面向生產效率的IT時代進入面向智能的DT時代,數據最終將成為水電煤一樣的基礎設施 。在這樣一個背景下,我認為移動時代只是一個過渡階段,這個階段我們的所有工作其實都專注在三件事上:
首先,各種設備最終都會具備聯網的能力 ,我們的基礎設施要做好準備。這就是為什么我們會做ACCS這樣的億級無線云平臺,打造強大的無線基礎設施,迎接萬物互聯時代的到來。其次,云和端的界限勢必會經歷一個越來越模糊再到重新清晰的過程。過去w3c和瀏覽器廠商付出了大量的努力,傳統互聯網是一個開放分享透明的生態。現有的移動終端平臺其實并沒有為超級App做過任何準備,反而很多時候限制了超級App的發展。這個過程我們也很愿意參與進來,讓移動互聯網也能夠更加開放分享和透明。
***,終端不應該僅僅是被動的數據消費,而更重要的是成為更多維度的數據生產者。
鏈接一切,云端一體,分享一切,讓我們一起努力迎接一個更佳智能的未來。





















