统软件升级模式的弊端
在传统的C/S软件中存在软件升级,也就是客户端从服务器端下载最新的软件文件,以后就可以运行最新版本了。这种模式应用广泛,简单可靠。
但在实践当中,新版客户端软件由于各种原因导致程序错误,使得新版本下线而回滚到旧版本,甚至伴随服务器软件也版本回滚,这种情况并不少见。此时客户端升级反而带来麻烦,甚至酿成生产责任事故。
有些人采用部分终端升级客户端软件的办法,发布新版本时,只在少数几台终端上升级客户端软件,大多数终端不升级,当安全度过试用期后再逐渐扩大升级范围。不过这样运维管理复杂。另外存在新旧多版本的客户端软件同时访问相同的Web服务端程序的情况,容易发生新旧兼容性的问题,让运维人员陷入两难境地。此时系统架构如下图所示:
在此图中,如果新版客户端程序传输的数据新增了数据项目,或者修改了数据项目的含义或次序,旧版服务器端软件无法识别,很容易报错。服务器端软件返回的数据包含了新版程序已经废弃的数据项目,则新版客户端软件也很容易报错。
对于通用软件产品,比如QQ、微信客户端软件,保持新旧版本的兼容性是很重要的。但对于项目型软件来说,新旧版本的兼容性不是核心业务功能,应该少考虑或者不考虑。但在上述的运行环境下却是不得不考虑的问题,这浪费了开发组织的精力,降低了开发绩效,增加了开发难度。
反向升级技术方案
为了解决这个问题。我们提出了软件的反向升级技术方案。也就是从客户端出发自动更新服务器端程序,让Web服务器端同时运行多个版本的服务器软件。旧客户端调用旧版本的服务器端软件,新客户端调用新版本的服务器端软件。这样避免了新旧兼容性问题,提高了新版本的稳定性,降低了运维难度。让新旧程序能比较平稳的过渡,新版即使爆发问题也能有效限制影响范围。其原理如下:
在这个架构中,客户端软件和服务器端软件的版本是一一对应的,不存在兼容性问题。使得开发组织无需关注新旧兼容性这种对业务无关的问题。避免开发资源的浪费。
反向升级的实现方式
软件的反向升级技术方案是在我们此前的“断骨增高”的透明代理的技术方案上运行的。在“断骨增高”方案中,一个软件的“上半身”运行在客户端,“下半身”运行在服务器端。据此实现反向升级的步骤如下:
1.透明代理客户端发送任何数据包时都会附带客户端软件版本号。
2.透明代理服务端会检测客户端的版本号,然后查找对应版本的应用程序域(.NET中的System.AppDomain类型),如果找到程序域就跨域调用程序域中的功能模块。
3.当客户端程序更新后,透明代理服务器端就发现服务器端不存在对应版本的应用程序域,于是取消当前的透明代理操作,同时请求透明代理客户端要上传程序文件。
4.透明代理客户端接受到服务器端的上传请求后将程序文件打包上传。
5.透明代理服务器端接受到打包文件后解压缩放在特定的文件目录下,创建新的应用程序域加载新版的程序,让新版软件在服务器端处于待命状态,然后通知客户端。
6.透明代理客户端得知服务器端的新版程序可用了,于是重新启动上次被服务器端取消的远程调用操作,进行后续处理。
在整个操作过程中,客户端的上层模块是完全不知情的,最多是感觉到底层调用耗时多了些而已。而服务器端已经悄悄获得了新版程序,并上线了。而且由于服务器端的旧版程序并不会下线,旧版的客户端程序仍然能正常使用。
由于客户端和服务器端的程序版本完全一样,避免了兼容性问题,大大提高了系统的稳定性,同时降低了开发环境和生产环境的差异,方便调试排错。
此时服务器将运行一个软件的多个版本,各个版本之间不影响。而且当服务器端软件的某个版本长期不被调用,比如10天都没人调用,可以认为是被废弃的版本而自动停用来释放资源;管理员也可以使用管理工具强制某个版本停用。但是万一有个旧版本的客户端启动而发出远程调用请求时,由于程序文件仍然存在,透明代理服务器端仍然可以启动对应的旧版本软件,让旧版的软件仍然能正常运行。
这样从用户的角度看,所有的历史版本都是随时可用的,遇到新版报错就有退路了。而对于现场开发和维护人员来说,所有的版本都是相互独立运行的,没有版本之间的兼容性问题,可以放心大胆地调试和更新软件。对于实施人员来说,部署、更新客户端程序文件就能完成大部分工作,简单方便易懂,降低对实施人员的要求。而对于服务器来说,资源消耗增加不大,硬件成本的增加不足挂齿,因此皆大欢喜。
这里特别说明一下实施人员。一个软件公司里,一线实施人员的人数占比很大,技术水平比较低,他们大多保留着传统C/S软件模式思想,想显著提升实施人员的技术水平成本高、时间长。采用断骨增高和反向升级等技术,使得软件在采用新架构的同时还降低了对实施技术水平的要求,简单的复制粘贴就能完成软件更新,提高了实施人员的工作效率,节省出来的成本就是公司的利润。
【小结】
在HIT软件生命周期中,驻场开发和实施占据很大的一部分,大量的项目由于超期的驻场而亏损,一些生产责任事故也是由于新旧软件替换而造成的。而软件的反向升级技术方案能避免一些生产责任事故的发生,提高驻场开发实施效率,进而缩短时间,减少和避免亏损。
我们都昌公司将软件反向升级技术进行产品化,封装到都昌快速开发支撑平台(都昌赋能框架)中,这样让各种开发组织可以方便快捷地享用这种技术便利,快速练成“乾坤大挪移”,快速提升生产力。最终帮助实现开发组织和用户的利益最大化。