小研究 - 面向 Spring 的热点代码在线部署方法研究(三)

news2024/9/20 18:17:38

随着Spring生态不断发展,越来越先进的部署方式降低了部署的复杂度,提高了不同环境下的部署效率,但是在预生产环境下,对频繁改动的热点代码,其部署效率不是很理想,一些简单的代码修改就会引发对所有依赖服务的重新编译部署,给项目部署、运维以及测试带来很多预期之外的影响。在线部署机制针对这个问题进行了改进,该机制使用自定义注解作为与外部应用通信的桥梁,使在线部署模块独立于外部应用。热点代码在编辑完成后注入到在线部署模块,进而完成其热点功能在预生产环境的在线部署。实验表明,相对于重新编译部署,该部署机制对原有代码侵入影响较小,减少了反复部署应用以及不同部门协调合作造成的时间浪费并提升了系统的部署效率,且成功应用于新型智慧城市评估系统的热点代码模块。研究结果将为迭代开发以及高效部署提供设计思路与技术支撑。

目录

4 性能测试与分析

4.1 实验环境

4.2 评价标准

4.3 实验结果

5 系统应用

6 结束语


4 性能测试与分析
4.1 实验环境

实验的硬件环境是Intel ( R) Corn ( TM ) i7 - 7700HQ CPU @ 2. 8 Hz 2. 81 GHz,内存为 8 GB,软件 环境为windows tomcat idea2022。

实验在Spring官网下生成空白的项目,添加相应的功能构建不同复杂度的系统,以便对比不同部署方式的部署效率。

4.2 评价标准

为了评估应用在不同软件复杂度下的在线部署方法与重新编译部署方法的效率,采用不同维度下的软件复杂度进行实验,衡量软件复杂度的常用度量方法, 包括代码行数度量法和Halstead度量法。其具体构建如下:

        代码行数度量法在空白项目中写入100行代码形成一个请求单元,标识系统拥有100的复杂度,将代码请求单元扩增至10个请求单元,可以使代码行数复杂度增加 10 倍,变为 1000 的复杂度。同理,使用 Halstead 度量法构建不同复杂度的项目,向空白项目中写入定义好的度量单位为100的模块,以此为模板扩增,与代码行数复杂度一致,分别增加至10000和100000的复杂度。

度量单个单元复杂度的Halstead公式 :

        Mcount = 0. 05(N + N1 )

其中,N为程序词汇表的长度,N1为程序长度,为了与代码行数度量法的对比更加直观,设定了0. 05的系数。

4.3 实验结果

对重新编译部署与在线部署两种方法在时间效率上进行对比,从程序开始编译计时,到实际应用部署为止,得出各自所需的时间。

实验中选择不同度量法下的不同系统复杂度,在进行10次相对独立的实验后取平均值。其中T1表示在线部署的时间, T2表示重新编译部署的时间,T1/T2是两种部署模式下的时间比值。

如表1和图7所示,随着代码行数复杂度的增加, 在线部署的时间明显小于重新编译部署的时间,并随 着代码行数复杂度的增加,时间比值在逐渐下降。

如表2和图8所示,Halstead复杂度和代码行数复杂度的结果基本一致。

结果表明,在线部署比重新编译部署效果更好,推广到现在大规模、复杂性高的系统中,运用该热部署方法部署代码更有利于节约时间和资源。

5 系统应用

该文提出的在线部署方法应用于新型智慧城市评估系统的评估体系构建模块。随着城市的不断发展, 城市评价的指标体系也在不断地进步,指标计算也越来越复杂。在系统业务开发的过程中,对城市评估的评估体系往往考虑得不够全面,所以在系统运行初期, 会不断地调整指标中的评估算法,与之相对应的测试 环境以及预生产环境的应用也需要频繁地部署。针对 这种情况,系统为其设计了可在线编辑的指标计算模块,该模块通过在线操作完成新指标的部署。

当用户对指标计算模块编辑时,先在指标编辑的模块中对指标计算的算法进行编辑,之后系统根据算 法的名称和配置构建元信息,将代码连同元信息一起传输到系统后台,并在后台对算法进行编译,然后将编译后的文件通过Spring注入到容器列表,即可完成对应指标的部署。在对城市评估的时候,评估系统使用元信息查找到对应的算法,完成指标的计算。该在线部署方法为在线评估系统的指标拓展计算提供了思路,同时很好地解决了频繁部署热点代码的问题。

