APP下载

面向工作流的Gitlab服务化设计①

2017-09-15张宇光王俊杰胡渊喆

计算机系统应用 2017年9期
关键词:细粒度服务化监听

张宇光,王俊杰,胡渊喆,王 青,3

1(中国科学院软件研究所 互联网软件技术实验室,北京 100190)

2(中国科学院大学,北京 100049)3(中国科学院软件研究所 计算机科学国家重点实验室,北京 100190)

面向工作流的Gitlab服务化设计①

张宇光1,2,王俊杰1,胡渊喆1,王 青1,2,3

1(中国科学院软件研究所 互联网软件技术实验室,北京 100190)

2(中国科学院大学,北京 100049)3(中国科学院软件研究所 计算机科学国家重点实验室,北京 100190)

软件制品间使用服务化的方法进行交互,能够将制品内部产生的事件和数据以服务的形式产出.工作流是一种常见的用于处理消息流和事件流的方式,使得制品产生的事件和数据能够在不同制品间流转.Gitlab作为开源的、被广泛使用的代码与文档管理工具,针对其在工作流环境中进行对外服务能力的研究是很有意义的.在研究中发现,Gitlab的服务化能力有灵活性差,拓展能力弱,服务粒度粗等问题.基于这样的问题,本文提出GITService服务化方法,重新定义了Gitlab的服务流程和服务标准,在服务实现中,使用消息队列和异步机制,设计实现了新的监听服务和执行服务方案,并针对该解决方案进行了实验分析.实验表明,在保证Gitlab运行时间几乎不受影响的情况下,GITService拥有灵活性好、扩展性强、细粒度的服务化能力.本文所提供的方法,能够为其他场景下的服务化设计和实现提供有益参考.

Gitlab;工作流;服务化;RESTful;服务粒度

1 引言

工作流系统的作用是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”[1].为使信息能够在工作流运行的过程中流转,就需要由工作流串联起来的各个工具之间能够满足工作流传输数据的标准,满足工作流对于实际业务的需求.

在软件开发过程中,为了实现复杂的开发和管理流程,通常需要多个开发工具之间的事件交互和消息交互,在实践中,经常选择工作流平台来实现软件开发工具间的事件和消息的流转.在自动化的软件开发与管理过程中,会有多个软件制品协同对外提供服务,由于软件开发与管理的复杂性,其所需要的服务种类多种多样,这就对各个制品的对外服务能力提出很高的要求.代码与文档管理作为软件开发过程的核心部分,其对外服务能力直接影响到软件开发与管理的质量.Gitlab作为软件开发过程最重要的文档及代码管理工具,在接入工作流平台后发挥了重要的作用,在工作流平台中被频繁使用.

被接入工作流后,Gitlab现有的服务化方案展现出了诸多问题,在灵活性方面,Gitlab的服务化参数是固化的,不能通过解析参数的方法灵活地选取服务;在拓展性方面,Gitlab只能提供固定的服务,当前架构难以对服务拓展;在服务粒度方面,Gitlab只能在project和group的维度提供服务,不能提供更细粒度的服务.对工具的服务化而言,文献[2,3]研究了通用领域的服务选择和组合方法.文献[4]指出,由于Web应用的广泛性,在诸多种类Web中进行Web服务化的相关研究时,只有考虑Web服务所应用的领域才有意义,本文基于Gitlab在软件开发领域的重要作用,研究发现Gitlab现有的服务化方案存在的三类问题,并提出了针对该专用领域的解决方案.

针对在与工作流协同工作时,Gitlab所展现出的灵活性差,拓展性差和服务粒度粗等情况,本文对Gitlab进行了深入研究,在兼容原有对外服务体系的基础上,提出了更灵活,拓展性更强,细粒度的服务化解决方案GITService,实验表明GITService提升了Gitlab的服务化能力.

2 相关工作

罗海滨等[5]结合不同研究者的定义,将工作流定义为,工作流是通过计算机软件进行定义执行并监控的经营过程,而这种计算软件就是工作流管理系统.文中对工作流技术进行了全面而详尽的综述.

文献[6,7]提到后前有很多研究基于W e b service 展开,Web 服务化有诸多优点.张卫等[8]结合HLA仿真与Web的优点,通过服务化的方法实现了分布式的HLA仿真系统.将Web服务的优势附加给HLA,实现了 HLA Web 服务化的三个层次.文章借助Web服务化的优势,对软件结合Web实现服务化能力提出了一种实践方案.

