該文章來自阿裡巴巴技術協會(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網關我們提供了統一Access模式,并充分複用長連通道,整合業務層對rpc、im、push幾種資料消費模式提供完整的用戶端消費模式支援。
此外,很多移動開發者關心具體的ui層技術,以及最終的業務功能開發架構,我們也進行了不一樣的探索。面對h5靈活性,以及native的使用者體驗,到底是選擇研發效率、降低成本?還是提供适應原生平台本身的使用者體驗,使用者為先?技術界一直存在各種争論。我們認為:隻有最适合的技術,針對合适的場景做最佳的選擇。在h5以及native兩個模式下,我們都做了很多有益并且領先業界的嘗試。
h5方面,我們建構了平台化的研發和工具背景體系。依托阿裡的整個研發和運維能力,将移動端webapp的釋出機制、緩存部署、控制政策等內建在統一的背景,使得h5研發效率得以标準化和高效保障,并進而采用packageapp的方式支援離線化的web應用模式,大大提高使用者體驗。native方面,我們自主創造了一個動态化的ui渲染架構,基于自己設計的一套資料協定,配備相應的可視化工具,可以滿足背景編輯子產品化的頁面,并指定綁定資料源,以模闆資料方式推送給用戶端。用戶端則動态接收和實時加載、渲染,動态進行資料變更。一套資料,ios/android/h5三端複用,動态輸出。在手淘移動端看到的(裝修過的)店鋪和寶貝詳情等場景就是基于這套架構實作的。
最終整個技術手段的目标是拓展商業邊界。這個過程中我們所有演進過程都希望建構業務,遷移商業形态的同時,更多将技術和商業形态本身開放給開發者。在這個過程中我們看到阿裡無線也提供了相應的技術和業務開放平台,我們通過前面所說的技術輸出,今天能夠支援到阿裡的商業服務市場中整個店鋪的模闆、互動遊戲,都可以用開放的方式支援第三方應用者開發,并無縫的接入到淘系移動業務。移動小螢幕代表了很大的技術和商業生态。商業變現過程中,技術起到核心重要的作用。今天手機淘寶代表了阿裡整個電商生态的旗艦産品,未來我們希望随無線技術體系的進一步開放,逐漸建構和孵化一個新的無線開放生态。其底層的核心技術一方面支撐阿裡内部包括天貓、聚劃算等等app群的不斷成熟和壯大,同時也希望通過手淘開源項目、阿裡百川計劃等技術結合商業手段的多樣化方式,給移動第三方開發者更多的選擇,以更快更好的建構自己的應用和使用者體驗,實作移動價值。
展望未來,概括一下我們對移動技術體系的思考,對于移動架構的思路,概括的說就是雲、管、端一體化。雲、管、端一體化的架構思維也可以從安全、性能、可運維等多方面全面為移動電商業務保駕護航。具體而言,類似網絡的模型可被拆分成七個層次,在每個層次上以更聚焦和更标準化的方式提供最佳實踐,并在縱向上各層次打通以支撐上層多樣的業務形态。
我們現在在進行中的一些項目,都逐漸在實作開源,歡迎大家在github持續關注阿裡開源社群。我們7月份已經開源了安卓的動态aop技術,支援動态子產品部署和加載,包括熱更新檔方式的實作和應用,今天線上的故障可以基于這套架構來實作更加
靈活快速的修複。
最後,感謝51cto本次邀請,非常開心和大家在這裡交流。移動時代,聯合開拓、共同創新是不可逆轉的潮流,希望能夠和在座各位業界同行一起,肩負中國移動技術走向全球的使命,共同打造全球領先的中國移動網際網路品牌。謝謝大家!
關注android 動态aop技術點選【閱讀原文】
https://github.com/alibaba/dexposed
mtt是手機淘寶技術團隊(mobile taobao tech team)的英文縮寫,歡迎關注手機淘寶技術團隊,一起交流分享無線技術,共創移動開發無限未來!掃描微信二維碼關注我們!我們将分享更多的獨家技術細節!