ArchSummit分享 | 高德地圖App架構演化與實踐

amap_tech發表於2019-07-31

講師介紹


郝仁杰,高德地圖無線開發專家。在7月13日落幕的2019年ArchSummit峰會上就高德地圖近幾年的App架構演化和實踐進行了分享。

背景概述


高德是國內領先的數字地圖內容、導航和位置服務解決方案提供商,端上分手機和車機兩條主線。近年來,高德業務迅猛發展,人員規模急速擴張,程式碼量急劇膨脹,如何提高團隊高效並行作戰的能力,端架構在一致性和動態性方面做了很多嘗試:從最初的雙端原生單體架構,到地圖引擎下沉C++,再到動態UI框架的建設,收到了一定的成效,但面對業務持續的高速發展,依然還有很多方面需要繼續完善。

為了讓業務開發有節奏的進行,專案上每年會制定一些公車計劃。公車就是每個App版本,貨物就是對應的產品功能,貨物組裝就是功能開發,公車計劃即每年的發版計劃,公車按照指定的時間來,把組裝好的貨物拉走。但由於雙端程式碼差異較大、耦合嚴重、複用率低、職責不清晰、平臺工具簡陋等問題,公車並無法按照計劃拉走貨物,貨物組裝慢且質量差,迫使公車等待,導致整個版效週期長達3個月,崩潰率也高達萬分之八,公車變成了偽公車。

執行方案


為了使偽公車變為真公車,需要解決雙端差異問題、程式碼耦合問題和平臺工具落後等問題,來提高穩定性、並行性和高效性。2018年端上通過雙端融合、元件化和研發中臺建設來達到目標。

 

雙端融合採用下沉C++、上漂動態UI和雙端拉齊的方式來實現。下沉C++,實現了跨端的同時提高了效能;上漂動態UI同樣實現了跨平臺,且降低了開發門檻,讓開發更簡單,效率更高,同時也為未來動態化做好鋪墊;雙端拉齊更多的是借鑑雙端的優勢做到融合,同時保留雙端的差異作為擴充套件,做到儘量保持一致的同時,也很好地相容了Android/iOS平臺的特性。

元件化參考了手淘Atlas、BeeHive和網易LDBusMediator等成熟的容器方案並融合了高德自身的業務特點和設計思考,定義了容器、模組、微應用、微服務和頁面路由。借鑑了Android元件化設計思想,讓業務專注於自身需要的服務,而無需關注其它。

 

通過架構的分層、分組,讓模組的歸屬、職責清晰化。

 

容器為模組提供了其內部的結構框架、架構分層、分組讓模組找到自己的位置,二者結合實現了端上的元件化,解耦了程式碼、提高了功能的複用率,也為業務並行開發打下基礎。

研發中臺建設根據當前的公車流程,結合元件化方案進行細分,制定了新的產、研、測、項詳細流程,並將流程中臺化,降低了風險、提高了效率、實現了研發並行。

 

實踐收益


雙端融合,解決一致性問題,提高了App的穩定性;元件化,解決程式碼耦合、提高複用率;研發中臺建設,將流程自動化、標準化,同時結合元件化,實現了開發階段的並行,做到了真公車。發版週期縮短了一半。

通過針對性程式碼質量治理,加以平臺管控,使得崩潰率從萬分之八降低到十萬分之八。

通過工具升級、元件化後基於產物的整合,打包時間從40mins+降低到8mins。

未來展望


2018年,高德客戶端通過一系列架構治理,從偽公車變成了真公車,但這只是近幾年架構演進的一個階段性成果。未來,我們要發揮動態UI的優勢,讓業務真正動態化起來,從公車時代跨入到Feature Team時代,讓公車變成一條條公路,每個Feature Team就是一個小汽車,按照自己的節奏裝好貨物後,就可以在修好的公路上自由的行駛,更好地做到靈活、並行和高效!

 

結語


歡迎大家掃描高德技術公眾號關注更多高德技術及細節,也歡迎大家加入高德,與我們一同探索高德地圖App架構的演化之路!

關注高德技術,找到更多出行技術領域專業內容

 

相關文章