APP下载

基于微服务构建模型的应用系统增量更新算法

2018-03-13徐亮亮

计算机与现代化 2018年2期
关键词:增量消耗子系统

黄 林,杨 军,徐亮亮

(华北计算技术研究所基础四部,北京 100083)

0 引 言

“微服务+微应用”架构[1-4]是近年兴起的新型应用系统构建模型,具有架构灵活、高内聚、低耦合、有效支持DevOps[5](开发运维一体化)等新型特征,是有效响应需求灵活多变的新型软件架构模式,在互联网企业中得到了广泛应用。

应用系统与完全自由的互联网应用相比,除了响应用户的修改需求,还具备较多的集中管理功能,往往需要以应用系统而非一堆零散的APP形式发布,经常要求在特定时间集中完成系统全面更新任务,集中更新将会对后台部署服务器造成集中式压力,同时会在网络上造成大量的应用下载流量,这些都需要有创新的系统升级方法。

增量升级已有一些算法被广泛应用,比如Bsdiff算法[6]、Xdelta3算法[7]等,但是这些算法通常只应用于单个应用的增量升级,在对大型的应用系统进行增量升级时效率低下,当网络环境不好时,整体更新时间过长,容易超时导致更新失败,应用系统发生频繁更新时,应用系统更新的块会比较集中。如何高效查找有差异的更新块也是急需解决的问题。

本文针对大型应用系统提出一种基于微服务构建模型的应用系统增量更新算法ASIUpdate(Application System Increment Update),通过细粒度分层次的系统划分,利用二分法有效地将大型应用系统进行分解,有利于准确增量更新,提高增量升级效率。一般情况下,程序修改是局部性的,版本的升级只会影响其中的一部分,大型系统进行分解后,每个局部会变得很小,增量升级的对象也很小,效率会提升很快。利用空间局部性原理[8],采用标记每次发生变化的功能块的方法,减少频繁更新时查找块的时间。

1 应用系统功能构成及其构建模型

1.1 应用系统构成

一个功能完善、实用、扩展性良好的应用系统[9]按照职能管理划分应该包括以下7个子系统(如图1所示):生产管理子系统、供应管理子系统、市场销售子系统、财务管理子系统、人力资源子系统、设备管理子系统、高层决策子系统。

图1 应用系统构成

1.2 基于微服务的应用系统构建模型

典型的应用系统EAI构建模型[10]包含应用集成框架、图形化集成开发工具、流程管理器、监控管理工具、统计分析工具等组件,其模型结构如图2所示。

图2 应用系统EAI模型

应用系统EAI模型不利于细粒度地对应用系统进行区块划分,而基于微服务的应用系统构建模型,通过细粒度分层次的系统划分,可有效地解决大型应用系统的复杂性。本文基于微服务架构的应用系统,结合传统的CS架构模型可分为服务端和客户端进行描述:

1)服务端。如图3所示,业务系统下包含云服务,云服务下包含微服务,微服务再是服务集群。

图3 服务端

服务端将微服务进行分组,每组微服务对应多个微应用构成云服务,微应用[11]针对同业务开发小型系统,提供更灵活、更个性化、更快速响应、更具可扩展性的服务,也更方便第三方开发商的接入。这些微服务运行在服务集群上,而这种云[12]是基于“云计算”[13-14]技术,通过使用计算分布在大量的分布式[15-17]计算机上,而非本地计算机或远程服务器中,实现各种终端设备之间的互联互通。用户享受的所有资源、所有应用程序全部都由一个存储和运算能力超强的云端后台来提供。服务集群则是将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一台服务器,集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器出现了故障整个系统还是能正常运行。

2)客户端。如图4所示,业务系统下包含子系统,子系统下包含应用,应用表现为二进制文件。

图4 客户端

客户端以子系统的形式展现给用户,这里的端为客户提供本地服务的程序,除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。而子系统则是包含很多应用的一个集合。子系统的行为由它所包含的应用提供,子系统实现一个或多个接口,这些接口定义子系统可以执行的行为。

服务端和客户端可以用集合来表示:

S={CS1, CS2, CS3, …, CSn}

CS={a1, a2, a3, …, an}

其中:S表示整个应用系统由子系统CS1, CS2, CS3, …, CSn构成的集合,单个子系统CS也是集合,由应用a1, a2, a3, …, an组合而成。

基于微服务的应用系统构建模型有利于对应用系统进行合理的区块划分,方便拆分成块进行增量更新。

2 应用系统版本增量升级算法与实现

一个大型复杂软件应用拆分成多个微服务组成,系统中的各个微服务可被独立部署,各个微服务之间是松耦合的,每个微服务仅关注于完成一件任务并很好地完成该任务,在所有情况下,每个任务代表着一个小的业务能力。ASIUpdate算法经过对基于微服务应用系统构建模型,将应用系统进行细粒度的分层区块划分,拆分成多个子系统,再对子系统进行拆分成多个应用,通过外置描述文件找出差异的应用,最后对差异应用采用增量升级算法,通过外置描述文件记录各区块及分层的详细信息,有利于适宜地使用差分算法。