文献[9-12]提到RESTful Web服务的简便性、轻量性、可扩展性和安全性,RESTful架构已经成为Web服务的主流技术.它基于RESTful Web服务的特点,提出了有服务发现与识别、服务搜索和服务接入三个模块的RESTful Web服务开放平台的实现方案.在Web服务化的相关研究中,由于RESTful Web的诸多优势,针对 RESTful Web 服务化的研究越来越多,针对 RESTful Web 的实现案例也越来越多,因此,针对RESTful Web的研究是很有意义的.在需求越来越多与场景变化多样的情况下,能否提供高质量的服务显得十分关键,针对Web服务化存在诸多挑战,文献[13,14]研究了如何提供更好的服务化方法.本文提出的基于Gitlab的服务化解决方案就是基于RESTful Web实现的.

3 研究介绍

本章节面向工作流,基于Gitlab的服务化能力无法满足工作流对服务集成的需求的背景,首先介绍了工作流和Gitlab相关的背景知识;然后指出Gitlab服务化的现状和不足;最后,着重从服务流程、服务标准和服务实现这三方面介绍GITService服务化模型.

3.1 背景介绍

3.1.1 工作流

工作流系统的作用是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”[1].本文基于软件开发过程中的工作流平台开展研究,该平台是以JBPM为核心开发,集任务管理,代码管理,缺陷管理等工作为一体的自动化软件开发任务流程管理平台,任务管理、代码管理和缺陷管理等工具通过工作流平台被串联起来,开发任务在工作流平台发布后自动在任务管理工具间流转.

在工作流中存在包含子流程的情况.子流程中涉及当前服务与前置服务,当前服务是指当前的工作流节点所提供的执行或监听服务,前置服务是子流程最开始的节点所对应的执行或监听服务,前置服务与当前服务相关联,若当前服务为子流程中最后一个节点,如果此时判断最后一个节点的状态满足子流程结束条件,则终止子流程,若不满足,则重置当前服务节点与前置服务节点状态,以前置节点为起始点,重新执行子流程,直至子流程满足终止条件.

3.1.2 Gitlab

Gitlab是后前被广泛使用的基于git的开源代码管理平台,基于 Ruby on Rails构建,主要针对软件开发过程中产生的代码和文档进行管理,Gitlab主要针对group和project两个维度进行代码和文档管理,其中group 是群组,project是工程项后,一个 group 可以管理多个project,可以理解为一个群组中有多项软件开发任务,而一个project中可能包含多个branch,意为每个项后中有多个分支,分支间相互独立,不同分支可以进行归并.如表 1 所示,在 Gitlab 中,除 push 操作外,其他操作都可以通过Web的形式进行交互.

Gitlab有两种服务化能力,监听服务和执行服务.监听服务是指,监听某一任务执行,执行后,将结果返回给服务调用方;执行服务是指,直接执行所调用的服务,并将结果返回给服务调用方.两种服务化能力均以RESTful Web服务化体系为基础.

表1 Gitlab 基本操作介绍

3.2 Gitlab服务化现状与不足

在与工作流协同工作时,Gitlab的服务化能力难以满足工作流的需求,Gitlab的服务化主要是针对具体资源进行的,在Gitlab的26种资源服务中,当前仅提供针对 project,group,merge 三种资源在 project和 group维度上的服务化能力.如表2所示,通过对有代表性的几种服务分析后发现,Gitlab现存服务化能力难以满足工作流的需求,我们将问题归类为灵活性差、拓展性弱以及服务粒度粗等三个方面.

表2 Gitlab 固有服务化存在的问题

在灵活性方面,Gitlab的服务化标准难以应对多种参数解析和配置的需求,使得服务化能力不灵活;在拓展性方面,在Gitlab服务化流程中,增加资源监听只能以修改数据标准和关键部分为代价添加,在应对复杂监听需求的情况下,展现出了较弱的拓展性;在服务粒度方面,Gitlab的服务化只能在粗粒度的资源上提供事件监听服务,却无法以定制化的方法针对资源下发生的事件提供更加细粒度的服务.代码管理作为整个软件开发过程中最重要的环节,为了实现对整个开发任务的管理,Gitlab需要有更强的服务化能力.

3.3 GITService服务化模型

3.3.1 服务流程

