自动升级是怎样“炼”成的

编程爱好者

前言:读者在日常电脑使用中,一定碰到过RealONE、Windows Update以及许多杀毒软件自动升级的情况,那么在没有用户的参与下这样的自动升级是如何实现的呢?本文就升级技术的分类及主流的主动升级技术做一个整体的讲解,希望能带给读者一个基本的技术框架。

从升级形式看分类

自动升级程序从形式上看分为浏览器/服务器模式(B/S)和客户端/服务器模式(C/S)。其中的B/S模式也就是基于浏览器的方式,依靠去访问一个升级网站来升级,典型的例子是Windows Update和Office Update。而B/S模式的自动升级程序一般以ActiveX脚本实现下载和应用升级包的写操作,也有小部分以Java插件实现。而另一部分则是直接在应用程序中集成一个界面去访问升级服务器,如诺顿安全特警的LiveUpdate,这种程序是直接与服务器建立连接再下载升级包。

早期的自动升级程序更多地是作为升级光盘的一种补充形式,因此它们并不对本地的程序进行任何检测,而是直接从网站上把一模一样的升级包下载下来。用户在取得升级包以后,自行解压并执行升级操作。这种是所谓的无差别升级(Non-distinction upgrade),效率比较低下,浪费了程序中本来不必升级部分的带宽。

现在大部分的软件采取的方式则是将升级包细粒度化,在下载之前检测每一个可能需要升级的文件版本,并仅仅下载和应用真正需要升级的那部分文件。这种方式叫做增量式升级(increment upgrade),它把软件视作一个充满增长点的生命体,每当有一个组件或数据文件有了更新的版本,就可以将这部分升级至最新而保持整个软件的协同,这是软件组件化带来的成果之一。

升级包的变迁

从升级包的角度来看,不同的软件在升级时也有不同之处。有些软件不能够直接升级到最新的版本。而是必须升级到一个较新的版本,再从这样的版本升级到最新版本。而有些软件则可以直接升级到最新的版本,而不必有一个过渡。比如Office 2000就不可以直接升级到SP3,但Office XP就可以直接升级到SP3。必须有过渡的升级,叫做渐进式升级(progressive upgrade),在有些场合下这是必要的。这也是为什么有些软件只进行一次升级是不够的,要反复升级直至不再有增量,特别是对防病毒软件更是如此。

主动升级技术

有些软件会有一个组件常驻内存,定时检查服务器上是否有升级需求,这就是现在流行的所谓主动升级(active upgrade),RealONE应该是个典型的例子。而另一些软件则非要最终用户主动地启动升级,这是所谓被动升级(passive upgrade)。现代的自动升级程序往往还提供了后台升级(background upgrade)的便利功能,也就是在每次系统启动或是按照计划表中时间触发时,它作为后台服务在最终用户未察觉的情况下将升级任务完成,这样就免除了低阶用户手动升级的麻烦。但对于窄带用户而言,后台升级往往会占用大部分带宽,使得用户误以为是网络出了问题。所以,如果可用带宽很小,建议用户将后台升级的功能关闭。