一种基于微服务架构扩展软件功能的方法及装置与流程

文档序号:11064707阅读:430来源:国知局
一种基于微服务架构扩展软件功能的方法及装置与制造工艺

本发明涉及软件微服务架构领域,特别涉及一种基于微服务架构扩展软件功能的方法及装置。



背景技术:

随着信息技术(Information Technology,IT)的迅猛发展,软件系统架构在发生着重大变化。对软件系统的要求主要有系统可管理性、可靠性、可扩展性、可维护性和安全性等等。软件系统的可扩展性是构建现代软件系统的一个重要课题。

微服务架构(Micro Service Architecture)是近年来软件体系架构领域出现的一个新名词,它通过将功能分解到多个独立的服务,实现对解决方案或复杂系统的解耦,其根本理念是将大型、复杂且历时长久的应用在架构上设计为内聚的多个小服务,这些小服务能够随着时间的流逝而演化。

软件在运行时动态扩展功能的方法一般包括以下几种方式:

1)插件方式。

首先定义统一接口,基于Liskov替换原则,对扩展点进行扩展,然后加载动态库,例如,Java的开放服务网关协议(Open Service Gateway Initiative,OSGI)框架和著名的Eclipse集成开发环境(integrated development environment,IDE)都属于此类扩展方式。

2)打补丁的方式。

在运行时动态更换指针所指的函数,例如,C/C++语言在通信产品上,一般采用打热补丁的方式修复系统错误,也是运行时扩展功能的一种方式。

3)语言层级的自然支持。

例如,Erlang语言的热代码替换(Hot Code Swapping)特性,支持在运行时替换模块代码,从而实现功能扩展。

4)配置文件。

通过在运行时修改配置文件,可以在一定程度上扩展软件处理业务的范围,但在功能扩展的范围也被限制在某种可配参数范围内,无法加载其它新功能。

扩展软件功能的方式很多,有些语言只支持引用静态代码直接编译,不支持加载动态库,例如Go语言,这样在运行时就无法通过更换动态库文件来扩展功能。



技术实现要素:

本发明的目的在于提供一种基于微服务架构扩展软件功能的方法及装置,能更好地解决Go语言等软件语言在运行时不支持加载动态库的问题。

根据本发明的一个方面,提供了一种基于微服务架构扩展软件功能的方法,包括:

将软件系统分解成多个微服务功能模块;

根据每个微服务功能模块的微服务信息,在转发代理模块中建立用于转发微服务功能模块的微服务消息的配置文件;

所述转发代理模块根据所述配置文件,确定其收到的微服务消息的目标微服务功能模块地址,并将所述微服务消息转发给所述目标微服务功能模块地址对应的微服务功能模块;

在软件系统根据业务功能需求形成功能增强型微服务功能模块时,所述转发代理模块根据所述功能增强型微服务功能模块的微服务信息,更新所述配置文件,并根据所述已更新的配置文件,对后续收到的微服务消息进行转发。

优选地,在将软件系统分解成多个微服务模块之后,还包括:

通过扫描,发现当前已启动的微服务功能模块,并收集所述已启动的微服务功能模块的微服务信息。

优选地,在收集所述已启动的微服务功能模块的微服务信息之后,还包括:

对所收集的已启动的微服务功能模块的微服务信息进行注册,并对已注册成功的微服务信息进行存储。

优选地,所述根据每个微服务功能模块的微服务信息,在转发代理模块中建立用于转发微服务功能模块的微服务消息的配置文件的步骤包括:

对所述每个微服务功能模块的微服务信息进行收集,所述微服务信息包括所 述微服务功能模块的名称和网络地址;

预先设定配置文件模版,将所述微服务功能模块的名称作为访问控制列表过滤规则,填充到所述配置文件模版的访问控制列表过滤规则部分,并将所述微服务功能模块的网络地址填充到所述配置文件模版的与所述访问控制列表过滤规则相对应的目标资源池,从而建立配置文件。

优选地,所述转发代理模块根据所述配置文件,确定其收到的微服务消息的目标微服务功能模块地址的步骤包括:

所述转发代理模块接收已启动的微服务功能模块发出的微服务消息,并得到所述微服务消息携带的统一资源定位符;

