一种分布式服务注册方法及装置与流程

文档序号:17817953发布日期:2019-06-05 21:58阅读:147来源:国知局
一种分布式服务注册方法及装置与流程

本发明涉及软件工程领域,更具体地,涉及一种分布式服务注册方法及装置。



背景技术:

在微服务架构生态系统中,服务的注册和发现是基础支撑。服务的注册就是将微服务的运行信息写入到存储节点或集群,服务发现就是从存储节点或集群读取微服务的运行信息。基于分布式服务的服务信息,服务网关可实现负载均衡功能,应用管理中心可实现应用运行的监控。

目前实现服务注册的常用方案是在应用内实现服务注册,即开发人员将服务注册功能以工具包的方式提供给应用程序,然后应用程序通过主动调用服务注册功能来完成服务信息的注册。

但应用内实现服务注册这种方案会有如下不足:1)应用程序所采用的编程语言众多,如c++、php、java、go等,需要为每种语言都提供服务注册功能的工具包,并进行持续维护,成本很高;2)服务注册工具包的升级困难,因为这会造成依赖工具包的应用程序更新工具包版本,并且测试重新发布,在实践中,这是很困难的。



技术实现要素:

为了解决应用内服务注册的方式所存在的以上问题,本发明提供一种分布式服务注册方法及装置。

根据本发明的一个方面,提供一种分布式服务注册方法,以守护进程的形式定时执行以下步骤:

s1,对目标应用本地的配置文件进行解析,获得用于获取所述目标应用所对应的服务信息的http接口;

s2,根据所述http接口向所述目标应用发起http请求,以获取所述目标应用所对应的服务信息;

s3,将所述服务信息转换为服务注册信息,并将所述服务注册信息写入分布式存储节点。

其中,步骤s1中所述用于获取所述目标应用所对应的服务信息的http接口包括:服务监听的本机端口和获取所述目标应用运行状态的httpuri接口。

其中,所述步骤s2进一步包括:

根据所述http接口所包含的信息构造完整的httpurl地址,并向所述httpurl地址发起获取所述目标应用所对应的服务信息的http请求。

其中,所述目标应用所对应的服务信息包括:所述目标应用的名称、所述目标应用的实例、所述目标应用的版本信息和可自定义的扩展信息。

其中,所述服务注册信息包括:所述目标应用的名称、所述目标应用的id、所述目标应用的版本信息、所述目标应用所在的ip地址、所述目标应用所在的主机名和可自定义的扩展信息。

其中,步骤s3中将所述服务注册信息写入分布式存储节点的步骤进一步包括:

将所述服务注册信息以key-value的形式写入到分布式存储节点中,同时设置所述服务注册信息的过期时间。

其中,所述分布式存储节点的类型包括:redis、mysql、etcd和zookeeper中的一种。

根据本发明的另一个方面,提供一种分布式服务注册装置,包括:

解析子单元,用于对目标应用本地的配置文件进行解析,获得用于获取所述目标应用所对应的服务信息的http接口;

服务信息获取子单元,用于根据所述http接口向所述目标应用发起http请求,以获取所述目标应用所对应的服务信息

注册子单元,用于将所述服务信息转换为服务注册信息,并将所述服务注册信息写入分布式存储节点。

根据本发明的另一个方面,提供一种分布式服务注册设备,包括存储器、处理器、以及总线,

所述处理器和存储器通过所述总线完成相互间的通信;

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述存储器中的程序指令,以执行如上所述的方法。

根据本发明的又一个方面,提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上所述的方法。

本发明提出的一种分布式服务注册方法及装置,为不同类型不同语言的分布式服务提供了统一的服务注册模型,需要服务注册的应用仅需要提供获取服务信息的http接口即可,本发明的服务注册方法属于应用外的注册方式,与应用程序是分离的,避免了应用内注册方式的缺点,不需要为不同语言的应用开发对应的服务注册工具包且在需要对服务注册进程进行升级时不需要对应用程序进行升级。

附图说明

图1为根据本发明一实施例提供的一种分布式服务注册方法的流程示意图;

图2为根据本发明一实施例提供的一种分布式服务注册方法的实现交互图;

图3为根据本发明另一实施例提供的一种分布式服务注册装置的结构示意图;

图4为根据本发明另一实施例提供的一种分布式服务注册设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他的实施例,都属于本发明保护的范围。

