客户端升级系统升级策略

我们项目组的客户端多达20余种,两年前为这些客户端写了一个升级模块,但是不够强悍。去年年中重新做了一个客户端灰度升级系统,一个独立的系统专门为客户端升级提供服务。现在分享下这个新系统的升级策略。

 发布版

    每种类型的客户端有且仅有一个对外发布版。版本号比发布版低的客户端都要升级到发布版。在客户端层面的升级形式有两种,登录升级和使用中升级。

1.登录升级

    登录前提示升级,一般是比较重要的升级方式才会配成登录升级。用户当然可以取消升级,但是如果旧版本配的是强制升级,那么登录升级就不会展示“取消”按钮。这个是系统的后门,防止有重大问题的客户端被使用。一旦出现这种情况,这个功能将是一根救命稻草。(我们线上某个版本的移动端3天内耗了用户4G流量,可惜它没有接入这个系统)

2.使用中升级

    如果提供了补丁包,那么升级将在后台静悄悄的发生,用户不会感知到升级过程。如果提供的只有全量包,那么新包下载好后,下次重启时将会安装发布版。
 

    为了灵活控制对外发布版的升级,发布版可以按百分比升级,按用户名升级,或者全量升级。

 
用webservice作为更新服务器
C/S自动更新原理
 

 C/S程序自动升级是一个很重要的功能,原理其实很简单,一般包含两个程序一个是主程序,也就是除了升级功能以外的程序,另一个就是升级程序,常见的360,金山安全卫士都是这样。

 主要包括以下几点:   1 比较版本  2下载文件  3更新文件 4启动主程序。但其中的需要注意的细节很多。 

一般服务端会有一个配置文件包含最新更新的文件信息的配置文件,当然这些更新信息也可以存到数据库,或者其他地方。客户端(也就是需要更新的那部分程序)也有一个配置文件包含客户端版本信息,这些信息可以存到专门的一个配置文件中,或者是config文件中,没有一定的规定,可以根据实际设计。

 (1)在客户端程序启动时,先启动更新程序通过比较本地版本和服务端最新的版本信息判断是否有新版本,如果有可以直接下载,下载完成替换成功后并更新客户端版本信息,启动主程序。

            缺点:如果更新速度由于更新的文件很大或者网速很慢,用户不得不等待很长时间,直到下载完成或者下载失败。

            优点:处理完成后,启动的直接就是更新后的程序。不会出现由于主程序在运行导致替换文件时提示文件在使用,不能替换之类的错误。

 (2)另一种方法是, 在客户端段程序启动时,启动更新程序,但更新程序不做版本判断,到客户端更新目录下检查有没有下载的新版本,如果有就更新主程序并更新客户端版本信息,然后启动主程序,如果没有就直接启动主程序。由主程序判断是否有新版本,并在后台下载把文件放到客户端更新目录中,下载完成后,提示用户退出主程序,重新启动,在启动时由更新程序并更新客户端和客户端版本信息。    

            缺点:由于下载是在主程序的后台运行,可能会影响主程序的处理速度。

            优点:避免了由于下载导致用户长时间的等待。

 
 
 
 

猜你喜欢

转载自www.cnblogs.com/wuxiaohua/p/9481556.html