在所述配置文件的访问控制列表过滤规则部分中,找到与所述统一资源定位符匹配的访问控制列表过滤规则,并确定所找到的访问控制列表过滤规则对应的具有多个微服务实例地址的目标资源池;

从所述目标资源池中选取一个微服务实例地址作为目标微服务功能模块地址。

根据本发明的另一方面,提供了一种基于微服务架构扩展软件功能的装置,包括:

通过分解软件系统而得到的多个微服务功能模块;

转发代理模块,用于根据每个微服务功能模块的微服务信息,建立用于转发微服务功能模块的微服务消息的配置文件,并根据所述配置文件,确定其收到的微服务消息的目标微服务功能模块地址,并将所述微服务消息转发给所述目标微服务功能模块地址对应的微服务功能模块;

其中,在软件系统根据业务功能需求形成功能增强型微服务功能模块时,所述转发代理模块根据所述功能增强型微服务功能模块的微服务信息,更新所述配置文件,并根据所述已更新的配置文件,对后续收到的微服务消息进行转发。

优选地,还包括:

扫描注册模块,用于在分解软件系统而得到多个微服务模块之后,通过扫描,发现当前已启动的微服务功能模块,并收集所述已启动的微服务功能模块的微服务信息。

优选地,还包括:

全局名字服务模块,用于对所收集的已启动的微服务功能模块的微服务信息进行注册,并对已注册成功的微服务信息进行存储。

优选地,所述转发代理模块对所述每个微服务功能模块的微服务信息进行收集,所述微服务信息包括所述微服务功能模块的名称和网络地址,并将所述微服务功能模块的名称作为访问控制列表过滤规则,填充到预先设定的配置文件模版的访问控制列表过滤规则部分,将所述微服务功能模块的网络地址填充到所述配置文件模版的与所述访问控制列表过滤规则相对应的目标资源池,从而建立配置文件。

优选地,所述转发代理模块接收已启动的微服务功能模块发出的微服务消息,并得到所述微服务消息携带的统一资源定位符,在所述配置文件的访问控制列表过滤规则部分中,找到与所述统一资源定位符匹配的访问控制列表过滤规则,并确定所找到的访问控制列表过滤规则对应的具有多个微服务实例地址的目标资源池,从所述目标资源池中选取一个微服务实例地址作为目标微服务功能模块地址。

与现有技术相比较,本发明的有益效果在于:

本发明通过使用微服务架构,使在运行时不支持加载动态库的语言达到动态扩展软件功能的目的,并且在扩展软件功能或软件升级过程中不中断原有服务,大大提高了软件系统的可扩展性及可用性。

附图说明

图1是本发明实施例提供的基于微服务架构扩展软件功能的第一流程图;

图2是本发明实施例提供的基于微服务架构扩展软件功能装置的第一结构框图;

图3是本发明实施例提供的基于微服务架构扩展软件功能的第二流程图;

图4是本发明实施例提供的基于微服务架构扩展软件功能装置的第二结构框图;

图5是本发明实施例提供的装置工作时序图;

图6是本发明实施例提供的人工配置服务方式的示意图;

图7是本发明实施例提供的自动发现服务方式的示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

图1是本发明实施例提供的基于微服务架构扩展软件功能的第一流程图,如图1所示,步骤包括:

步骤S101:将软件系统分解成多个微服务功能模块。

按照领域驱动设计的方法,例如将系统功能按业务边界上下文方式,拆分为多个微服务功能模块,其中每个微服务功能模块启动一个独立进程,并提供RESTful的接口。

步骤S102:根据每个微服务功能模块的微服务信息,在转发代理模块中建立用于转发微服务功能模块的微服务消息的配置文件。

具体地说,微服务信息包括所述微服务功能模块的名称和网络地址,在转发代理模块中将所述微服务功能模块的名称作为访问控制列表(Access Control List,ACL)过滤规则,填充到所述预先设定的配置文件模版的ACL过滤规则部分,并将所述微服务功能模块的网络地址填充到所述配置文件模版的与所述ACL过滤规则相对应的目标资源池,从而建立配置文件。