6 结束语

研究了基于Spring的在线热点代码部署方法,并在新型智慧城市评估系统进行了验证。在系统部署的过程中,运维人员会将所有的代码拉取到服务器中,对应用重新部署。功能应用在频繁改动的时候,重复拉取代码后进行部署,很容易导致一些问题出现。该方法能够使应用系统集成的在线部署模块在不停机的状态下,稳定地增加功能,并以较快的速度部署,同时在应用必须停机时,卸载在线部署模块,零配置重新部署功能 。该文设计的在线部署方法有望在紧急上线、预生产环境调试等环境下发挥作用。

同时,该部署方案还有进一步完善的空间。在应用过程中热点的代码只能修改单独的类,只能在线单 独改变其中一个功能,这种方法免去了代码的整包构建,提升了速率。但是这种方案仅仅只能在热点代码中使用,不适合大范围的修改代码,此外对于复杂环境的分布式系统,还需要考虑各个层级的依赖问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/812251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式再探——代理模式

目录 一、背景介绍二、思路&方案三、过程1.代理模式简介2.代理模式的类图3.代理模式代码4.代理模式还可以优化的地方5.代理模式的项目实战,优化后(只加了泛型方式,使用CGLIB的代理) 四、总结五、升华 一、背景介绍 最近在做产品过程中对于日志的统一…

【Git】分支管理之创建、切换、合并、删除分支以及冲突处理

目录 一、理解分支 二、创建、切换、合并分支 三、删除分支 四、冲突处理 五、合并模式 六、合并策略 七、Bug分支处理 八、强制删除分支 一、理解分支 master其实就是一个指针 ,他指向的是主分支最近一次commit。我们可以创建新的分支,在新的分…

antv x6将节点拖动到两连线的节点中,自动插入