当应用系统发生频繁的版本更新时,应用系统更新的块会比较集中,在查找有差异的更新块的过程中,根据空间局部性原理,当应用系统的某一块发生更新时,在下一个版本中,其附近的块也会很快发生更新,将每次发生更新的块记录到外置描述文件中,有利于下一次更新更快地找出差异的块。

Bsdiff算法是对整个二进制大文件进行无差别的二进制比对,而本文所采用的基于微服务应用系统构建模型的ASIUpdate算法,先通过二分法将大型系统进行大块分层次分解,然后对分解后的小块做比对。

2.1 ASIUpdate算法原理

图5 ASIUpdate算法的原理

图5所示为ASIUpdate算法原理:图5(a)是旧版本的应用系统,包含4个子系统(每种颜色代表的区域代表一个子系统),每个子系统都包含多个应用(每一个小方块代表一个应用);图5(b)是新版本的应用系统,与旧版本应用系统的区别在于有3个子系统都各有一个应用(白色区域)有版本更新;图5(c)和图5(d)为旧版本与新版本应用ASIUpdate算法先找出各个子系统中不同MD5值对应的块,即有更新的应用,然后对这些块进行差值处理,从而产生整个应用系统新旧版本之间的差异包;图5(e)为旧版本和新版本即对新旧版本系统各个子系统中差异的应用采用Bsdiff算法生成差异包patch;图5(f)则是最终对整个系统进行差异产生的系统差异包,其大小只包含有差异应用的差异包大小之和,即图5(f)中有色的块大小,最终的升级只需下载该差异包与旧版本的应用进行结合产生新的差异包进行升级,而无需下载图5(b)中整个新版本应用系统。

2.2 ASIUpdate算法及实现

ASIUpdate算法主要分为6步,具体步骤如图6所示。

图6 ASIUpdate算法流程

1)划分系统。将系统以不同的功能模块按照基于微服务的应用系统构建模型进行划分为相应的子系统branchSystem[],从而达到实用、扩展性好的效果。

2)找出差异子系统。通过外置的描述文件(如MD5)值,找出差异的子系统。

3)划分子系统。将子系统再利用基于微服务的应用系统构建模型划分应用app[],每个子系统里面的应用都有类似的功能或者属于同种类型。

4)找出有差异的应用。以区块划分的机制,通过外置的描述文件(如MD5)值,而非生硬地作二进制比较,找出有版本差异的应用diffApp[]。

5)处理差异的应用。对应用采用单元级增量算法,生成差异包。

6)合并成子系统差异包。将有差异的子系统中应用差异包按同一层合并成子系统差异包,并将有差异的块记录到子系统的外置描述文件中,方便下次更新采用局部性原理。

7)合并成应用系统。将子系统差异包再按同一层合并成应用系统差异包。

上述应用系统增量升级算法的关键在于通过描述文件的信息快速定位到有版本差异的子系统,然后通过描述文件对应用信息的记录,找出有变动的应用,对这些有变动的应用采用差值算法生成差异包。

在步骤4、步骤5中关键算法的伪代码实现如下:

diff(oldApps, newApps, patchApps){

for i←0 to oldApps.len do

begin

if oldApps[i].MD5 <> newApps[i].MD5 then

Diff.gendiff(oldApps[i].path, newApps[i].path, patchApps[i].path);

end;

}

3 实验验证与测试分析

3.1 ASIUpdate算法效率分析

时间效率上相对于整体差异的效率提升百分比为t。

3.2 对比测试

1)传统的应用系统全部重装的算法;

2)应用系统整体Bsdiff的算法;

3)本文实现的ASIUpdate算法。

3.3 测试方法

同样的应用系统发布的2个版本,新版本比旧版本只有较微小的改动,只涉及少量的应用有变化。与Bsdiff算法作比较的原因在于其对单个文件进行增量升级应用广泛,比较的核心点在大型应用系统整个增量升级过程中的效率和时间上。

测量指标有:

1)系统更新时间:客户端日志记录。

2)网络传输量:使用网络监控工具。

实验平台是利用Java开发环境与Eclipse集成开发环境,与平台无关。

3.4 比对测试结果

子系统中应用程序包大小的实验数据如表1所示,柱状图如图7所示。

表1 应用新旧版本及差异包大小 /MB

名称旧版本大小新版本大小差异包大小APACHE_TOMCAT_Noarch_325.88.04AGENT_BASE_Noarch_3223230.149JAVA_JDK_Noarch_32138168163

图7 应用新旧版本及差异包大小对比

从图7的数据中可以看出patch包相对于新版本包大大减小。

系统整体采用Bsdiff与本文的部分差异算法ASIUpdate消耗的时间的实验数据如表2所示,对比柱状图如图8所示。

