读书人

第一次亲密接触quot;兑现Web平台升级的傻瓜

发布时间: 2012-09-21 15:47:26 作者: rapoo

第一次亲密接触"--实现Web平台升级的傻瓜化

记得自己解决过的最复杂的一个问题就是:通过安装包的方式,为Web平台打补丁或者升级

用户场景:

客户的Web平台在升级的时候,一般是这样:维护人员发布一个补丁包和说明文档。用户按照说明文档进行操作,覆盖服务器上的相关目录下的文件等等(此处省略一千个字)。如果涉及到数据库更新的话,还需要用户手动执行sql更新数据库。

这样的操作非常繁琐,用户一不小心就可能弄错 。所以要求我将补丁包制作成exe(Linux下为sh)的格式,用户只要点击下一步就可以完成所有的操作。

粗略的需求:

下面我来粗略的说一下需求:

    软件要适用于Win平台和Linux平台 自动备份用户的Web平台 更新失败要能够回滚 能够根据选择,自动更新各个常用的数据库,比如oracle,mysql,达梦,金仓等等 出错记录日志 记录补丁安装信息,并且能够进行补丁间依赖关系识别

这些只是我们根据用户的描述,粗略整理出来的。(其实用户最想要的是类似360安全卫士那样的软件,自动给Web平台打补丁或者升级,什么都不用他操心)。

用户的固然想法很好,但是鉴于成本和时间,根本无法完成。

甲方虐我千百遍,我待甲方如初恋。为了尊重用户的意见,只好修改设计文档,规划了三个阶段去实现用户最终想要的那个产品。

一份详细的需求文档,改了八版才审核通过。真不知道人家是真虐着咱玩儿呢,还是时间真的很富裕。有将近一个月的时间,都在写文档。虽然繁琐了一些,不过多亏了这些文档,和用户也好,和测试也好,不会浪费更多的口舌。

附一张升级工作流程图

第一次亲密接触

思路和相关技术问题

这里大概讲一下核心实现的思路,不涉及具体细节了。

关于适用Win平台和Linux平台的问题

Java本来就是跨平台的语言,所以在Win平台和Linux平台都能正常运行,只不过在处理文件路径时,需要区分一下。但是java运行需要JVM,用户的机器上不一定有。这就需要我们自带JRE。两个平台上需要不用的文件来引导,但是思路都是:使用脚本将自带的JRE设置为JavaHome,设置临时ClassPath,引导Java虚拟机到指定目录下加载入口类。

自动备份用户的Web平台

这个实现比较简单,根据用户选择的Web平台所在的目录,使用代码将该目录打包。主要使用到java.util.zip.ZipFile这个类

更新失败后的回滚

Web平台的文件回滚很好办,只要将已经损坏的Web平台目录删除掉,将刚刚备份的文件解包到相应目录即可。

而数据库的回滚比较麻烦,各个数据库需要不同的脚本支持。而且从安全角度出发,也不允许我们自动回滚数据库。所以如果数据库在更新过程中出错,需要用户手动回滚数据库。

自动更新数据库库

软件支持多少种数据库,就需要带多少种数据库的驱动,并且包含相应的Sql脚本文件。这是软件的核心,也是比较困难的地方。不同的数据库有不同的配置界面,怎么保证扩展和灵活呢?

一般的解决思路就是使用配置文件,大致格式如下:

(依赖关系检测示意图)

其余节点则描述了更新的功能清单和补丁对文件的操作。

仿ant功能的实现

PatchCfg.xml上面我们用xml文件描述了补丁安装工具对于文件的操作,不知道你是否看到了ant的影子呢。没错,我基本是按照ant的风格来描述对文件的各种操作。

但是ant运行是需要配置Java环境的,补丁安装工具需要再自带一个ant工具吗,答案是否定的,用户是不会配置JavaHome的。所有的文件操作需要我们自己编写代码来实现,具体可以参考ant的源码,并不难。

细节

此外还有一些技术细节,比如使用代码停止各种Web服务器、日志的输出,使用何种框架来配置工作的步骤 ,限于篇幅就不一一展开了。

有图有真相

附软件最终截图,基本实现了以安装包的形式,为Web平台升级或者打补丁。用户只需要下一步下一步即可。

第一次亲密接触

开始

第一次亲密接触

选择备份目录

第一次亲密接触

选择手动抑或自动更新数据库

第一次亲密接触

数据库配置界面

第一次亲密接触

预安装摘要

文件和思路仅供参考,欢迎有相关需求的朋友留言交流。


原文链接:http://www.67tgb.com/?p=504

欢迎访问:望月听涛

1楼llhhyy19897小时前
文档很重要蛤,我还没写文档哩,加油哈~

读书人网 >Web前端

热点推荐