如图1所示,为本发明一实施例提供的一种分布式服务注册方法的流程示意图,具体地,以守护进程的形式定时执行以下步骤:

s1,对目标应用本地的配置文件进行解析,获得用于获取所述目标应用所对应的服务信息的http接口;

s2,根据所述http接口向所述目标应用发起http请求,以获取所述目标应用所对应的服务信息;

s3,将所述服务信息转换为服务注册信息,并将所述服务注册信息写入分布式存储节点。

本发明所提供的分布式服务注册方法,其具体实现是以守护进程的形式在每个服务器上运行,为方便叙述,用服务注册进程表示该守护进程,服务注册进程与服务器和分布式存储节点的具体交互过程如图2所示。

s1中,目标应用是指需要接入服务注册功能的应用。目标应用本地的配置文件是指目标应用所在服务器本地的配置文件。配置文件的内容由多行port/readyuri构成,每个需要接入服务注册功能的应用都对应一行port/readyuri信息,所述用于获取所述目标应用所对应的服务信息的http接口即是指port/readyuri,即服务注册进程根据该http接口就可以获取该目标应用所对应的服务信息。其中,port表示监听各个需要接入服务注册功能的应用的本机端口;readyuri用于将该需要接入服务注册功能的应用的运行状态告诉服务注册进程。例如,名为app1的应用需要使用服务注册功能,那么应用开发者需要提供查询该运行状态的httpuri,假设app1应用的http监听端口为9001,那么在该应用所在服务器本地的配置文件中就会有一行信息为9001/readyuri。即服务注册进程对目标应用本地的配置文件进行解析,获得用于获取所述目标应用所对应的服务信息的http接口。

对于需要接入服务注册功能的应用,服务注册进程需要通过该目标应用所提供的http接口获取到所述目标应用的服务信息。因此,在s2中,根据所述http接口向所述目标应用发起http请求,以获取所述目标应用所对应的服务信息。其中,根据所述http接口向所述目标应用发起http请求是指,服务注册进程获得所述http接口后,会根据该http接口构造一个完整的httpurl地址,例如:http://localhost:port/readyuri,然后向该httpurl地址发起http请求,此http请求即用于获取目标应用所对应的服务信息。服务注册进程定时轮询(如每隔10s)所有需要进行服务注册的应用的http接口,以获取每个需要信息服务注册的应用所对应的服务信息。

s3中,分布式存储节点用于存储服务注册信息,需要保证高可用。本发明实施例不限定分布式存储节点的类型。服务注册信息统一采用key-value的形式存储至分布式存储节点中。服务注册进程获取到目标应用所对应的服务信息后,首先需要将服务信息转换为服务注册信息,然后将服务注册信息写入分布式存储节点,至此完成服务注册过程。

服务注册进程会以定时任务的形式不断地重复执行上述各步骤。

本发明提出的一种分布式服务注册方法,为不同类型不同语言的分布式服务提供了统一的服务注册模型,需要服务注册的应用仅需要提供获取服务信息的http接口即可,本发明的服务注册方法属于应用外的注册方式,与应用程序是分离的,避免了应用内注册方式的缺点,不需要为不同语言的应用开发对应的服务注册工具包且在需要对服务注册进程进行升级时不需要对应用程序进行升级。

基于上述实施例,步骤s1中所述用于获取所述目标应用所对应的服务信息的http接口包括:服务监听的本机端口和获取所述目标应用运行状态的httpuri接口。

如上一实施例所述,所述用于获取所述目标应用所对应的服务信息的http接口即解析本地配置文件所获得的port/readyuri信息。其中,port即表示服务监听的本机端口,readyuri即表示获取所述目标应用运行状态的httpuri接口。服务注册进程通过该http接口可以获取到目标应用的运行状态,进而获得目标应用所对应的服务信息。

基于上述实施例,所述步骤s2进一步包括:

根据所述http接口所包含的信息构造完整的httpurl地址,并向所述httpurl地址发起获取所述目标应用所对应的服务信息的http请求。

具体地,如上一实施例所述,服务注册进程根据所述htttp接口所包含的port/readyuri信息,构造一个完整的httpurl地址,例如:http://localhost:port/readyuri,向该url地址发起http请求,以获取目标应用所对应的服务信息。