1、找到节点相交的边 /*** * 将节点拖入两节点之间自动插入【找相交的边】* date 2023-07-29*/export const findIntersectsEdge (graph, node) > {const edges graph.getEdges();const bbox node.getBBox();const lines [bbox.leftLine, bbox.rightLine, bbox.topLine…

《零基础入门学习Python》第073讲:GUI的终极选择:Tkinter10

我们不难发现,几乎每一个应用程序都有一些相同的地方,比如说:标题栏、状态栏、边框、滚动条、工作区。还有的就是 菜单。 传统的菜单有大家熟悉的 File,Edit,Help等,点开之后,是下拉菜单&#…

点云可视化工具2

文章目录 1. 序2. 开发环境2.1 QT PCL 3. 程序3.1 新建项目3.2 修改.pro文件3.2.1 添加头文件目录3.2.2 添加依赖的库文件 3.3 软件界面3.3.1 ui文件3.3.2 按钮图标3.3.3 其他界面设置 3.4 点云处理3.4.1 点云读取显示3.4.2 上/下一张显示点云3.4.3 状态栏显示点云信息3.4.5 线…

0基础五分钟学会使用shardingJDBC实现分表 及测试

1.引入相关依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.1.1</version> </dependency> 2.添加配置 不懂的地方自己看注释 主…

vue基础-虚拟dom

vue基础-虚拟dom 1、真实dom目标2、虚拟dom目标 1、真实dom目标 在真实的document对象上&#xff0c;渲染到浏览器上显示的标签。 2、虚拟dom目标 本质是保存节点信息、属性和内容的一个JS对象 更新会监听变化的部分 给真实的DOM打补丁

SpringBoot多环境开发-配置文件

在Spring Boot中进行多环境开发时&#xff0c;你可以使用配置文件来定义每个环境的属性。Spring Boot提供了一种方便的方式来管理和加载不同环境的配置文件。 以下是一些常见的配置文件命名约定&#xff1a; application.properties: 默认的配置文件&#xff0c;适用于所有环…

Unity 性能优化五:渲染模块压力

CPU压力 Batching 在GPU渲染前&#xff0c;CPU会把数据按batch发送给GPU&#xff0c;每发送一次&#xff0c;都是一个drawcall&#xff0c;GPU在渲染每个batch的时候&#xff0c;会切换渲染状态&#xff0c;这里的渲染状态指的是&#xff1a;影响对象在屏幕上的外观的渲染属性…

【公益】Q学友联合福田人力资源局开展“侨香社区促就业 技能培训强本领”

落实《“十四五”就业促进规划》文件精神&#xff0c;进一步提高就业劳动者就业技能水平&#xff0c;提高居民就业率&#xff0c;侨香社区党委坚持以党建为引领&#xff0c;整合多方资源&#xff0c;深入开展“我为群众办实事”&#xff0c;切合群众实际、满足群众需求&#xf…

Huggingface基本使用

目录 0.install 1.tokenizer 2.datasets 3.metrics 0.install !pip install transformers !pip install datasets 1.tokenizer from transformers import BertTokenizer#加载预训练字典和分词方法 tokenizer BertTokenizer.from_pretrained(pretrained_model_name_or…

力扣 509. 斐波那契数

题目来源&#xff1a;https://leetcode.cn/problems/fibonacci-number/description/ C题解1&#xff1a;根据题意&#xff0c;直接用递归函数。 class Solution { public:int fib(int n) {if(n 0) return 0;else if(n 1) return 1;else return(fib(n-1) fib(n-2));} }; C题…

【物联网无线通信技术】UWB定位从理论到实现(DW1000)

超宽带&#xff08;UWB&#xff09;是一种基于IEEE 802.15.4a和802.15.4z标准的无线电技术&#xff0c;可以非常精确地测量无线电信号的飞行时间&#xff0c;从而实现厘米级精度的距离/位置测量。UWB技术除了提供定位功能外&#xff0c;它本身是一种通信技术&#xff0c;其提供…

Java在线OJ项目(三)、前后端交互API模块

Java在线OJ项目&#xff08;三&#xff09;、前后端交互API模块 1. 客户端向服务器请求所有题目 或者 单个题目前端获取所有题目获取一个题目 后端 2. 后端读取前端提交的代码&#xff0c;进行编译运行&#xff0c;返回结果前端提交代码后端处理 1. 客户端向服务器请求所有题目…

【程序设计】一文讲解程序设计原则SOLDI

前言 设计原则&#xff0c;是指导我们如何设计出低耦合、高内聚的代码&#xff0c;让代码能够更好的应对变化&#xff0c;从而降本提效。 设计原则的关键&#xff0c;是从『使用方的角度』看『提供方』的设计&#xff0c;一句话概括就是&#xff1a;请不要要我知道太多&#…

VBA技术资料MF36:VBA_在Excel中排序

【分享成果&#xff0c;随喜正能量】一个人的气质&#xff0c;并不在容颜和身材&#xff0c;而是所经历过的往事&#xff0c;是内在留下的印迹&#xff0c;令人深沉而安谧。所以&#xff0c;优雅是一种阅历的凝聚&#xff1b;淡然是一段人生的沉淀。时间会让一颗灵魂&#xff0…

IO流(2)-缓冲流

1. 缓冲流的简单介绍 我们上贴说到了 FileInputStream&#xff0c;FileOutputStream&#xff0c;FileReader&#xff0c;FileWriter。 其实这四个流&#xff0c;我们通常把它叫做原始流&#xff0c;它们是比较偏底层的&#xff1b;而今天我们要说的四个缓冲流&#xff0c;如…

自己创建的类,其他类中使用错误

说明&#xff1a;自己创建的类&#xff0c;在其他类中创建&#xff0c;报下面的错误&#xff08;Cannot resolve sysmbol ‘Redishandler’&#xff09;&#xff1b; 解决&#xff1a;看下是不是漏掉了包名 加上包名&#xff0c;问题解决&#xff1b;

第9届Python编程挑战赛初中组初赛真题剖析-2023年全国青少年信息素养大赛

[导读]&#xff1a;超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲&#xff0c;这是超平老师解读Python编程挑战赛系列的第13讲。 全国青少年信息素养大赛&#xff08;原全国青少年电子信息智能创新大赛&#xff09;是“世界机器人大会青少年机器人设计与…

PyCharm安装pip依赖,如何添加国内镜像源?

目录 前言 PyCharm如何安装依赖 PyCharm如何配置国内镜像源 前言 首先我们都知道&#xff0c;使用pip安装依赖的方式&#xff0c;却很少有人知道使用PyCharm如何安装依赖。 PyCharm如何安装依赖 但你会发现&#xff0c;基本都是安装失败的&#xff0c;因为你是去外网下载的…