苏宁易购Android架构演进史
http://www.infoq.com/cn/articles/suning-android-architecture
摘要
一個電商類APP,對用戶而言,是琳瑯滿目的商品,是層出不窮的優惠,既是社交導購,更是交易售后;而對于開發者來說,用戶行為的背后,或許僅僅是一次次數據的存儲、處理、傳輸和展示。
在蘇寧易購android客戶端不斷發展的過程中,也出現了許多的問題:
- 如何高效、安全的處理數據流向的各個環節?
- 如何規避軟件升級、硬件差異、網絡環境等攜帶的風險?
- 如何合理的解決產品快速迭代和開發應接不暇之間的矛盾?
- 如果最大限度的提高開發效率,降低開發、管理和運營的成本?
- ......
有問題,就有對應的技術方案,就需要合理的架構去支撐。
本文將根據移動發展各個階段的時代特點,結合移動電商app業務的特質,以移動數據交互全景的視角,講述蘇寧易購android客戶端在不同階段出現的問題,采取的技術應對方案,以及如何衍生出最終的android運行架構。
移動青銅時代(2012-2014)
時代特點:
- 移動特征,2G~3G網絡為主,數據傳輸效率低,電商類APP用戶的活躍性低;
- 發布模式,傳統的軟件生命周期,需求收集、評審 → 測試案例生成、評審 → 開發設計、編碼、評審 → 測試 → 發布 → 運營,單團隊單線發布;
- Android生態,Android 2.0~3.0,行業內都處于探索階段,技術交流少,多以系統API為主;開發工具Eclipse。
APP業務特征:
- 業務系統,以PC業務為主,沒有針對移動業務數據的API,需要單獨研發一個數據中轉系統,以保持移動業務的正常運轉;
- 產品邏輯,展示、交互簡潔,業務復雜度低,以商品的搜索、展示、購買等核心流程為主;
移動應用數據交互全景:
研發過程中的問題:
由于業務邏輯簡單,頁面展示、交互的復雜低,通過Android原生的Activity+WebView即可以滿足絕大部分的產品需求;需求、開發、測試、發布、運營都在正常的版本周期內有條不紊的進行著;在Android發展初期,最主要的問題就是:
如何提高開發者的編碼質量。
技術應對方案:
資深人力資源對核心技術進行封裝,高內聚,低耦合;以最精簡的API對外,降低使用復雜度,讓開發人員專心于業務邏輯的研發。
應用架構生成:
采用最基本的軟件設計理念,即分層 + 解耦:
- 分層,數據流轉處理采用責任鏈模式,保證各個環節的邏輯清晰明了;
- 解耦,各層之間添加標準的API代理,確保被依賴層可以正常的維護、升級。
移動白銀時代(2014-2016)
時代特點:
- 移動特征,3G~4G網絡為主,數據傳輸效率高,高效便捷的購物體驗,讓手機購物成為了主流;
- 發布模式,單線已經無法滿足各條產品線的快速迭代,敏捷開發應運而生,多團隊多線發布;
- Android生態,Android 4.0~5.0,移動技術交流百花齊放,插件化、熱修復、APK加固等黑科技如虎添翼;開發工具Eclipse → Android Studio。
APP業務特征:
- 業務系統,以移動業務為主,提供針對移動業務特征的API,廢棄原有的轉接系統,一方面提高移動數據的傳輸、處理速度,一方面降低單一系統異常帶來的移動體驗風險;
- 產品邏輯,除了核心的商品搜索、展示、交易,評價、社交、導購、物流等都開辟出單獨的產品線,以滿足用戶使用過程的各種需求;
移動應用數據交互全景:
研發過程中的問題:
如果說一個產品從出現到成熟,一定要經過一個“戰爭期”的話,我想一定是這個時期了,摘要里列出的大多數問題都爆發在這個階段,
1 軟\硬件差異方面:
- App在Android_x.x上是可以運行的,在Android_y.y就不行
- App在其他手機上都可以跑,就XXX手機不行
2 網絡環境方面:
- App在WIFI正常顯示數據,切到3G顯示異常
- App在運營商1網絡下正常顯示,在運營商2網絡下一片空白
- XX省請求數據超時嚴重,其他地區正常
3 產品運營方面:
- XX需求一定要跟著App版本走么,能不能明天就上,不然活動就過期了
- HTML5體驗太差了,能不能讓開發優化下
- 這個頁面在App已經做好了,讓開發直接用,這個不算開發時間
4 開發測試方面:
- 這個控件能不能抽出來公用,每次都是各自復制代碼
- 頁面跳轉都是寫死的,抽離代碼,都是報錯,改動太多
- 會員數據、手機軟硬件數據能不能提供API,現在都是另起爐灶,代碼冗余太多
- 跑一次工程太慢了,65535是什么情況
- 為啥商品頁面的改動,還需要把會員相關的場景都測試一遍
- 線上不能直接修改已發布APP的bug,每次有問題都要重新發布,嚴重浪費資源
5 APP性能方面:
- 有用戶反饋,點擊XX頁面就閃退
- 用戶又反饋,首頁展示的非常慢
- 還有用戶反饋,瀏覽了幾頁就提示APP未響應
技術應對方案:
雖然出現了很多問題,但是這個階段出現的技術方案,針對性并不強,都是根據生產版本出現的問題,施加的通用手段,具體如下:
而相比app的性能問題,產品缺陷、開發缺陷以及體驗問題,才是這個階段最主要的問題,所以在這個階段,項目里面的所有人,每天都在看監控、看用戶反饋,發現問題解決問題。
應用架構生成:
而對于客戶端,也在想法設法的在架構上提高開發質量,主要手段如下:
移動黃金時代(2016至今)
時代特點:
- 移動特征,4G網絡為主,數據傳輸速度 + 流量已經不在是移動APP的瓶頸,移動設備的物理性能大幅度提高;
- 發布模式,敏捷開發模式運用成熟,多產品線靈活發布,可集成發布、也可獨立發布;
- Android生態,Android 6.0~7.0,插件手段運用成熟,前端頁面渲染更加高效,Weex/ReactNative、微信小程序等成為新趨勢;開發工具Android Studio。
APP業務特征:
- 業務系統,在傳統的業務系統上,系統更加安全、高效、多樣、智能,接入、升級更加靈活;
- 產品邏輯,視頻直播、虛擬現實、人工智能成為主流元素,商品銷售定位更加精細。
移動應用數據交互全景:
研發過程中的問題:
不同于前面的發展階段,這個階段出現問題(或者說是技術需求)針對性都非常強,主要如下:
技術應對方案:
與此同時,Google在Android Studio上推出Instant Run用來加速gradle的編譯速度,進一步提升開發效率。
應用架構生成:
這個階段的架構調整,針對上述問題5做了很多精細的工作,一方面要顆粒化業務層、服務層、ADK層,另一方面還要調整原有的單向依賴關系,讓應用工程本身容器化,滿足產品線的快速集成、快速獨立,實現APP研發的DIY,主要調整如下:
后記
5G時代即將到來,有人說那是人工智能的時代,有人說那是物聯網的時代,也有人說那是虛擬現實的時代,技術改變人們生活習慣的同時,也給開發者帶來的各色各樣的問題,時代在變,技術方案在變,支撐技術的架構也在變。
千變萬化的背后,唯一不變的、也是我們鍥而不舍追求的,就是:“在掌握時代特點、業務特征、軟硬件限制的前提下,合理利用各種資源,設計出最高效的開發方案。”
轉載于:https://www.cnblogs.com/davidwang456/articles/8868544.html
總結
以上是生活随笔為你收集整理的苏宁易购Android架构演进史的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jayway JsonPath实例
- 下一篇: java性能优化读书笔记(1)