表2 系统整体Bsdiff与部分差异算法ASIUpdate消耗时间 /ms

名称全量Bsdiff算法消耗的时间ATUPdating算法消耗的时间APACHE_TOMCAT_Noarch_322600026500AGENT_BASE_Noarch_322400400JAVA_JDK_Noarch_329800099800

图8 系统整体BsDiff与部分差异算法ASIUpdate消耗时间对比

从图8的数据中可以看出,当拆分的块有更新时,本文实现的部分差异算法ASIUpdate消耗的时间比系统整体BsDiff消耗的时间略大,但是没有变化的块基本不消耗时间,对于一组微服务整体的升级过程中,往往只有某些块发生变化,大大缩短了增量升级过程的时间。

全量升级与增量升级所消耗的时间实验数据如表3所示,对比柱状图如图9所示。

表3 全量升级与增量升级所消耗的时间实验数据 /ms

名称全量Bsdiff算法消耗的时间ATUPdating算法消耗的时间APACHE_TOMCAT_Noarch_321000600AGENT_BASE_Noarch_3220000JAVA_JDK_Noarch_32160008000

图9 全量升级与增量升级所消耗的时间实验数据对比

从图9的数据中可以得出,增量升级相对于全量升级消耗的时间显著降低。

实验数据的结果表明:本文提出的应用系统级更新算法ASIUpdate,可以有效提升效率。

4 结束语

本文提出的基于微服务构建模型的应用系统增量更新算法ASIUpdate,对大型应用系统进行块级更新,采用空间局部性原理,通过外置描述文件记录块的详细信息,测试数据表明,可有效解决大型应用系统更新过程中的单一升级不稳定性问题,有效降低数据传输量、显著提升系统更新速度,尤其在系统频繁更新的情况下,可快速找到有差异的块,对于大型应用系统快速迭代更新、系统快速生成起到有效的技术支撑作用。

[1] Lewis J, Fowler M. Microservices[EB/OL]. https://www.martinfowler.com/articles/microservices.html, 2014-03-25.

[2] 米沃奇. 深度剖析微服务架构的九大特征[J]. 电脑知识与技术:经验技巧, 2016(10):105-110.

[3] Walraven S, Truyen E,Joosen W. Comparing PaaS offerings in light of SaaS development[J]. Computing, 2014,96(8):669-724.

[4] 郭栋,王伟,曾国荪. 一种基于微服务架构的新型云件PaaS平台[J]. 信息网络安全, 2015(11):15-20.

[5] 邹筱菁,柯林. 基于DevOps的软件开发管理模式[J]. 数字技术与应用, 2016(11):184-187.

[6] Stolikj M, Cuijpers P J L, Lukkien J J. Efficient reprogramming of wireless sensor networks using incremental updates and data compression[C]// 2013 IEEE International Conference on Pervasive Computing and Communications Workshops(PERCOM Workshops). 2012:584-589.

[7] 夏棋. 移动互联网增量数据差分更新算法研究[D]. 成都:电子科技大学, 2014.

[8] 刘巍. 基于空间局部性的PCM和DRAM混合内存页面调度算法[J]. 中国科技论文, 2014,9(1):53-57.

[9] 赵琳,张黎明. 基于SOA架构的企业应用系统研究[J]. 太原理工大学学报, 2007,38(6):535-539.

[10] 过立新. 一种新型企业应用系统EAI模型的构建[J]. 电子科技, 2006(11):72-76.

[11] 《中国金融电脑》编辑部. PWorld2015:聚焦互联网+,助力“大平台+微应用”[J]. 中国金融电脑, 2015(7):96.

[12] 陈全,邓倩妮. 云计算及其关键技术[J]. 计算机应用, 2009,29(9):2562-2567.

[13] 王意洁,孙伟东,周松,等. 云计算环境下的分布存储关键技术[J]. 软件学报, 2012,23(4):962-986.

[14] 卢小宾,王涛. Google三大云计算技术对海量数据分析流程的技术改进优化研究[J]. 图书情报工作, 2015,59(3):6-11.

[15] 魏青松. 大规模分布式存储技术研究[D]. 成都:电子科技大学, 2004.

[16] 刘亚. 基于MooseFS分布式存储策略的研究与实现[D]. 济南:山东大学, 2015.

[17] 吴思. 容错分布式存储系统扩容机制研究[D]. 合肥:中国科学技术大学, 2016.

猜你喜欢

增量消耗子系统
玉钢烧结降低固体燃料消耗实践
不对中转子系统耦合动力学特性研究
导弹增量式自适应容错控制系统设计
提质和增量之间的“辩证”
转炉炼钢降低钢铁料消耗的生产实践
全现款操作,年增量1千万!这家GMP渔药厂为何这么牛?
降低钢铁料消耗的生产实践
GSM-R基站子系统同步方案研究
“价增量减”型应用题点拨
我们消耗很多能源