做过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程序都不兼容, 
又不想去做强制升级,就会有多版本共存的问题 
那就只能去部署两套(或者更多个版本)数据库,而且对于用户产生内容和时效性要求较高的,需要双向(甚至多向)去做同步。核心问题其实是数据库有状态,这种是很困难的。 
这种很容易出问题,容易出现冲突和数据不一致。 
而且数据结构不一样的情况下,是很难去兼容的。

所以,对于改动较大的,产品新增了重量级新功能的,业务层面或者底层表结构上都不兼容的,建议是要做强制升级的。

APP多版本共存,服务端如何兼容?的更多相关文章

  1. IOS IAP APP内支付 Java服务端代码

    IOS IAP APP内支付 Java服务端代码   场景:作为后台需要为app提供服务,在ios中,app内进行支付购买时需要进行二次验证. 基础:可以参考上一篇转载的博文In-App Purcha ...

  2. 关于kafka客户端版本与服务端版本不一致导致的一次坑

    上周开发了一个功能,需要使用kafka接上游数据并入库,本地开发时,自己安装了一个kafka服务,开发测试时使用本地的kafka服务给主题发消息,然后在自己本地的代码中进行调试.使用的kafka版本如 ...

  3. 基于fiddler的APP抓包及服务端模拟

    在HTTP接口的测试过程中,一般我们会按照如下的步骤进行: 1)测试环境的准备 2)HTTP消息体的构造 3)HTTP消息的发送及断言 如果我们可以拿到项目组的接口文档,并且HTTP后台服务是可以工作 ...

  4. app支付宝支付java服务端代码

    app支付java服务端生成支付单文档 public String aliPay(String amount,Map<String,Object> body){ //实例化客户端 Alip ...

  5. [转]基于fiddler的APP抓包及服务端模拟

    在HTTP接口的测试过程中,一般我们会按照如下的步骤进行: 1)测试环境的准备 2)HTTP消息体的构造 3)HTTP消息的发送及断言 如果我们可以拿到项目组的接口文档,并且HTTP后台服务是可以工作 ...

  6. app集成微信支付服务端代码-php版本

    1.微信支付分为两种,一种是微信公众品台的微信支付,另一种是微信开放平台的微信支付 2.上周做的是开放品台的微信支付,把遇到的问题总结一下 第一,下载官方提供的代码,解压后放到根目录下,然后认真读文档 ...

  7. EasyDarwin开源流媒体服务器Golang版本:服务端录像功能发布

    EasyDarwin开源流媒体服务器(www.easydarwin.org)现在使用Go版本实现了.最新的代码提交,已经支持了推流(或者拉流)的同时进行本地存储. 本地存储的原理,是在推流的同时启动f ...

  8. Tuxedo低版本客户端(Tuxedo 9)连接到高版本Tuxedo服务端(Tuxedo 12.1.3)的问题

    经过我实测,是没问题的.但是客户端的Tuxedo DLL必须全部是Tuxedo 9的DLL,不能混用.不然即使用Dependency Walker 分析DLL依赖完全正确,但是实际运行时结果也会出现奇 ...

  9. Netbackup8.0以上版本,服务端生成证书,客户端获取、更新证书方式(整理中)

    创建重发令牌 如果非主控主机已在主服务器上注册但其基于主机ID的证书不再有效,则可以重新颁发基于主机ID的证书.例如,证书在过期,被撤销或丢失时无效. 重发令牌是一种可用于重新颁发证书的令牌.它是一种 ...

随机推荐

  1. PHP搭建大文件切割分块上传功能

    背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...

  2. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

  3. 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事

    WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ...

  4. MyBatis源码分析(一)开篇

    源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...

  5. NSStringCompareOptions

    typedefNS_OPTIONS(NSUInteger, NSStringCompareOptions) { NSCaseInsensitiveSearch = 1,    //不区分大小写比较 N ...

  6. [OC] NSURLSession

    有的程序员老了,还没听过NSURLSession 有的程序员还嫩,没用过NSURLConnection 有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSUR ...

  7. nexus 社区版3.0.2部署、访问

    下载nexus社区办(oss): https://www.sonatype.com/download-oss-sonatype 目前最新版本  nexus-3.0.2-02-win64.zip nex ...

  8. CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍

    前言: 自从CYQ.Data框架出了数据库读写分离.分布式缓存MemCache.自动缓存等大功能之后,就进入了频繁的细节打磨优化阶段. 从以下的更新列表就可以看出来了,3个月更新了100条次功能: 3 ...

  9. 深入理解jQuery、Angular、node中的Promise

    最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供 ...

  10. DOM对象模型接口规范中的四个基本接口

    DOM对象模型的四个基本接口 在DOM对象模型接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap.在这四个基本接口中,Document接口是对文档进 ...