没有合适的资源?快使用搜索试试~ 我知道了~
动态软件更新在生产和实时编程环境中的应用
订单编号他们是这是一个很好的例子。博士学科:计算机科学由巴勃罗·特松里尔大学校长办公室,动态软件更新用于生产和实时编程环境2018年17月17日由VANT e xamen评审团提交PR居民:Elisa Gonzalez布鲁塞尔自由大学报告员:克里斯托弗·托尼·奥斯卡·尼尔斯教授检查员:Elisa Gonzalez Boix布鲁塞尔自由大学这是一个很好的例子。 斯蒂芬·杜卡斯吕克·法布雷斯研究总监共同监督员:吉列尔莫·波利托来自Recherche- CNRS的工程师InviTes:法比安·达尼亚·努里·博拉卡迪会议SPI 072博士学校(里尔I、里尔III、阿图瓦、ULCO、UVHC、里尔中心、IMT里尔杜埃)版权所有©2018 by Pablo Tesone本作品根据Creative Com-mons3.0 未移植确认文件我要感谢我的论文导师Stéphane Ducasse和Luc Fab- rese对我的持续支持和指导。也感谢RMoD和CAR团队的持续支持和帮助。我非常感谢吉列尔莫·波利托的助手。我感谢论文评审员和陪审团成员Elisa Gonzalez、Oscar Nierstrasz、Christophe Dony、Fabien Dagnat和Noury Bouraqadi同意成为我辩护的陪审团成员。我 特 别 感 谢 Santiago 、 Esteban 、 Nicolás 、 Debora 、 Charlotte 、Matias、Paola、Angela和Flavie,我的家人支持我远离家乡,以及所有在我写这篇论文期间支持我的人。我也要感谢Pharo社区在我学习期间的支持和帮助。我希望这篇论文的一部分对他们有价值。摘要在运行时更新应用程序既用于生产中以最大限度地减少应用程序停机时间,也用于集成开发环境中以提供实时编程支持。尽管如此,这两种情况提出了不同的挑战,使动态软件更新(DSU)解决方案专门为其中一种用例设计。例如,用于实时编程的DSU通常不简单地执行安全点检测或实例迁移,而生产的DSU需要手动生成补丁和缺乏IDE集成。这些解决方案更新自身或核心语言库的能力也有限,其中一些解决方案会在更新窗口之外执行在这个博士学位中,我们提出了一个统一的DSU,称为gDSU,用于实时编程和生产环境。gDSU使用调用堆栈操作和可重复使用的实例迁移机制提供安全的更新点检测,以最大限度地减少补丁生成中的手动干预它还支持更新核心语言库,因为更新机制本身感谢其对修改对象的增量复制及其原子提交操作。gDSU不会影响应用程序的整体性能,它只会在更新窗口期间产生运行时惩罚。例如,gDSU能够在1秒内应用影响100,000个实例的更新,使应用程序仅在250毫秒内无响应。其余时间,应用程序正常运行,同时gDSU正在寻找将复制修改元素的安全更新点。我们还介绍了gDSU的扩展,以支持事务性实时编程和原子自动重构,从而提高实时编程环境的可用关键词:动态软件更新、实时编程、长运行应用程序、事务性修改、自动重构。摘要在运行时更新应用程序既用于生产环境中以减少应用程序停机时间,然而,这两种情况提出了不同的挑战,使得现有的动态软件更新(DSU)解决方案例如,用于交互式编程的DSU通常不支持自动更新安全点检测或实例迁移,而用于生产的DSU需要手动生成所有更改,现有的解决方案更新自身或更新语言核心库的能力也有限;其中一些解决方案在本文中,我们提出了一个统一的DSU(称为gDSU),它既适用于交互式编程,也适用于生产环境gDSU允许通过扫描和操作运行时堆栈gDSU还支持更新语言的核心库和更新机制本身。这是通过对要修改的对象进行增量复制并对这些更改进行原子应用来实现的。gDSU例如,gDSU能够在1秒内将更新应用于100,000个在此期间,应用程序仅在250毫秒内无响应。其余时间,我们还介绍了gDSU的两个扩展,以更好地支持IDE中的交互式开发:交互式事务编程和重构关键词动态更新、交互式编程、长时间运行的应用程序、事务更改、代码内容。1引言11.1上下文11.1.1实时编程环境11.1.2DSU解决方案21.1.3自动重构31.1.4反思性语言31.1.5DSU情景及其挑战41.2问题陈述51.3捐款61.4论文大纲71.4.1第一部分:最新技术71.4.2第二部分:生产用71.4.3第三部分:用于实时编程的DSU1.4.4第五部分:结论8最先进技术水平92比较现有解决方案112.1DSU11的要求2.1.1变革挑战插图112.1.2DSU实际问题142.1.3状态不一致2.1.4改变相互依赖性152.1.5竞争和执行不一致162.1.6性能162.1.7易于使用172.1.8多功能性172.1.9一般DSU18的要求2.2现有DSU解决方案192.2.1DUSC202.2.2Jvolve212.2.3DCEVM212.2.4DuSTM212.2.5JRebel222.2.6标枪222.2.7Javadaptor232.2.8鲁巴232.2.9Pymoult232.3现有解决方案的类别242.3.1经典实时编程环境242.3.2生产DSU252.3.3开发DSU252.4相关技术272.4.1安全点检测27八、内容2.4.2迁移逻辑第27代2.4.3基准测试和验证282.4.4建筑解决方案282.4.5隔离和原子性282.5现有解决方案的分析29用于生产的DSU313gDSU33的设计原则3.1Nutshell中的gDSU333.2修补程序内容353.3第35代补丁程序3.4动态补丁分析363.5线程管理和安全点检测3.6环境副本393.7更改和实例迁移403.8变更的确认和提交413.9gDSU平台要求433.10 结论444高效gDSU45的设计技术4.1自动安全更新点检测454.2原始环境的高效部分副本494.2.1修改类别的检测504.2.2检测要迁移504.3可重复使用实例状态迁移514.4可重复使用的确认524.5批量实例替换544.6可扩展课堂建设过程554.7结论575生产相关要求的gDSU验证595.1验证设置605.2验证1:应用程序更新615.3确认2:DSU62的更新5.4验证3:更新语言核心库625.5验证4:基准635.6需求评估655.7结论66III实时环境696原子态保存重构716.1中断实例的类重构726.1.1重构的挑战:重构损坏的两个示例6.1.2重构影响类别756.1.3问题的普遍性内容IX6.2我们的解决方案:用于实时编程的原子重构。 . ...6.3在应用重构时保留实例状态77GDSU。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...806.3.1上拉实例变量 . . . . . . . . . . . . . . . . ...803.2拆分类重构。 . . . . . . . . . . . . . . . . . ...816.4使用gDSU保存实例状态 . . . . . . . . . . . . ...826.5逐步重构的应用 . . . . . . . . . . ...836.6验证 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...866.6.1验证1:无损坏的重构 . . . ...866.6.2验证2:具有内部损坏的重构。...876.6.3验证3:具有复杂损坏的重构886.7结论。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...897状态感知事务实时编程917.1更改损坏的实例。 . . . . . . . . . . . . . . . . . ...927.2交易变更。 . . . . . . . . . . . . . . . . . . . . . ...957.3实施PTm。 . . . . . . . . . . . . . . . . . . . . . . . ...967.1范围环境。 . . . . . . . . . . . . . . . . . . ...967.3.2全球状况 . . . . . . . . . . . . . . . . . . . . . . . . ...977.3.3状态冲突检测。 . . . . . . . . . . . . . . . . ...987.3.4实施变更 . . . . . . . . . . . . . . . . . . . . ...987.3.5状态迁移。 . . . . . . . . . . . . . . . . . . . . . ...987.3.6中止交易。 . . . . . . . . . . . . . . . ...997.4使用PTm安全地应用更改。 . . . . . . . . . . . . . . ...997.4.1交易变更。 . . . . . . . . . . . . . . . . . ...997.4.2自定义迁移 . . . . . . . . . . . . . . . . . . . . ... 1007.5事务性变更验证。 . . . . . . . . . . . . ... 1017.5.1验证1:手动重构 . . . . . . . . . . . ... 1017.5.2验证2:检测自定义迁移需求。 1027.6设计决策 . . . . . . . . . . . . . . . . . . . . . . . . . ... 1037.7要求评估。 . . . . . . . . . . . . . . . . . . . ... 1057.8结论。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... 106四结论1098结论1118.1捐款1128.1.1gDSU及其技术1128.1.2原子自动重构1138.1.3状态感知事务实时编程1138.2未来工作1148.2.1分布式DSU1148.2.2隔离和虚拟化1148.2.3变化分析1148.2.4语言进化1158.2.5开发经验115参考文献117x内容已发表论文127A.1期刊127A.2会议127A.3研讨会127B复制验证和基准的129B.1安装129B.2执行验证130B.2.1准备130B.2.2运行验证131B.3执行基准133B.3.1内存消耗133B.3.2服务器响应时间133C 自动重构的详细分析135C.1无损坏的重构135C.2使用复杂损坏进行137C.3使用类损坏进行138C.4使用内部损坏进行图列表2.1正在运行的渲染应用程序的窗口......................................................... 122.2使用笛卡尔坐标的版本122.3使用球面坐标的版本122.4由DUSC执行的静态转换,以启用类的动态更新。..........................203.1应用原子更新的步骤343.2可重复使用迁移策略:它按名称迁移所有可变的实例值。它在变量实例时使用订单变更。..................................................................... 363.3更新窗口38期间的线程管理3.4迁移策略接口403.5手册迁移示例413.6作为对象的验证413.7验证所有类都有自己的包,并且包-年龄包括42级3.8验证所有学生是否具备所需信息。424.1修改了用于检测安全更新点的调用堆栈474.2需要安全点检测的484.3如果在修补程序中更新了此方法,则不允许程序到达安全更新点的编程模式示例。..................................................................................... 494.4更新引入了业务逻辑更改的实例迁移。............................................. 514.5迁移策略接口514.6按名称迁移实例变量:应用程序示例独立变更524.7迁移Vector3D:应用程序相关更改的示例........................................ 534.8此验证用于确保正确迁移Vector3D从一个坐标系到另一个坐标系4.9类构建和安装过程554.10 ShiftBuilder增强器565.1原创设计。所有消息都是单个ChatMessage类的实例。此实现具有处理来自系统的消息中的差异的条件代码来自用户。............................................................................................. 615.2对应用程序进行重构,将消息中的不同行为提取为两个子类(InfoMessage和UserMes-sage),以表示系统和用户发送的消息。用户615.3对内存空间和执行时间的影响取决于要迁移的实例数。.................. 63xii图列表5.4响应时间仅在短时间内受简报影响。日期窗口646.1逐步将拉取实例变量refac-toring应用于学生和教师类中存在的idNumber实例变量。.............................................................................746.2拆分类重构会损坏其实例。................................................................. 756.3原子重构过程。..................................................................................... 796.4重构前的状态836.5创建新环境846.6对类的所有更改都已应用846.7已迁移实时实例866.8新环境取代旧环境866.9在应用保护变量重构之前。................................................................. 876.10 在应用保护变量重构之后。................................................................. 876.11 在应用提取变量重构之前。................................................................. 886.12 在应用提取变量重构之后。................................................................. 886.13 在应用拆分类重构之前。..................................................................... 896.14 在应用拆分类重构之后。..................................................................... 897.1逐步将拉取实例变量refac-toring应用于学生和教师类中存在的idNumber实例变量。.............................................................................937.2需要迁移具有cus的实例的更改示例汤姆逻辑。............................................................................................. 947.3解决方案95概述7.4执行更改前的状态1027.5执行更改后的状态1027.6需要自定义迁移的更改103表列表1.1 DSU如何应对不同的挑战。......................................................................52.1DSU问题和关注点的需求映射182.2要求与 DSU类别.................................................................................... 295.1gDSU与 生产DSU................................................................................. 666.1现有重构引擎的分析................................................................................. 787.1 gDSU与开发DSU实时编程环境107B.1更新REST条目点134查普特 1介绍CT I内容。1.1上下文11.2问题陈述51.3捐款61.4论文大纲71.1上下文软件需要不断发展,以跟上现实世界应用程序的需求,否则它将过时[LB85,DDN02]。在整个软件生命周期中,大部分工作都花在维护阶段,包括使现有软件适应新的要求[西丝+05,KLT03]。这种演进的示例包括:添加新功能、提高性能、修复错误和安全故障。在下面的章节中,我们将介绍在应用程序的开发和维护阶段使用的不同工具。这些工具提高了开发人员的工作效率,并最大限度地减少了在这些阶段花费的工作量1.1.1实时编程环境实 时 编 程 环 境 [San78] , 如 Lisp [Ste90] 、Smalltalk[GR83] 或Javascript[Dav06],允许开发人员在程序运行时修改代码。如果我们将实时编程与编辑-编译-调试过程进行比较,它会缩短开发周期。实时编程提供了开发人员和程序之间的连续交互流[BFdH+13,Han03]。这种连续的交互流为行为驱动应用程序的开发提供了一个很好的框架[BFL+14,CF17,Lim14,AS14]。实时实例以面向对象的编程语言表示应用程序的状态。实时编程环境允许通过操纵实时实例来控制运行程序的状态[CNSG15]。现有的实时编程工具允许热更新运行代码,如果类更改,则修改实时实例的结构。在代码修改期间,程序仍在运行。运行应用程序的用户是程序员本身或其他用户(例如, Web应用程序仍在使用中实时编程环境对迁移运行的AP的支持有限从一个版本复制到另一个版本。目前的解决方案是脆弱的,因为它们主要涉及以非原子方式一次性应用修改。当按顺序应用相互依赖的更改时,这对于正在运行的应用程序的稳定性和一致性来说甚至更加脆弱。当前的DSU解决方案对于生产或开发来说太具体了场景。有一个通用DSU缺乏。此缺陷限制了工具的可用性。2第1章。简介实时编程会话期间的内容。程序员修改应用程序,调试它,并重新执行应用程序的不同部分,而不需要重新启动整个应用程序。实时编程的使用并不局限于Smalltalk或Lisp环境。如今,有各种各样的努力将实时编程功能集成到专业编程环境和语言中,如Java [WWS10,Zer12 , PKI+13] 、 Python [MDB15] 和 Javascript [nod , fir , chr ,ORH02]。这种将实时编程整合到专业IDE中的新尝试表明,人们对实时编程的好处越来越感兴趣[BFdH+13,McD07,Tan90,Shn83]。1.1.2DSU解决方案动态软件更新(DSU)[HN05,PH13]引擎是一种工具,用于在运行时管理软件从版本1到版本2的迁移它的基本想法是将停止、安装、重新启动周期变成一个简单的更新操作[PDF+15]。DSU引擎执行这样的迁移,最大限度地减少停机时间,并确保软件将继续按预期工作。DSU解决方案(目前称为DSU)通常用于两种情况:生产DSU旨在更新长期运行的应用程序,例如,Web应用程序服务器;开发DSU集成在开发环境中以提供实时编程支持。这些方案中的每一个都提出了不同的要求,使现有的解决方案只针对其中一个方案。例如,生产DSU需要更安全的guaran-tees,而开发DSU需要增量更新和IDE集成。没有单一的DSU工具会限制使用DSU解决方案的优势。开发人员需要在两种情况下使用具有不同要求的不同工具。在开发场景中使用工具的专业知识不适用于在生产中更新应用程序。自动重构工具不能保证保留实时实例的在应用更改之后1.1. 背景31.1.3自动重构重构是帮助开发人员改进应用程序设计的行为保留操作[F ow99,RBJ97,DHL96]。Refac- torings修改了应用程序的实现,使其保持其特性。此实现更改提高了代码的质量[RBJ97,Rob99]。如今,重构工具出现在行业中使用的大多数集成开发环境(IDE)中[MT04],但具有不同程度的重构支持。重构由前条件和后条件组成,就像一组有序的基本步骤。每一步都会修改类和方法。这些更改由IDE自动执行。自动重构是程序员用来提高代码质量的日常工具[KZN12,XS06,DJ05,KZN14,BDLDP+15]。1.1.4反思性语言反思性语言具有推理和反应的能力 它[87]。 有两种不同形式的反思性访问:结构性和行为性[MDC92,MJD96]。第一种形式询问程序的静态结构,第二种形式询问程序的动态运行。如果系统能够修改其程序结构或运行时,则对系统的反射能力进行分类内省是获取反思性信息的能力,而代祷是修改程序的能力。在运行时更新运行中的应用程序需要不同程度的这些功能。系统的反射能力限制了更新解决方案更新在这样的系统中运行的给定应用程序的能力。具有元对象协议的反射系统。Meta-Object Pro- tocol是用于访问和修改反射系统的一组消息和操作[KdRB 91]。 该协议提供了一组一级公民对象来访问程序的结构及其执行。反思性语言分为两个层次:• 第一级包括作为运行应用程序一部分的所有对象和类(它们描述正在执行的业务逻辑)。反思性语言在可应用的为了他们自己。它们的设计目的不是以原子的方式应用更改,从而限制核心语言和反射工具的可更新性级别[PDFB15,PDF+15]。4第1章。简介• 第二层包括一组描述正在运行的应用程序的对象和类(它们描述了第一层中的类),这些对象称为元对象和元类。在程序执行期间,这两组对象都是可访问和可操作的反射性语言为对象、类、元对象和元类提供了一个通用的环境环境是一组对象、类和引用,它们可以相互访问和交互。此外,反射性语言对程序中使用的概念(如类、方法和调用堆栈条目)进行了重新定义[Riv96a]。1.1.5DSU情景及其挑战在不需要重新启动的情况下更新应用程序应确保所有更改都已执行,并且正在运行的应用程序的状态不会更改。在面向对象的应用程序的范围内,应用程序的状态由环境中的实时实例形成。保证OOP中的应用程序阳离子状态意味着从一个版本到另一个版本应该保留实时实例动态更新应用程序在两个不同的场景中执行:开发期间的实时编程(开发DSU)和更新长期运行的应用程序(生产DSU)。两种DSUs都面临着下面列出的挑战。然而,每个DSU家族都提出了不同的方法来解决这些挑战。不同的方法侧重于改善其中一种目标情景的结果• 国家移民。在版本之间迁移应用程序的状态不是一项微不足道的任务。一方面,它需要一种用新价值取代旧价值的技术(例如,指针交换、延迟代理。另一方面,它需要一种表达值转换的方法,这些值转换通常依赖于应用程序,不能自动生成需要迁移状态以最大限度地减少实例损坏。如果在更改其结构或用途后,未更新以遵循所需的新结构或用途[TPF+16],则实时实例已损坏
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功