文章來自阿里巴巴技術協會(ATA)
7月24日,2015WOT互聯網開發者大會在富力萬麗酒店隆重召開。阿里巴巴/高級無線技術專家徐昭(花名:長恭)帶來的主題演講《以小見大,見微知著 —— 億萬級APP架構演進之路》。
以下是演講實錄:
我是來自阿里巴巴無線事業部的徐昭,今天我演講題目是以小見大,見微知著,和大家分享阿里巴巴以手機淘寶為代表的移動架構體系的演進過程和背后的思考,以及這其中大家最感興趣的在大規模復雜應用場景下的關鍵架構技術。
手機淘寶是誕生於移動互聯網時代的一個超級APP,並已成長為日活上億級別、全球最大的移動消費生活平台。以之為代表的阿里無線應用體現的是一個高度多樣化的生態,承載了大淘寶業務群之中幾乎所有的業務形態。可想而知,在小小的屏幕背后,手淘面臨着怎樣強大的技術挑戰:
-
PC的業務大量遷徙&無線特色並行;
-
客戶端越來越重,體系越來越復雜;
-
無線架構與PC架構的相關性與差異性;
-
越來越多的終端設備產生,碎片化嚴重;
-
越來越多的APP的產生,APP之間的連接、復用成為新的命題。
手機淘寶技術之路
2009年手機淘寶更多偏向於APP的簡單輔助工具,更多承載PC核心主鏈路的功能。2010年安卓、蘋果操作系統生態成熟,基於Webview的技術能 夠在兩端實現更多的業務場景。隨着2012年整個生態成熟演進,最終整個團隊規模增長到100多人,我們支持客戶端層面有專職的安卓、iOS研發團隊,在 2014年隨着業務增長,增長至上億級別用戶規模,研發模式進行了統一拆分,配套的研發體系和工具平台也進行了針對性改造和進化。
這個過程中在前期階段隨着客戶端模式的變化,以及PC業務的無線化遷移過程,經歷了從工具到應用到平台的逐步演進。過去一年多來阿里無線PC業務遷移過程中遇到的挑戰包括:
第一,PC業務大量遷徙和無線特色並行,這個過程中如何更好地的和無線特色結合,發揮移動端的特性是一個重點。
第二,今天客戶端承載的架構體系越來越重,原來服務端的PC模式是否適合新的無線架構,無線架構和PC架構的差異性到底在哪里?
同時,隨着體量增大,我們在越來越意識到今天整個移動 設備市場的碎片化是非常嚴重的。如何更好地的適應多端支持、跨端的適配?如何從APP單一入口,進行APP群之間的連接和互通、互用?如何適應技術體系從 工具到平台進而到APP開放生態群的支撐和進化?手淘技術團隊圍繞這些進行了大量的思考、研究和嘗試。
無線架構治理的思考
總體而言,我們對無線架構治理的一些思考可匯總為以下五點:
-
部署模式的差異化。相對於服務端的時代,無線時代類似於CS架構模式,這個架構體系里基於無線操作系統的特性,如何保證動態部署、動態修復能力像PC時代一樣更靈活,基於互聯網模式實現更快速迭代
-
系統架構的差異。碎片化的操作系統帶來研發和測試體系的變革,如何更好的去支持核心的操作系統、核心用戶群體,跨終端、適配問題,如何保證整個研發體系的多端兼容性,如何能夠在效率層面保證跨端支持,用最小的開發效率和成本取得終端的支撐。
-
邏輯層次差異性。如何考慮更好的富客戶端本身架構的提醒,如何能夠在富客戶端架構體系中更好的去運用移動設備本身的硬件特性,帶來和無線傳統時代以及PC時代不一樣的性能。
-
質量體系的差異。移動端質量體系考量的維度和傳統的PC時代不一樣,今天需要綜合考慮用戶層面的流量、幀率、內存,用戶本身對移動體驗的訴求。
-
用戶行為本身的變化。服務端傳統的服務調用模式是否適用於移動生態,是否適用於用戶永遠在線的特性。
客戶端重構:破而后立
從端的角度出發,我們結合移動端的特性進行架構特征分 析和思考。我們考慮架構設計的時候遇到幾個挑戰。對於這個過程中我們的解法是“破而后立”,今天打造超級APP,重要的一點是如何利用技術手段提供持續的 交付能力,目標是讓大象能跳舞。小團隊研發團隊類似田園式的自主研發模式,對比超級APP和超大規模團隊研發,后者這只大象的轉身非常緩慢。這個過程中我 們擁有的架構體系,如何將不同的業務體系進行更好的隔離,技術在業務間更好復用,業務與業務和技術與技術間如何減少緊耦,手淘團隊從不同的技術路徑嘗試給 出相應的解法。我們對整個開發模式、工程結構、架構模型進行了徹底的改造和深入探索:一是圍繞容器架構為核心出發做了深度改造。基於在移動端上的最小部署 單元我們歸一化統稱為“組件”,包括相對獨立的Libraries也可以是其他的獨立部署業務/UI模塊。我們能夠支撐這些單元以動態靈活的方式加載,並 以統一的方式管理其生命周期,使得每個組件可以獨立的開發、獨立的部署、獨立的調試、獨立的發布。底層采用總線方式支撐這樣的模式,分別在UI、服務、消 息的層面上提供總線機制。從而在UI層可使用統一的方式進行跳轉管理、橫向攔截以及統一降級策略;在消息層面基於系統本身機制,構建不同模塊之間通訊能 力,保證每個獨立的組件單元可被感知和彼此交互。
沿容器化思路,基於組件的研發體系本身也發生了相應變 化。在工程角度,對於手淘工程進行相應解耦,按照業務、單元歸屬不同的研發團隊拆分成具體的組件模塊。在容器化支撐下,我們做到模塊單元的動態部署、動態 補丁能力,將不同的業務、技術模塊充分解耦,以適應更靈活、更合理的迭代演進節奏。
在管道層面,我們對網絡層進行針對性優化。首先在接入 層統一了阿里移動端接入體系。針對設備和web接入提供了更高效,更規范、高可用的接入層。針對內部雲端服務,基於API網關我們提供了統一接入模式,並 充分復用長連通道,整合業務層對RPC、IM、PUSH幾種數據消費模式提供完整的客戶端消費模式支持。
此外,很多移動開發者關心具體的UI層技術,以及最終的業務功能開發框架,我們也進行了不一樣的探索。面對H5靈活性,以及Native的用戶體驗,到底是選擇研發效率、降低成本?還是提供適應原生平台本身的用戶體驗,用戶為先?技術界一直存在各種爭論。我們認為:只有最適合的技術,針對合適的場景做最佳的選擇。在H5以及Native兩個模式下,我們都做了很多有益並且領先業界的嘗試。
H5方面,我們構建了平台化的研發和工具后台體系。依 托阿里的整個研發和運維能力,將移動端Webapp的發布機制、緩存部署、控制策略等集成在統一的后台,使得H5研發效率得以標准化和高效保障,並進而采 用PackageApp的方式支持離線化的web應用模式,大大提高用戶體驗。Native方面,我們自主創造了一個動態化的UI渲染框架,基於自己設計 的一套數據協議,配備相應的可視化工具,可以滿足后台編輯模塊化的頁面,並指定綁定數據源,以模板數據方式推送給客戶端。客戶端則動態接收和實時加載、渲 染,動態進行數據變更。一套數據,iOS/Android/H5三端復用,動態輸出。在手淘移動端看到的(裝修過的)店鋪和寶貝詳情等場景就是基於這套框 架實現的。
最終整個技術手段的目標是拓展商業邊界。這個過程中我 們所有演進過程都希望構建業務,遷移商業形態的同時,更多將技術和商業形態本身開放給開發者。在這個過程中我們看到阿里無線也提供了相應的技術和業務開放 平台,我們通過前面所說的技術輸出,今天能夠支持到阿里的商業服務市場中整個店鋪的模板、互動游戲,都可以用開放的方式支持第三方應用者開發,並無縫的接 入到淘系移動業務。移動小屏幕代表了很大的技術和商業生態。商業變現過程中,技術起到核心重要的作用。今天手機淘寶代表了阿里整個電商生態的旗艦產品,未 來我們希望隨無線技術體系的進一步開放,逐步構建和孵化一個新的無線開放生態。其底層的核心技術一方面支撐阿里內部包括天貓、聚划算等等APP群的不斷成 熟和壯大,同時也希望通過手淘開源項目、阿里百川計划等技術結合商業手段的多樣化方式,給移動第三方開發者更多的選擇,以更快更好的構建自己的應用和用戶 體驗,實現移動價值。
展望未來,概括一下我們對移動技術體系的思考,對於移 動架構的思路,概括的說就是雲、管、端一體化。雲、管、端一體化的架構思維也可以從安全、性能、可運維等多方面全面為移動電商業務保駕護航。具體而言,類 似網絡的模型可被拆分成七個層次,在每個層次上以更聚焦和更標准化的方式提供最佳實踐,並在縱向上各層次打通以支撐上層多樣的業務形態。
開放合作,反哺生態。
我們現在在進行中的一些項目,都逐漸在實現開源,歡迎大家在github持續關注阿里開源社區。我們7月份已經開源了安卓的動態AOP技術,支持動態模塊部署和加載,包括熱補丁方式的實現和應用,今天在線的故障可以基於這套框架來實現更加
靈活快速的修復。