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