支付寶錢包客戶端技術架構
黎三平:小微金服高級技術專家,06年就開始移動方面的研發,先后從事過游戲和應用開發。對Android的動態部署和移動應用的開發框架有一定研究,現負責支付寶錢包Android平臺基礎技術的架構設計工作。
該議題是分析支付寶錢包客戶端的技術挑戰及背景,講述錢包客戶端技術架構的大思路和整體架構,以及支撐當前架構的一些關鍵技術。以下來分享其精彩內容。
背景
移動互聯網是一個戰略核心,支付寶面臨著無線化,業務快速推進的問題,且用戶規模爆發,android環境復雜。支付寶這樣一個支付工具依賴的就是支付產檢,所以支付寶有一個平臺化的一個構想,可以把支付產檢豐富起來。
支付寶投入的資源也是很大的,有多個業務團隊并行開發,純andioid開發的人員近50人。工程復雜度很高,模塊組織方式也有很大挑戰,不包括第三方庫等其他東西,就有100W+行的java代碼,100+個模塊。
面臨的挑戰
永久的問題:如何提升開發效率,如何提高穩定性,怎樣部署,性能如何,安全問題也是支付寶的重要問題。
研發過程管理困難:1依賴管理,每個模塊對其他模塊的依賴是管理困難的;2版本管理;3部署管理(搭火車,難以觸達到用戶);4模塊組織方式(庫工程,源代碼級別,沒有權限)。
構建打包痛苦:可能不能打包(2.x安裝不上),合并代碼搞了很久,編譯打包時間過長。
整體架構
圖1和圖2是支付寶錢包客戶端整體的架構圖:
圖1
圖2
監控日志主要是用戶行為監控,質量監控(包括crash,速度,流量,電量),安全監控以及診斷日志。
異常處理:所有業務拆分成多個bundles,但如果有一些bundles比如造成閃退了,這時我們就需要做一些故障隔離,就是通過統一的Framework Exception Handler來做這個事情。主線程的Crash;工作線程的異常(網絡、存儲、其他)。
安全措施:模塊的簽名來校驗;Dex加固;防二次發布;通訊的安全通道; 防注入攻擊(Xposed,Ptrace);其他安全措施。
動態加載
Quinox容器有三大塊:
1、模塊管理:安裝、升級、卸載;依賴關系的管理。
安裝、升級的過程是這樣的,我們首先會對所有下載下來的bundles做一個合法性的校驗,首先是看它們的簽名是否正確,再者看依賴關系是否正確,如果檢驗通過的話,我們會把它們拷貝到一個可執行域里面去,然后再把元數據持久化,那么下次啟動時就會創建類裝載,也會把資源初始化。
2、執行引擎:類的裝載;資源的管理; Android組件的執行。
3、安全機制:簽名校驗;容錯。
圖3
圖3為執行引擎的原理,在Pathclassloader上做了一些改造,通過它來管理其它的bundles,且對每個bundle都會串接一個類裝載器。
圖4
圖4為運行期原理圖,通過上面的幾項來管理bundles,bundles再進行導入導出服務。
研發支撐
圖5
圖5是研發過程,我們用A-svn庫來管理代碼,每個團隊對應一個svn庫,每個團隊在自己的庫上去開發,獲取源代碼和提交代碼。然后在打包平臺上打包,再提交到Maven庫中,然后通過發布平臺進行動態部署。
圖6
圖6是構建過程,左邊是傳統的構建過程,就是源代碼編譯生成直接給客戶端。右邊是做了一些改變,工程里面會有標準的工程布局,就是為了規范代碼,編譯時會有一個中間的過程,編譯成一個二進制包,然后再進行動態部署。
PPT下載地址:http://club.alibabatech.org/resource_detail.htm?topicId=155