转发代理模块实现的转发代理服务功能依赖于配置文件中的过滤转发规则,所述过滤转发规则中定义了统一资源定位符(Uniform Resource Locator,URL)的ACL过滤规则,一条ACL过滤规则对应一个目标资源池,在目标资源池中定义有若干个微服务实例,其中包含每个微服务的网络地址,若匹配该ACL过滤规则就到对应的目标资源池中取出某个微服务实例地址,然后拼接原URL相应部分进行微服务消息的转发。

步骤S103:所述转发代理模块根据所述配置文件,确定其收到的微服务消息的目标微服务功能模块地址,并将所述微服务消息转发给所述目标微服务功能模块地址对应的微服务功能模块。

具体地说,转发代理模块接收已启动的微服务功能模块发出的微服务消息,并得到所述微服务消息携带的URL,在所述配置文件的访问控制列表过滤规则部分中,找到与所述URL匹配的ACL过滤规则,并确定所找到的ACL过滤规则对应 的具有多个微服务实例的目标资源池,从所述目标资源池中选取一个微服务实例地址作为目标微服务功能模块地址,例如在目标资源池中选取性能最佳的微服务实例的微服务实例地址或者选取连接数最少的微服务实例的微服务实例地址,并将所述微服务消息转发至所选取的微服务实例地址对应的微服务功能模块。

步骤S104:在软件系统根据业务功能需求形成功能增强型微服务功能模块时,所述转发代理模块对所述功能增强型微服务功能模块的微服务信息进行收集,并利用所收集到的微服务信息,生成更新的配置文件,以便根据所述已更新的配置文件,对后续收到的微服务消息进行转发。

在软件系统根据业务功能需求形成功能增强型微服务功能模块以扩展或替代原有的微服务功能模块时,需要对现有的配置文件进行更新,更新过程与配置文件的建立过程类似。具体地说,当通过功能增强型微服务功能模块扩展原有微服务功能模块的软件功能时,将功能增强型微服务功能模块的名称作为ACL过滤规则,填充到所述ACL过滤规则部分,并将所述微服务功能模块的网络地址填充到与所述ACL过滤规则相对应的目标资源池,从而形成更新的配置文件;当使用功能增强型微服务功能模块替换原有微服务功能模块的软件功能时,使用功能增强型微服务功能模块的名称作为ACL过滤规则,替换ACL过滤规则部分中的原有微服务功能模块对应的ACL过滤规则,使用功能增强型微服务功能模块的网络地址替换原有微服务功能模块对应的网络地址,从而形成更新的配置文件。

转发代理模块在转发后续收到的微服务消息期间,该微服务消息是转发至原有的微服务功能模块还是转发至功能增强型微服务功能模块与该微服务消息所携带的URL有关。具体地说,在得到后续收到的微服务消息携带的URL之后,在所述配置文件的ACL过滤规则部分找到与所述URL匹配的ACL过滤规则,并确定所找到的ACL过滤规则对应的目标资源池,进而从所述目标资源池中选取一个微服务实例地址作为目标微服务功能模块地址,并将所述微服务消息转发至所选取的微服务实例地址对应的微服务功能模块或功能增强型微服务功能模块。

图2是本发明实施例提供的基于微服务架构扩展软件功能装置的第一结构框图,包括按照领域驱动设计的方法分解软件系统而得到的多个微服务功能模块,例如微服务功能模块1和微服务功能模块2等,以及转发代理模块20。

转发代理模块20用于根据每个微服务功能模块的微服务信息,建立用于转 发微服务功能模块的微服务消息的配置文件,并根据所述配置文件,确定其收到的微服务消息的目标微服务功能模块地址,并将所述微服务消息转发给所述目标微服务功能模块地址对应的微服务功能模块。具体地说,转发代理模块20接收已启动的微服务功能模块发出的微服务消息,并得到所述微服务消息携带的URL,在所述配置文件的访问控制列表过滤规则部分中,找到与所述统一资源定位符匹配的访问控制列表过滤规则,并确定所找到的访问控制列表过滤规则对应的具有多个微服务实例地址的目标资源池,从所述目标资源池中选取一个微服务实例地址作为目标微服务功能模块地址,从而将所述微服务消息转发给所述目标微服务功能模块地址对应的微服务功能模块。进一步说,转发代理模块20用于转发微服务之间的请求消息。其实现的转发代理服务依赖于转发规则的定义,该规则通常存储在转发代理的配置文件中。其中,转发规则定义如下:一、定义URL的ACL过滤规则,一条ACL过滤规则对应一个目标资源池;二、在目标资源池中定义若干个微服务实例,其中包含每个微服务的网络地址。若匹配该ACL过滤规则就到对应的目标资源池中取出某个微服务实例地址,然后拼接原URL相应部分进行转发。这样只需要定义不同的转发规则,就可以实现请求的定向转发,进而扩展功能。

