做過APP產(chǎn)品的技術(shù)人員都知道,APP應(yīng)用屬于一種C/S架構(gòu)的,所以在做多版本兼容,升級等處理則比較麻煩,不像web應(yīng)用那么容易。下面將帶大家分析幾種常見的情況和應(yīng)對方式: 
小改動(dòng)或者新加功能的 
這種情況,數(shù)據(jù)庫結(jié)構(gòu)和API程序一般是可以兼容多版本的,所以不用強(qiáng)制升級,可以坐到多版本共存。 
盡量采用數(shù)據(jù)庫層面新增字段和API的方式,應(yīng)用程序?qū)用婢涂梢约嫒萘?。?dāng)然,API層面也可以部署多個(gè)版本來同時(shí)提供,但這個(gè)不是必須的 
但最重要的是數(shù)據(jù)庫層面的表結(jié)構(gòu)那些能夠兼容到。

 
或者: 

總結(jié): 
數(shù)據(jù)庫層面,盡量采用新增字段,而不是修改字段的原則,避免影響以前的業(yè)務(wù)。 
而服務(wù)端程序?qū)用?,API層盡量設(shè)計(jì)靈活,接入層可以支持“路由”最佳。主要有幾種思路,1. 在API方法中通過新增參數(shù)或者直接新增API方法(也可以理解為重載)。 
較少的改動(dòng)可以這樣去做處理,但是改動(dòng)多了會(huì)比較麻煩,不利用擴(kuò)展。 
2. 代碼分不同分支版本,API部署不同子站點(diǎn)。通過api.xx.com/V1 和api.xx.com/V2方式訪問,或者通過apiV1.xxx.com,apiV2.xxx.com等方式區(qū)分訪問。當(dāng)然,也可以在APP不同版本中請求時(shí)傳入標(biāo)識,服務(wù)端通過Nginx或者APIGateWay等來實(shí)現(xiàn)服務(wù)路由。 
這種直觀上更加清晰,工作量也會(huì)大一些,會(huì)增加一定的維護(hù)和管理成本。 
后端的原子服務(wù),也需要盡可能支持多版本。

如果是大改動(dòng),底層數(shù)據(jù)結(jié)構(gòu)都不兼容,那只能提示強(qiáng)制升級了 
如果是強(qiáng)制升級,就不會(huì)有多版本共存的問題了, 
也不會(huì)有多套數(shù)據(jù)庫,也不會(huì)存在數(shù)據(jù)同步的問題。 
只需要這樣操作: 
在蘋果提交審核之前,我們事先準(zhǔn)備好“新版本的數(shù)據(jù)結(jié)構(gòu)和對象(view、proc、function等)腳本、遷移腳本或者程序、程序發(fā)布文件”等。 
1. 部署1個(gè)具有新表結(jié)構(gòu)和對象的測試數(shù)據(jù)庫(預(yù)發(fā)布環(huán)境)。 
2. 部署1個(gè)新的API站點(diǎn)(不同域名,建議域名中使用版本號區(qū)分。或者采用不同子站點(diǎn)的方式),配置連接測試庫和測試的(API站點(diǎn)、DB、緩存、ES、Nosql …這些單獨(dú)有一套預(yù)發(fā)布環(huán)境) 
3. 等蘋果審核通過之后,更新最新的程序,數(shù)據(jù)庫結(jié)構(gòu)等到生產(chǎn)環(huán)境,并將API地址的域名的指向切換到生產(chǎn)環(huán)境中(網(wǎng)站、admin后臺等等可以直接發(fā)布了),運(yùn)營人員在蘋果商店點(diǎn)擊上架操作,服務(wù)端升級完成(APP端會(huì)有強(qiáng)制更新的提示)。當(dāng)然,這個(gè)過程中可能會(huì)造成短暫的停機(jī)時(shí)間,所以一般是選擇在晚上操作。 
4. 提前將安卓最新APK放到我們的下載站或鏡像站,在3步服務(wù)端程序等都發(fā)布完成后,在運(yùn)營后臺開啟安卓版本的強(qiáng)制升級提示(從我們的下載站或者鏡像站下載APK升級)。 
這樣,舊版本的安卓用戶,會(huì)強(qiáng)制升級到新的版本,不會(huì)影響到使用。 

網(wǎng)友評論