论文部分内容阅读
软件系统投入运行之后,还常需不断更新以修正错误、增强功能、适应环境和需求的变化。传统的方式需要先关闭系统再重新部署才能实现软件的更新。但频繁重启系统可能会带来不必要的麻烦和开销。对于关键任务系统,服务的中断还可能会导致严重的后果。动态软件更新不关闭系统,在运行过程中实现对软件程序的更新。较之离线更新,动态软件更新面临更大的技术挑战,其主要困难是要兼顾技术的灵活性、一致性保障、高效性以及易用性等。当前,已有一系列动态软件更新方面的工作,但它们主要关注各自特定的技术实现,而缺乏在实际应用场景下如何选择使用各种技术的系统方案。尤其是,动态软件更新主要应用于需要长时间运行的服务器系统,而现代服务器系统通常是包含了程序设计语言层、中间件层和业务逻辑层等的多层系统。此类系统的更新不但会涉及业务逻辑层,也会涉及到中间件层。本文以此类软件系统的动态更新需求为目标,系统地综述并比较既有的动态软件更新技术的相关研究,进而通过一组实验,较全面地评估各种既有技术的动态更新能力和性能,以此作为动态更新实际应用的系统方案的基础,并为动态软件更新技术的进一步研究提示方向。具体而言,本文的工作包括:1)提出了一种动态更新技术的比较框架。基于对动态软件更新的技术特征的分析,给出更新技术的一致性保障、灵活性、可执行性、状态迁移性、高效性、对开发人员的透明性和并发性等一系列指标作为比较的依据。并通过对基于中间件的软件系统之动态更新的可能途径的讨论,将既有技术分为从应用程序自身动态更新、中间件支持的应用程序动态更新、虚拟机支持的程序动态更新三类。2)基于上述比较框架,对现有动态更新技术DUSC、JBoss热部署、HotSpot JVM、DCE VM、JRebel、JVolve、JDUS等进行系统的综述和比较分析,并对其可用性进行讨论。3)设计了一组实验,对各个动态更新技术进行功能和性能测试。首先通过一组独立实验来验证各种技术的一致性、灵活性、可执行性、状态迁移性、可移植性和并发性等。进而,选择具有典型意义的第三方基准程序DayTrader,对相关动态更新技术进行性能实验和比较分析。最后,基于上述综述和实验,对动态更新的技术选择和应用考虑给出一系列建议。