当软件系统根据业务功能需求形成功能增强型微服务功能模块以扩展或替代原有的微服务功能模块时,转发代理模块20对所述功能增强型微服务功能模块的微服务信息进行收集,并利用所收集到的微服务信息,生成更新的配置文件,并根据所述已更新的配置文件,对后续收到的微服务消息进行转发。

图3是本发明实施例提供的基于微服务架构扩展软件功能的第二流程图,如图3所示,在图1所示实施例的基础上,进一步包括:

步骤S201:在将软件系统分解成多个微服务模块之后,通过扫描,发现当前已启动的微服务功能模块,并收集所述已启动的微服务功能模块的微服务信息。

步骤S202:对所收集的已启动的微服务功能模块的微服务信息进行注册,并对已注册成功的微服务信息进行存储,所述微服务信息包括微服务的名称和网络地址。

图4是本发明实施例提供的基于微服务架构扩展软件功能装置的第二结构 框图,如图4所示,与图2所示实施例比较,进一步包括扫描注册模块30和全局名字服务模块40。

扫描注册模块30用于在分解软件系统而得到多个微服务模块之后,通过扫描,发现当前已启动的微服务功能模块,并收集所述已启动的微服务功能模块的微服务信息。

全局名字服务模块40用于对所收集的已启动的微服务功能模块的微服务信息进行注册,并对已注册的微服务信息进行存储,所述微服务信息包括微服务的名称和网络地址。

也就是说,扫描注册模块30实时扫描微服务,并向全局名字服务模块40注册微服务信息。

图5是本发明实施例提供的装置工作时序图,如图5所示,基于微服务架构在运行时动态扩展软件功能的步骤包括:

步骤1和步骤2:在定义功能扩展点及接口,并将该功能的接口实现方式改变为微服务方式之后,启动微服务功能模块1和微服务功能模块2。

其中,所述功能扩展点为系统支持所要扩展的功能点,例如为了支持多种测试框架都能在系统中运行,需要定义“解析不同测试框架的用例文件”这一功能扩展点。接口就是该扩展点的具体定义,包括源和目的微服务以及传送的具体参数,以云测试系统为例,解析测试用例文件的接口包括框架类型、用例名称、用例路径等参数。

将系统功能按业务边界上下文拆分为微服务。每个微服务启动一个独立进程,提供RESTful的接口。整个系统是通过各个服务之间的HTTP消息通信协作完成业务功能,每个微服务可以独立部署、升级,还可以根据实际需要选择某种技术栈实现,而不影响其它微服务,从而改变了之前所有功能模块一起编译、打包、部署的生产方式。以云测试系统为例,将系统拆分为测试任务管理、用例库管理、匹配、调度、测试环境管理等多个微服务。

步骤3:扫描注册模块扫描所有微服务,发现已启动的微服务,并得到其微服务信息。

步骤4:扫描注册模块将微服务信息发送至全局名字服务模块进行注册。

步骤4.1:建立全局名字服务。

收集所有待扩展功能的微服务的注册消息,保存这些微服务的相关信息,如名称和网络地址。

步骤5:转发代理模块(即反向代理模块)从全局名字服务模块获取微服务信息,包括微服务的名称和网络地址。

步骤6:建立转发代理服务。

转发代理模块根据微服务信息生成用来转发请求的配置文件,提供对请求消息的转发服务。

其中,生成配置文件的步骤为:预先设定配置文件的模板,其中微服务的名称和网络地址为变量。循环所有的微服务,将名称写在配置文件的ACL规则部分,将网络地址填充到资源池部分,即可生成转发规则配置文件(即配置文件)。

步骤7:微服务功能模块1向转发代理模块发送请求消息。