基于Gitlab的服务化问题,我们提出了基于Gitlab的GITService服务化模型,新的服务化方法依然基于RESTful API构建,兼容了固有的 Gitlab 服务化方法,提供了更加灵活、拓展性更强、可定制的细粒度的对外服务.从流程上讲,如图 1 所示,根据所请求的服务种类的不同,使用不同的解析方式对参数解析,并继续执行对应的服务化流程.在GITService服务化流程中,当前服务完成后,首先判断当前服务是否与前置服务有关联,如果判断为真,说明当前服务与前置服务在同一个子流程中,需要判断子流程是否满足终止条件,如果不满足,则继续执行子流程,若当前服务为子流程最后一个节点,则将当前服务状态更新为未完成,以前置服务为起点,重新执行整个子流程,直至流程中最后的服务节点的执行状态满足子流程终止条件.

图1 GitService 服务化流程图

3.3.2 服务标准

通过分析Gitlab现有服务的数据标准,发现这个标准难以对不同参数灵活处理,难以拓展新的服务也难以提供更细粒度的服务.

因此,为了提供更灵活、拓展性更强、更细粒度的服务,我们需要设计新的服务标准.该服务标准能够对参数灵活解析;能够以参数化的方法进行新服务的配置,从而实现对服务的拓展;能够利用服务标准,通过解析服务需求的方法,对资源进行细粒度的服务.新的服务数据标准如表3所示.通过iscas_type表示要执行的对外服务编号,添加新服务时,在配置文件中添加新服务和对应的编号即可,该方法以可配置的形式实现了较强的服务拓展性.在content字段中,以json格式记录关键参数信息,在执行服务时将字段灵活解析,借助json解析速度快的优势,实现了灵活的服务能力且不会对于服务性能造成过多影响;根据解析得到的参数,解析其具体含义,可以定制任意细粒度的服务.使用issue_id作为触发服务验证的标记,如果事件中包含issue_id关键字内容,则验证当前事件是否为服务所监听的事件.使用status字段和target_id字段,实现前置服务与当前服务的关联,借助status标记子流程完成情况的状态信息,决定整个循环服务的结果;也可以使用flag为触发服务验证的标记,如果事件中包含flag信息,则验证当前事件是否为服务所监听的事件.

3.3.3 服务实现

依据Gitlab服务化能力类型,将GITService分为监听服务和执行服务两部分实现.

3.3.3.1 监听服务

监听服务,主要包含两个部分,监听服务信息存储和监听反馈.监听服务信息存储是指,将请求监听服务时传入的参数信息、状态信息、回调地址等信息解析,将信息以服务标准格式化,并存储起来.监听反馈是指在实际的代码与开发中,获取用户与Gitlab的交互信息,异步的判断发生事件是否为所需要监听的事件,若判断为真,则将事件发生的情况反馈给回调地址.

监听服务信息存储主要包括“三步验证一步判断”.如图2所示,Gitlab获取服务请求后,首先验证请求中的权限信息(验证1),判断其是否被允许调用Gitlab的服务,随后根据请求的地址和解析的字段信息判断所请求的是Gitlab事件监听服务还是GITService事件监听服务(判断 1),在 GITService监听中,需要再次对重要参数进行解析,验证请求是否有权限对相应资源监听(验证2),将信息以服务标准格式化,对参数合法性进行验证(验证3),验证成功后需要对重要参数以json的形式组合并存储在content中,存储格式化后的信息供监听反馈阶段使用.

表3 GITService 服务标准

监听反馈主要包括“五步判断”.由于监听反馈过程需要对Gitlab的任何事件进行监听,再删选出需要监听的事件,但如果在相同模块同步监听,由于增加了判断与验证机制,会使Gitlab的交互响应时间大大延长.而使用消息队列机制捕捉当前事件的关键信息,使用异步机制进行判断与验证,能够从最大程度上减少监听反馈对于Gitlab的交互响应时间的影响,所以本文采用消息队列与异步机制进行监听反馈.如图3所示,当用户与Gitlab交互时,使用字符串匹配的方法,判断交互信息中是否包含如issue_id或flag的标记字段(判断1),如果判断为真,证明其有可能是所需监听的事件,异步的执行监听任务和事件,在事件异步执行的过程中,通过 Ruby on Rails框架提供的消息队列与异步机制,从消息队列获取所监听事件的关键信息,结合上一步存储的监听服务信息,异步判断当前发生的事件是否为所需要监听的事件(判断2),判断为真的情况下,封装当前事件的监听信息,以规定的格式反馈给回调地址,继续判断当前监听服务是否与前置服务有关联(判断3),若判断为假则结束当前监听服务,若判断为真,说明当前服务存在于子流程中,继续判断子流程是否满足终止条件(判断4),若为真,说明已经执行完子流程,结束子流程,若未完成,则继续进行子流程,判断当前服务节点是否为子流程的最后一个节点(判断 5),若判定为真,则重置前置服务状态,将前置服务状态更新为未完成,以前置服务为起点,重新执行整个子流程,直至子流程满足终止条件.