基于上述实施例,所述目标应用所对应的服务信息包括:所述目标应用的名称、所述目标应用的实例、所述目标应用的版本信息和可自定义的扩展信息。

对于需要接入服务注册功能的应用,服务注册进程通发起http请求,要求readyuri接口必须返回给服务注册进程相应的服务信息。服务信息的具体结构可以用如下的类结构表示:

其中,servicename用于表示应用的名称,serviceid用于表示应用实例,即运行的应用,serviceversion表示应用的版本,extra用于扩展,不同的应用可以自定义extra的内容。

基于上述实施例,所述服务注册信息包括:所述目标应用的名称、所述目标应用的id、所述目标应用的版本信息、所述目标应用所在的ip地址、所述目标应用所在的主机名和可自定义的扩展信息。

具体地,目标应用所对应的服务注册信息用如下的类结构表示:

其中,servicename用于表示应用的名称,serviceid用于表示应用实例,即运行的应用,serviceversion表示应用的版本,ip表示应用所在服务器的ip地址,hostname表示应用所在服务器的主机名,extra用于扩展,不同的应用可以自定义extra的内容。

基于上述实施例,步骤s3中将所述服务注册信息写入分布式存储节点的步骤进一步包括:

将所述服务注册信息以key-value的形式写入到分布式存储节点中,同时设置所述服务注册信息的过期时间。

本发明实施例中不限定分布式存储节点的类型,但是不管是何种分布式存储节点,服务注册信息均以key-value的形式存储至分布式存储节点中。其中,使用如下key来保存服务注册信息:/servicename/serviceid。该key所对应的服务注册信息使用如上一实施例所述的类结构来进行描述。存储到/servicename/serviceid这个key上的服务注册信息是serviceinfo的json格式的数据。

服务注册进程将所述服务注册信息以key-value的形式写入到分布式存储节点的同时,为每个key(/servicename/serviceid)设置过期时间,例如30秒,如果该key在30s后没有被服务注册进程再次更新,那么分布式存储节点就会对该key进行删除。服务注册进程会以定时任务的形式不断地重复执行以下步骤:1)调用每个需要引入服务注册功能的应用的/readyuri接口,获取服务信息并判断服务信息是否有更新;2)将所获取到的服务信息转换为服务注册信息,并重新写入到分布式存储节点中该应用所对应的key(/servicename/serviceid)上,同时设置该key的过期时间。

基于上述实施例,所述分布式存储节点的类型包括:redis、mysql、etcd和zookeeper中的一种。

分布式存储节点用于存储服务注册信息,可以选择redis,mysql,etcd,zookeeper作为存储节点,但存储节点需要保证高可用,这里以etcd为例,进一步阐述服务注册进程如何与etcd交互。首先,服务注册进程将所获取到的服务信息(serviceinfo)转换为服务注册信息(registerinfo),然后使用etcd4j(一种访问etcd的java客户端,该客户端封装了对etcd的http请求)将每个服务的注册信息写入到etcd中,并且在写入的同时,为每个key(/servicename/serviceid)设置过期时间,如30s,如果该key在30s后没有被服务注册进程再次更新,那么etcd会对该key进行删除。服务注册进程会以定时任务的形式不断的重复执行以下步骤,1)调用每个服务的/readyuri接口,判断服务的信息。2)将服务信息转换为服务注册信息,并重新写入到etcd的/servicename/serviceid这个key上,同时设置该key的过期时间。

如图3所示,为本发明另一实施例提供的一种分布式服务注册装置的结构示意图,包括:解析子单元31、服务信息获取子单元32和注册子单元33,其中,

解析子单元31,用于对目标应用本地的配置文件进行解析,获得用于获取所述目标应用所对应的服务信息的http接口;

服务信息获取子单元32,用于根据所述http接口向所述目标应用发起http请求,以获取所述目标应用所对应的服务信息;

注册子单元33,用于将所述服务信息转换为服务注册信息,并将所述服务注册信息写入分布式存储节点。

