3倍+提升,高德地圖極致效能優化之路
阿新 • • 發佈:2021-01-15
1.導讀
隨著移動網際網路的成熟發展,移動應用技術上呈現出多樣化的趨勢,業務上傾向打造平臺及超級入口,超級應用應運而生。但業務快速擴張與有限的系統資源必然是衝突的,如何實現多(能力服務的高增長)、快(體驗流暢)、好(相容穩定)、省(資源成本低),讓大象也能跳舞,成為擺在超級應用面前必須解決的問題。
伴隨著高德地圖APP近幾年的高速發展,也面臨到這些問題,從2019年開始,我們開啟了一系列效能優化專項,對高德地圖APP進行了深入效能分析和極致優化,取得比較顯著的效果。在這個過程中總結了一系列優化思路和技術方案,希望對同樣面臨超級應用效能問題的你有所幫助。
經過一系列優化動作,我們在保證業務需求正常迭代新增的基礎上,啟動、核心鏈路互動、行中記憶體、包大小等多方面均實現了效能的成倍提升,尤其是低端機上達到了3倍+的提升,從多個維度改善了使用者效能體驗。
高德地圖也同樣經歷了這樣的過程,隨著這幾年的快速發展,應用從手機擴充套件到了車機,平臺從iOS、Android擴充套件了Windows和Liunx,覆蓋10多種出行方式的同時,還在不斷提供組隊、視訊、語音、AR等新服務。與此相應的是單端程式碼行超百萬行,執行緒上百,任務上千,造成了持續的效能壓力。
環境複雜
效能問題面臨的另一個主要挑戰是超級應用的環境複雜。一方面,隨著移動裝置的長線發展,系統碎片化情況越來越嚴重,Android系統橫跨11個主版本,iOS橫跨14個主版本,加之裝置廠商對系統進行各種各樣的改造,進一步增加了系統的碎片化;另一方面,使用者移動裝置的環境是非常不穩定的,電量、溫度的變化以及其他應用的搶佔都會造成記憶體、CPU、GPU等資源波動。複雜不可控的環境為一致的效能體驗的保持增加了很大的難度。
但作為大使用者體量的超級應用,任何環境的體驗都要保證。特別是地圖領域,使用者習慣對不同產品直接對比,任何環境下效能體驗問題,都會直接影響產品的整體口碑,導致使用者流失。所以需要兼顧所有環境,不只是主流機型系統和場景,在長尾場景與機型系統上也必須流暢執行,這就要求超級應用這頭大象不但要在舞臺上跳舞,在凳子上、甚至在水裡也能跳舞。
技術鏈路長
為了滿足研發效率提升、產品動態化等多樣需求,移動應用技術上除支援原生開發外,也要支援小程式、Web H5、C基礎庫等跨平臺、容器化、動態化開發。從高德APP來看,最頂層業務除了OC、Java外,還支援JS開發。支撐層提供了AJX、小程式、原生、C等多種容器框架,同時還涉及JS、JNI等橋接層。最下面則用C++提供地圖各個引擎能力,這裡包括OpenGL、定位感測器融合等多種底層能力。技術鏈路自上而下開始變得長且複雜,鏈路上任何一環都可能導致效能問題,原有的單技術語言的排查工具已經無法定位明確性能卡點模組,為效能排查和管控帶來挑戰。
3.解法:低成本優化遷移,長線管控
基於上面的問題,原有傳統的一招鮮的優化方案,顯然解決不了需求日益增長和複雜環境下的效能一致體驗。所以,我們在專項實踐過程中,沉澱了一套自適應資源排程框架,解決歷史性能問題的同時,能夠在不影響現有的研發效率的情況下,低成本優化遷移,實現新業務高效能的開發。此外,從系統底層進行全維度資源監控,自動定位分發問題,來實現長線管控,避免先治理後反彈的情況。
自適應資源排程框架
自適應資源排程框架在應用執行過程中,感知採集執行環境。然後對不同環境狀態進行不同的排程決策,生成相應的效能優化策略,最終根據優化策略執行對應優化功能。與此同時,監測排程上下文以及排程策略執行效果,並將其反饋給排程決策系統,從而為進一步的決策調優提供資訊輸入。這樣,可以做到在不同的執行環境下都能達到可預期的極致效能體驗。並且,整個過程,對業務無需額外開發,做到無感接入,避免影響業務開發效率。
• 環境感知
感知環境分為硬體裝置、業務場景、使用者行為和系統狀態四個維度:
- 啟動攻堅:啟動耗時降低70%+,實現2s地圖元素完成展示,並管控保持在穩定低水位,呈下降趨勢。
- 核心鏈路互動優化:在搜尋、路線等鏈路上實現中高階機型秒開、低端機型2s內開啟,整體提升使用者流暢互動體驗 。
- 行中記憶體優化:全機型優化了30%左右,提高穩定性。
- 包大小攻堅:雙端體積降低20%,提高安裝轉換率。
- 硬體裝置上,一方面通過集團實驗室對已知裝置進行評測跑分確定高中低端機型,另一方面在使用者裝置上本地對硬體進行實時算力評估。
- 業務場景上,將業務分為前臺展示、後臺執行、互動操作等幾類,一般情況下前臺正在進行互動操作的業務場景優先順序最高,後臺資料預處理業務場景優先順序最低。對於同類別業務場景,根據業務UV、交易量、資源消耗等維度進行PK,確定細分優先順序。
- 使用者行為上,結合服務使用者畫像和本地實時推算,確定使用者功能偏好和操作習慣,為下一步針對使用者的精準優化決策做準備。
- 系統狀態上,一方面通過系統提供介面獲取諸如記憶體警告、溫度警告及省電模式等來獲取系統極端狀態,另一方面通過對記憶體、執行緒、CPU和電量進行監控,來實時確定系統性能資源情況。
- 降級規則:在低端裝置上或者系統資源緊張告警(如記憶體、溫度告警)時,關閉高耗能功能或者低優先順序功能。
- 避讓規則:高優先順序功能執行時,低優先順序功能進行避讓,如使用者點選搜尋框時到搜尋結果完全展示到時間段內,後臺低優任務進行暫停避讓,保證使用者互動體驗。
- 預處理規則:依據使用者操作及習慣進行預處理,如某使用者通常在啟動3s後,點選搜尋,則在3s之前對該使用者搜尋結果進行預載入,從而在使用者點選時呈現極致的互動體驗效果。
- 擁塞控制規則:在裝置資源緊張時,主動降低資源申請量,如CPU繁忙時,主動降低執行緒併發量;這樣在高優任務到來時,避免出現資源緊缺申請不到資源效能體驗問題。