APP多版本共存,服務端如何相容?

来源:http://www.cnblogs.com/dinglang/archive/2016/11/23/6092405.html
-Advertisement-
Play Games

做過APP產品的技術人員都知道,APP應用屬於一種C/S架構的,所以在做多版本相容,升級等處理則比較麻煩,不像web應用那麼容易。下麵將帶大家分析幾種常見的情況和應對方式: 小改動或者新加功能的 這種情況,資料庫結構和API程式一般是可以相容多版本的,所以不用強制升級,可以坐到多版本共存。 儘量採用 ...


做過APP產品的技術人員都知道,APP應用屬於一種C/S架構的,所以在做多版本相容,升級等處理則比較麻煩,不像web應用那麼容易。下麵將帶大家分析幾種常見的情況和應對方式: 
小改動或者新加功能的 
這種情況,資料庫結構和API程式一般是可以相容多版本的,所以不用強制升級,可以坐到多版本共存。 
儘量採用資料庫層面新增欄位和API的方式,應用程式層面就可以相容了。當然,API層面也可以部署多個版本來同時提供,但這個不是必須的 
但最重要的是資料庫層面的表結構那些能夠相容到。

 
或者: 

總結: 
資料庫層面,儘量採用新增欄位,而不是修改欄位的原則,避免影響以前的業務。 
而服務端程式層面,API層儘量設計靈活,接入層可以支持“路由”最佳。主要有幾種思路,1. 在API方法中通過新增參數或者直接新增API方法(也可以理解為重載)。 
較少的改動可以這樣去做處理,但是改動多了會比較麻煩,不利用擴展。 
2. 代碼分不同分支版本,API部署不同子站點。通過api.xx.com/V1 和api.xx.com/V2方式訪問,或者通過apiV1.xxx.com,apiV2.xxx.com等方式區分訪問。當然,也可以在APP不同版本中請求時傳入標識,服務端通過Nginx或者APIGateWay等來實現服務路由。 
這種直觀上更加清晰,工作量也會大一些,會增加一定的維護和管理成本。 
後端的原子服務,也需要儘可能支持多版本。

如果是大改動,底層數據結構都不相容,那隻能提示強制升級了 
如果是強制升級,就不會有多版本共存的問題了, 
也不會有多套資料庫,也不會存在數據同步的問題。 
只需要這樣操作: 
在蘋果提交審核之前,我們事先準備好“新版本的數據結構和對象(view、proc、function等)腳本、遷移腳本或者程式、程式發佈文件”等。 
1. 部署1個具有新表結構和對象的測試資料庫(預發佈環境)。 
2. 部署1個新的API站點(不同功能變數名稱,建議功能變數名稱中使用版本號區分。或者採用不同子站點的方式),配置連接測試庫和測試的(API站點、DB、緩存、ES、Nosql …這些單獨有一套預發佈環境) 
3. 等蘋果審核通過之後,更新最新的程式,資料庫結構等到生產環境,並將API地址的功能變數名稱的指向切換到生產環境中(網站、admin後臺等等可以直接發佈了),運營人員在蘋果商店點擊上架操作,服務端升級完成(APP端會有強制更新的提示)。當然,這個過程中可能會造成短暫的停機時間,所以一般是選擇在晚上操作。 
4. 提前將安卓最新APK放到我們的下載站或鏡像站,在3步服務端程式等都發佈完成後,在運營後臺開啟安卓版本的強制升級提示(從我們的下載站或者鏡像站下載APK升級)。 
這樣,舊版本的安卓用戶,會強制升級到新的版本,不會影響到使用。 
與此同時,運營人員也需要在各大安卓市場去分發和上架最新的apk包,提供最新的其他渠道下載,避免用戶下載到舊程式,然後又提示強制升級影響體驗。

  • 如果是大改動,資料庫結構和API程式都不相容, 又不想去做強制升級,就會有多版本共存的問題

那就只能去部署兩套(或者更多個版本)資料庫,而且對於用戶產生內容和時效性要求較高的,需要雙向(甚至多向)去做同步。核心問題其實是資料庫有狀態,這種是很困難的。 
這種很容易出問題,容易出現衝突和數據不一致。 
而且數據結構不一樣的情況下,是很難去相容的。

所以,對於改動較大的,產品新增了重量級新功能的,業務層面或者底層表結構上都不相容的,建議是要做強制升級的。

或者:

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包,提供最新的其他渠道下載,避免用戶下載到舊程式,然後又提示強制升級影響體驗。

3.如果是大改動,資料庫結構和API程式都不相容, 
又不想去做強制升級,就會有多版本共存的問題 
那就只能去部署兩套(或者更多個版本)資料庫,而且對於用戶產生內容和時效性要求較高的,需要雙向(甚至多向)去做同步。核心問題其實是資料庫有狀態,這種是很困難的。 
這種很容易出問題,容易出現衝突和數據不一致。 
而且數據結構不一樣的情況下,是很難去相容的。

所以,對於改動較大的,產品新增了重量級新功能的,業務層面或者底層表結構上都不相容的,建議是要做強制升級的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用Eclipse把java文件打包成jar 含有第三方jar庫的jar包   網上打包說用eclipse安裝fat jar插件,但是貌似現在都不能用了,所以我只能按照eclipse自帶的方法打包了。但是。。。網上的各自辦法都有些問題,並且是不包含第三方jar包的打包方法,結合網 ...
  • Introduction To Obejct ___ The progress of abstraction + But their primary abstraction still requires you to think in terms of the structure of the co ...
  • 今日問題: 請問主程式輸出結果是什麼?(點擊以下“【Java每日一題】20161123”查看20161122問題解析) 題目原發佈於公眾號、簡書:【Java每日一題】20161123,【Java每日一題】20161123 ...
  • 記錄最近在項目設計中遇到的一個小問題。 前提:有這樣兩個POJO類,它們都可以通過鏈式調用的方式來設置其屬性值,其中一個類繼承了另一個類。 問題:通過鏈式調用,子類對象訪問父類方法後,如何使返回對象仍是子類對象,仍然可以繼續鏈式調用子類的方法? 結論:子類重寫父類中需要被調用的方法。在子類重寫的方法 ...
  • Python簡介 Python前世今生 Python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程式,作為ABC語言的一種繼承。 註:ABC語言是由Guido參與設計的一種教學語言,是專門為非專... ...
  • 1, 垃圾回收機制僅僅作用於堆記憶體,與棧記憶體無關; 2, 棧:stack 棧的存取速度比堆快,效率高 保存局部變數和對象的引用值 3, 堆:保存較大的變數 4, 編譯器處理int a = 3 時,首先會在棧中創建一個變數為a的引用,然後查找棧中是否存在3這個值,如果不存在,就將3存放進來; 處理b ...
  • 一、什麼是抽象工廠模式 抽象工廠模式的用意為:給客戶端提供一個介面,可以創建多個產品族中的產品對象 ,而且使用抽象工廠模式還要滿足以下條件: 產品族:位於不同產品等級結構中,功能相關聯的產品組成的家族。下麵例子的 汽車和空調就是兩個產品樹, 賓士C200+格力某型號空調就是一個產品族, 同理, 奧迪 ...
  • 接上一篇的工廠方法繼續工廠模式的練習。 先看一下抽象工廠的結構圖 產品族: 在上面的產品列表中呢,有兩個產品族,一個是“具體產品A--1”和”具體產品B--1“組成的一個族, 還有一個是“具體產品A--2”和“具體產品B--2”組成的一個族。 產品族就是在不同產品等級結構中,功能相關聯的產品組成的家 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...