3.3.3.2 执行服务

执行服务是指在完成指定任务的执行后,将执行结果的相关信息反馈给回调地址.执行服务中主要涉及“两步验证三步判断”.如图4所示,Gitlab获取请求后,验证请求是否有权限调用该执行服务(验证1),在通过权限验证之后,解析请求字段,分析判断所请求的是GITService执行服务还是Gitlab执行服务(判断1).对于GITService执行服务而言,需要针对请求中的重要字段解析,使用服务标准格式化并存储重要信息,通过验证服务成功判断请求对所需执行资源有权限后(验证 2),即在 Gitlab 执行对应的任务,执行结束后,与监听服务类似,若判断子流程结束(判断2),则将执行结果以固定格式反馈给回调地址,若不满足子流程结束条件,判断当前服务节点是否为子流程的最后一个服务节点,若判断为假则继续执行子流程,若判断为真,则重新执行子流程.

图2 监听服务信息存储流程图

4 实验分析

基于Gitlab服务化存在的三类问题,本章首先针对GITService的服务化能力进行评价,然后针对GITService可能给Gitlab的正常业务处理和响应时间带来的潜在负面影响,进行响应时间的对比分析.

4.1 服务化能力评价

我们基于常用服务,对Gitlab与GITService的服务化能力比较,在灵活性、可拓展性、服务粒度等三个指标上评价GITService服务化能力.如表4所示,GITService在所有常用服务中,均表现出更优的灵活性、能够提供更细粒度的服务;在扩展性方面,在部分项后上具有更强的可拓展性,在其他项后上保持原有的可拓展性.

图3 监听反馈流程图

4.2 时间分析

由于GITService服务化提供了更多更细粒度的监听服务,在实现时,在不同资源请求操作中需要调用监听服务模块,虽然在设计上采用了异步的形式执行监听服务,但是在执行监听服务之前需要针对事件进行针对flag或issue_id的判断,需要在Gitlab处理自身业务时,判断当前处理的业务是否为目标监听事件,存在对Gitlab的Web业务交互处理时间的潜在负面影响.

我们从时间上分析了GITService是否存在对于Gitlab的Web业务交互的负面影响.我们在相同机器、相同网络环境下进行试验,针对Gitlab常用的几类资源,对比Gitlab入GITService服务体系前后的平均响应时间.如表五所示,GITService 对于 Gitlab 在常用资源的Web业务处理与响应时间的影响很小,根据[15]的观点,响应时间在2秒以内即可以达到较好的用户体验,在实验中发现,响应时间在10毫秒级别的影响在3%以内,可以认为GITService几乎不存在对Gitlab处理Web交互业务与响应时间的负面影响.

5 结语

本文针对面向工作流环境的Gitlab服务化所存在的灵活性差、拓展性差和服务粒度粗的问题,提出了一种在工作流环境中更优的服务化方案——GITService.通过对比和实验发现,GITService是一种能够提供灵活性好、拓展性强、细粒度化服务的Gitlab服务化解决方案.同时,GITService保证了Gitlab自身项后结构的完整性,展现出了较优的兼容性.最终通过对入GITService 前后,对 Gitlab 交互响应时间的实验对比,发现GITService对Gitlab处理Web交互相关业务及响应时间的影响很小,表明GITService使用较低的代价,改善了对于Gitlab对外服务体系在工作流环境下的服务能力.

本文仅针对Gitlab的服务化进行了研究,通过提出一种新的GITService服务化解决方案,解决了Gitlab服务化中现存的问题.但是对于Gitlab自身而言,依然有许多需要改进之处,尤其是对内的权限管理、代码审核等方面依然有较多值得研究的工作.进一步工作将针对Gitlab内部体系、代码审核等方面提出更优的解决方案和验证方法.

图4 执行服务流程图

表4 Gitlab 和 GITService 的服务化能力评价

表5 入 GITService 前后响应时间分析

1 Workflow Management Coalition.WFMC-TC-1003:The workflow reference model.Cohasset:Workflow Management Coalition,1995:1–55.

2 刘书雷,刘云翔,张帆,等.一种服务聚合中 QoS 全局最优服务动态选择算法.软件学报,2007,18(3):646–656.

