作過APP產品的技術人員都知道,APP應用屬於一種C/S架構的,因此在作多版本兼容,升級等處理則比較麻煩,不像web應用那麼容易。下面將帶你們分析幾種常見的狀況和應對方式:
小改動或者新加功能的
這種狀況,數據庫結構和API程序通常是能夠兼容多版本的,因此不用強制升級,能夠坐到多版本共存。
儘可能採用數據庫層面新增字段和API的方式,應用程序層面就能夠兼容了。固然,API層面也能夠部署多個版原本同時提供,但這個不是必須的
但最重要的是數據庫層面的表結構那些可以兼容到。mysql
或者:
android
總結:
數據庫層面,儘可能採用新增字段,而不是修改字段的原則,避免影響之前的業務。
而服務端程序層面,API層儘可能設計靈活,接入層能夠支持「路由」最佳。主要有幾種思路,1. 在API方法中經過新增參數或者直接新增API方法(也能夠理解爲重載)。
較少的改動能夠這樣去作處理,可是改動多了會比較麻煩,不利用擴展。
2. 代碼分不一樣分支版本,API部署不一樣子站點。經過api.xx.com/V1 和api.xx.com/V2方式訪問,或者經過apiV1.xxx.com,apiV2.xxx.com等方式區分訪問。固然,也能夠在APP不一樣版本中請求時傳入標識,服務端經過Nginx或者APIGateWay等來實現服務路由。
這種直觀上更加清晰,工做量也會大一些,會增長必定的維護和管理成本。
後端的原子服務,也須要儘量支持多版本。web
若是是大改動,底層數據結構都不兼容,那隻能提示強制升級了
若是是強制升級,就不會有多版本共存的問題了,
也不會有多套數據庫,也不會存在數據同步的問題。
只須要這樣操做:
在蘋果提交審覈以前,咱們事先準備好「新版本的數據結構和對象(view、proc、function等)腳本、遷移腳本或者程序、程序發佈文件」等。
1. 部署1個具備新表結構和對象的測試數據庫(預發佈環境)。
2. 部署1個新的API站點(不一樣域名,建議域名中使用版本號區分。或者採用不一樣子站點的方式),配置鏈接測試庫和測試的(API站點、DB、緩存、ES、Nosql …這些單獨有一套預發佈環境)
3. 等蘋果審覈經過以後,更新最新的程序,數據庫結構等到生產環境,並將API地址的域名的指向切換到生產環境中(網站、admin後臺等等能夠直接發佈了),運營人員在蘋果商店點擊上架操做,服務端升級完成(APP端會有強制更新的提示)。固然,這個過程當中可能會形成短暫的停機時間,因此通常是選擇在晚上操做。
4. 提早將安卓最新APK放到咱們的下載站或鏡像站,在3步服務端程序等都發布完成後,在運營後臺開啓安卓版本的強制升級提示(從咱們的下載站或者鏡像站下載APK升級)。
這樣,舊版本的安卓用戶,會強制升級到新的版本,不會影響到使用。
與此同時,運營人員也須要在各大安卓市場去分發和上架最新的apk包,提供最新的其餘渠道下載,避免用戶下載到舊程序,而後又提示強制升級影響體驗。算法
那就只能去部署兩套(或者更多個版本)數據庫,並且對於用戶產生內容和時效性要求較高的,須要雙向(甚至多向)去作同步。核心問題實際上是數據庫有狀態,這種是很困難的。
這種很容易出問題,容易出現衝突和數據不一致。
並且數據結構不同的狀況下,是很難去兼容的。sql
因此,對於改動較大的,產品新增了重量級新功能的,業務層面或者底層表結構上都不兼容的,建議是要作強制升級的。數據庫
或者:後端
2.若是是大改動,底層數據結構都不兼容,那隻能提示強制升級了
若是是強制升級,就不會有多版本共存的問題了,
也不會有多套數據庫,也不會存在數據同步的問題。
只須要這樣操做:
在蘋果提交審覈以前,咱們事先準備好「新版本的數據結構和對象(view、proc、function等)腳本、遷移腳本或者程序、程序發佈文件」等。
1. 部署1個具備新表結構和對象的測試數據庫(預發佈環境)。
2. 部署1個新的API站點(不一樣域名,建議域名中使用版本號區分。或者採用不一樣子站點的方式。經過api.xx.com/V1 和api.xx.com/V2方式區分),配置鏈接測試庫和測試的(API站點、DB、緩存、ES、Nosql …這些單獨有一套預發佈環境)
3. 等蘋果審覈經過以後,更新最新的程序,數據庫結構等到生產環境,並將API地址的域名的指向切換到生產環境中(網站、admin後臺等等能夠直接發佈了),運營人員在蘋果商店點擊上架操做,服務端升級完成(APP端會有強制更新的提示)。固然,這個過程當中可能會形成短暫的停機時間,因此通常是選擇在晚上操做。
4. 提早將安卓最新APK放到咱們的下載站或鏡像站,在3步服務端程序等都發布完成後,在運營後臺開啓安卓版本的強制升級提示(從咱們的下載站或者鏡像站下載APK升級)。
這樣,舊版本的安卓用戶,會強制升級到新的版本,不會影響到使用。
與此同時,運營人員也須要在各大安卓市場去分發和上架最新的apk包,提供最新的其餘渠道下載,避免用戶下載到舊程序,而後又提示強制升級影響體驗。api
3.若是是大改動,數據庫結構和API程序都不兼容,
又不想去作強制升級,就會有多版本共存的問題
那就只能去部署兩套(或者更多個版本)數據庫,並且對於用戶產生內容和時效性要求較高的,須要雙向(甚至多向)去作同步。核心問題實際上是數據庫有狀態,這種是很困難的。
這種很容易出問題,容易出現衝突和數據不一致。
並且數據結構不同的狀況下,是很難去兼容的。緩存
因此,對於改動較大的,產品新增了重量級新功能的,業務層面或者底層表結構上都不兼容的,建議是要作強制升級的。數據結構