步骤7.1:转发代理模块根据配置文件中的转发规则将所述请求消息转发至微服务功能模块2处理。

本发明实现了软件功能扩展,即提供符合扩展接口的新的实现方式,并以微服务的形式部署。以云测试系统为例,需要解析RobotFramework框架的用例,就需要提供一个解析用例的微服务。该微服务的具体实现方式和其它测试框架的解析方法是不同的。部署的方法为,建立Web服务器,提供RESTful接口支持解析方法,返回解析结果,用例库中的用例列表。

微服务之间采用轻量级通信协议(例如RESTful,RPC等),微服务发送带有特定URL的请求,转发代理根据转发规则将该请求转发到带有扩展功能的微服务上,从而实现功能扩展。

图6是本发明实施例提供的人工配置服务方式的示意图,如图6所示,假设根据微服务的名称和网络地址,人工编辑转发代理模块的配置文件。然后,启动各个微服务进程,例如启动微服务a和微服务b。

步骤1:微服务a将请求消息1发送至具有转发代理服务功能的转发代理模块。

步骤2:转发代理模块根据收到的请求消息1中的URL地址及配置文件中的转发规则找到对应的微服务b,并将请求消息1转发至微服务b。

当需要使用新的微服务b’来扩展或替换原来的微服务b时,修改转发代理 模块的配置文件,增加微服务b’的相关信息及转发规则。

步骤3:转发代理模块接收来自微服务模块a的请求消息3。

步骤4:根据配置文件中的新的匹配规则将请求消息3转发至微服务b’处理,从而实现在不中断系统原有服务的情况下,实现系统功能动态扩展。

需要注意的是,上述步骤中的请求消息1和请求消息3携带的URL不同,因此,转发代理模块可以根据不同的URL匹配到不同的ACL规则,从而找到不同的扩展服务。

图7是本发明实施例提供的自动发现服务方式的示意图,如图7所示,与图6所示的人工配置服务方式相比,本实施例为实现自动发现微服务,增加了用于实现扫描注册服务功能的扫描注册模块和用于实现全局名字服务功能的全局名字服务模块,具体步骤包括:

步骤1和步骤2:微服务a和微服务b两个业务功能启动后,扫描注册模块通过分别向微服务a和微服务b发送实时扫描消息,发现当前启动的微服务a和微服务b。

步骤3:扫描注册模块将携带微服务a和微服务b的微服务信息的消息发给给全局名字服务模块缓存。

步骤4:全局名字服务模块将携带当前最新的微服务信息的消息发送给转发代理模块,由转发代理模块根据所述为服务信息生成配置文件。

步骤5:转发代理模块接收微服务a发送的请求消息5。

步骤6:转发代理模块根据配置文件中的目标服务信息匹配和转发规则,将请求消息5转发至微服务模块b进行处理。

当根据业务功能需求形成功能增强的微服务b’时,正常部署启动运行微服务b’。

步骤7:扫描注册模块通过向微服务b’发送实时扫描消息,发现新启动的微服务b’。

步骤8:扫描注册模块将携带微服务b’的微服务信息的消息发送给全局名字服务模块。

步骤9:全局名字服务模块在收到扫描注册模块发送的消息之后,更新本地服务缓存,即更新其保存的微服务信息,并通知转发代理模块,使转发代理模块 根据更新的微服务信息,更新其配置文件。

步骤10:转发代理模块接收微服务a发送的请求消息10。

步骤11:转发代理模块根据当前配置文件中的最新目标信息匹配和转发规则,将微服务a发送的请求消息转发给功能微服务b’,最终实现功能扩展。

综上所述,本发明使用微服务架构,对原有系统按照领域驱动设计的方法分解成多个微服务并独立部署,各微服务之间通过REST接口通信协作,实现整个系统的功能。按照上述模块划分,系统每个功能模块都是可扩展的,功能模块在部署时,扫描注册模块会自动发现已启动的微服务,并将微服务注册到全局名字服务模块,全局名字服务模块将存储所发现的微服务信息。同时,转发代理模块会周期性地从全局名字服务模块查询当前可用的微服务信息,并生成用于代理转发的配置文件,以便对微服务功能模块的请求进行正确转发。

尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1