3 张成文,苏森,陈俊亮.基于遗传算法的 QoS 感知的Web 服务选择.计算机学报,2006,29(7):1029–1037.

4 程强.Web Services服务质量模型与量化算法研究[硕士学位论文].成都:电子科技大学,2008.

5 罗海滨,范玉顺,吴澄.工作流技术综述.软件学报,2000,11(7):899–907.

6 Duan Q,Yan YH,Vasilakos AV.A survey on serviceoriented network virtualization toward convergence of networking and cloud computing.IEEE Trans.on Network and Service Management,2012,9(4):373–392.[doi:10.1109/TNSM.2012.113012.120310]

7 Banerjee P,Friedrich R,Bash C,et al.Everything as a service:Powering the new information economy.Computer,2011,44(3):36–43.[doi:10.1109/MC.2011.67]

8 张卫,张童,查亚兵.基于HLA分布式仿真的Web服务化.国防科技大学学报,2008,30(5):120–124.

9 周巧俊.RESTful Web服务开放平台的设计与实现[硕士学位论文].杭州:浙江大学,2016.

10 Lee S,Jo JY,Kim Y.Method for secure RESTful web service.IEEE/ACIS 14th International Conference on Computer and Information Science (ICIS).Las Vegas,NV,USA.2015.77–81.

11 Rathod DM,Dahiya MS,Parikh SM.Towards composition of RESTful web services.2015 6th International Conference on Computing,Communication and Networking Technologies (ICCCNT).Denton,TX,USA.2015.1–6.

12 Selvakumar G,Kaviya BJ.A survey on RESTful web services composition.2016 International Conference on Computer Communication and Informatics (ICCCI).Coimbatore,India.2016.1–4.

13 Mehdi M,Bouguila N,Bentahar J.Trust and reputation of web services through QoS correlation lens.IEEE Trans.on Services Computing,2016,9(6):968–981.[doi:10.1109/TSC.2015.2426185]

14 Zhong Y,Fan YS,Tan W,et al.Web service recommendation with reconstructed profile from mashup descriptions.IEEE Trans.on Automation Science and Engineering,2016,doi:10.1109/TASE.2016.2624310.

15 陈能技,黄志国.软件测试技术大全:测试基础 流行工具项后实战.3 版.北京:人民邮电出版社,2015.

Design of Workflow Oriented Gitlab as a Service

ZHANG Yu-Guang1,2,WANG Jun-Jie1,HU Yuan-Zhe1,WANG Qing1,2,3

1(Laboratory for Internet Software Technologies,Institute of Software,Chinese Academy of Sciences,Beijing 100190,China)
2(University of Chinese Academy of Sciences,Beijing 100049,China)3(State Key Laboratory of Computer Science,Institute of Software,Chinese Academy of Sciences,Beijing 100190,China)

Web service could make events and data generated in software products as service by which software products interact with each other.Workflow is a very popular way to deal with message flow and event flow which could deliver events and data among software products.It is very meaningful to study Gitlab which is known as a widely used open source code and document management tool.However,poor flexibility,weak expandability and raw service granularity are found in Gitlab service during the study.To tackle the problems in Gitlab,this paper proposes a new service solution to Gitlab which redefines the service process,service standard and service implement.To implement the services,we design and implement new solutions for listening services and execution services which involve the message queue and asynchronous mechanism.According to experimental analysis to this solution,GITService has high flexibility,strong expandability and intensive service granularity with little cost of time.The solution we provide in this paper is of significance to design and implementation of service in other situations.

Gitlab;workflow;software as a service;RESTful;service granularity

张宇光,王俊杰,胡渊喆,王青.面向工作流的 Gitlab 服务化设计.计算机系统应用,2017,26(9):224–231.http://www.c-s-a.org.cn/1003-3254/5962.html

①基金项后:国家自然科学基金(61432001,61602450)

2016-12-29;采用时间:2017-01-20

猜你喜欢

细粒度服务化监听
制造企业服务化程度、服务化模式和服务化收益研究
英国风真无线监听耳机新贵 Cambridge Audio(剑桥)Melomania Touch
基于行业异质性的制造业服务化对生产效率的非线性影响研究
千元监听风格Hi-Fi箱新选择 Summer audio A-401
基于SVM多分类的超分辨图像细粒度分类方法
制造业服务化对企业竞争力的影响
基于型号装备?角色的IETM访问控制研究
基于web粒度可配的编辑锁设计
基于文本挖掘的微博文本情绪分析技术研究
网络监听的防范措施