具体地,目标应用是指需要接入服务注册功能的应用。目标应用本地的配置文件是指目标应用所在服务器本地的配置文件。配置文件的内容由多行port/readyuri构成,每个需要接入服务注册功能的应用都对应一行port/readyuri信息,所述用于获取所述目标应用所对应的服务信息的http接口即是指port/readyuri,即根据该http接口就可以获取该目标应用所对应的服务信息。其中,port表示监听各个需要接入服务注册功能的应用的本机端口;readyuri是httpuri,用于将该需要接入服务注册功能的应用的运行状态告诉给服务信息获取子单元32。例如,名为app1的应用需要使用服务注册功能,那么应用开发者需要提供查询该运行状态的httpuri,假设app1应用的http监听端口为9001,那么在该应用所在服务器本地的配置文件中就会有一行信息为9001/readyuri。即解析子单元31对目标应用本地的配置文件进行解析,获得用于获取所述目标应用所对应的服务信息的http接口发送给服务信息获取子单元32。

对于需要接入服务注册功能的应用,服务信息获取子单元32需要通过该目标应用所提供的http接口获取到所述目标应用的服务信息。因此,服务信息获取子单元32根据所述http接口向所述目标应用发起http请求,以获取所述目标应用所对应的服务信息。其中,根据所述http接口向所述目标应用发起http请求是指,服务信息获取子单元32获得所述http接口后,会根据该http接口构造一个完整的httpurl,例如:http://localhost:port/readyuri,然后向该httpurl发起http请求,此http请求即用于获取目标应用所对应的服务信息。服务信息获取子单元32定时轮询(如每隔10s)所有需要进行服务注册的应用的http接口,以获取每个需要信息服务注册的应用所对应的服务信息,并将所获取到的服务信息发送给注册子单元33。

分布式存储节点用于存储服务注册信息,需要保证高可用。本发明实施例不限定分布式存储节点的类型。服务注册信息统一采用key-value的形式存储至分布式存储节点中。注册子单元33获取到目标应用所对应的服务信息后,首先需要将服务信息转换为服务注册信息,然后将服务注册信息写入分布式存储节点,至此完成服务注册过程。

本发明提出的一种分布式服务注册装置,为不同类型不同语言的分布式服务提供了统一的服务注册模型,需要服务注册的应用仅需要提供获取服务信息的http接口即可,实现了应用外的注册方式,与应用程序是分离的,避免了应用内注册方式的缺点,不需要为不同语言的应用开发对应的服务注册工具包且在需要对服务注册进程进行升级时不需要对应用程序进行升级。

其中,所述用于获取所述目标应用所对应的服务信息的http接口包括:服务监听的本机端口和获取所述目标应用运行状态的httpuri接口。

所述服务信息获取子单元具体用于根据所述http接口所包含的信息构造完整的httpurl地址,并向所述httpurl地址发起获取所述目标应用所对应的服务信息的http请求。

所述目标应用所对应的服务信息包括:所述目标应用的名称、所述目标应用的实例、所述目标应用的版本信息和可自定义的扩展信息。

所述注册子单元具体用于将所述服务注册信息以key-value的形式写入到分布式存储节点中,同时设置所述服务注册信息的过期时间。

其中,所述服务注册信息包括:所述目标应用的名称、所述目标应用的id、所述目标应用的版本信息、所述目标应用所在的ip地址、所述目标应用所在的主机名和可自定义的扩展信息。

其中,所述分布式存储节点的类型包括:redis、mysql、etcd和zookeeper中的一种。

如图4所示,为本发明另一实施例提供的一种分布式服务注册设备的结构示意图,包括存储器41、处理器42、以及总线43,

所述处理器42和存储器41通过所述总线43完成相互间的通信;

所述存储器41存储有可被所述处理器42执行的程序指令,所述处理器42调用所述存储器41中的程序指令,以执行如上述各实施例所述的方法,例如包括:以守护进程的形式定时执行以下步骤:s1,对目标应用本地的配置文件进行解析,获得用于获取所述目标应用所对应的服务信息的http接口;s2,根据所述http接口向所述目标应用发起http请求,以获取所述目标应用所对应的服务信息;s3,将所述服务信息转换为服务注册信息,并将所述服务注册信息写入分布式存储节点。

本发明又一实施例,提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上述各实施例所述的方法,例如包括:以守护进程的形式定时执行以下步骤:s1,对目标应用本地的配置文件进行解析,获得用于获取所述目标应用所对应的服务信息的http接口;s2,根据所述http接口向所述目标应用发起http请求,以获取所述目标应用所对应的服务信息;s3,将所述服务信息转换为服务注册信息,并将所述服务注册信息写入分布式存储节点。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的一种分布式服务注册设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后,本发明的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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