一种Dubbo框架集成Istio服务网格的方法与流程

文档序号:20917227发布日期:2020-05-29 13:41阅读:2187来源:国知局
一种Dubbo框架集成Istio服务网格的方法与流程

本发明涉及云计算技术领域,具体提供一种dubbo框架集成istio服务网格的方法。



背景技术:

目前云计算技术正在趋于成熟,使用部署在云上的应用、服务越来越多。随着软件的发展和演变,微服务架构成为了现在主流的架构,在这种架构下,不同功能的程序被当作一个服务部署在运行环境中,在这里也就是部署在云中。而dubbo是一个远程服务调用的分布式框架,可以透明化服务之间的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何api侵入。但是dubbo并没有服务治理的功能,如果与istio服务网格进行结合,就可以弥补这一功能的缺失。但是直接使用dubborpc远程调用的方式,就会绕过istio服务治理的范围,所以将dubbo框架和istio服务网格进行深度的结合,以实现治理dubbo服务的目的成为亟待解决的问题。



技术实现要素:

本发明的技术任务是针对上述存在的问题,提供一种可以将基于dubbo的业务无缝的在云上部署使用,减少服务故障率,并对服务之间通信结果和通信效率都可以方便的进行数据统计的dubbo框架集成istio服务网格的方法。

为实现上述目的,本发明提供了如下技术方案:

一种dubbo框架集成istio服务网格的方法,该方法将dubbo框架的服务发现和远程调用功能与istio服务网格的服务治理功能深度结合,实现对使用dubbo服务的应用进行服务治理。

作为优选,该dubbo框架集成istio服务网格的方法包括以下步骤:

s1、改造istiopilot组件,增加监控注册中心的类型,将获取到的数据转换成通用配置下发到数据层面;

注册中心存储着服务提供方注册的远程服务,并将其所管理的服务列表通知给服务调用方,且注册中心和提供方和服务调用方之间均保持长连接,可以获取提供方发布的服务的变化情况,并将最新的服务列表推送给服务调用方。pilot起到istio控制层面到数据层面envoy之间的桥梁作用,并监控服务注册中心(如kubernetes)的服务注册情况。在kubernetes环境下,会监控service、endpoint、pod、node等资源信息。由以上可知只需要pilot组件来监听dubbo的注册中心,获取里面的服务数据,并及时将服务的变化下发到数据层面的envoy中,这样就可以保证服务发现的功能可用。现在的pilot监控的注册中心主要是kubernetes,并没有监控dubbo常用注册中心的功能,因此需要增加监控注册中心的类型。

s2、数据层面适配dubbo协议,在envoy组件中增加处理dubbo协议的filter接口;

在istio服务网格中,数据层面使用envoy组件,所有服务流量将由它完成服务发现与路由中转。因此需要在envoy中增加一个处理dubbo协议的filter接口。

s3、dubbo框架和istio服务网格进行交互。

作为优选,步骤s1中增加的监控注册中心类型为zookeeper。

作为优选,envoy组件收到dubborpc请求动态地创建fitler去处理,将这个请求转发到相应的filter进行处理,在filter中获取到dubborpc请求要访问的服务,将服务提取出来,并把请求转发到其他的filter接口,进行后续的流量治理。

作为优选,步骤s3具体包括以下流程:

1)系统启动,首先启动监控注册中心zookeeper和istio控制层面的pilot组件;

2)dubbo应用启动,将dubbo自身的信息注册到监控注册中心zookeeper当中;

3)dubbo组件间的通信,b组件调用a组件的服务,b组件发送一个rpc请求,dubbo发送rpc请求时,找到a组件的服务提供者的所有实例的ip地址,并选择一个ip地址作为目的地址进行访问。

作为优选,istio控制层面的pilot组件监听zookeeper中存储的dubbo服务提供者的信息,当服务发生改变时,pilot及时感知。

作为优选,dubbo自身的信息注册到zookeeper后,pilot组件感知到注册中心的数据发生的变化,拉取新的服务配置,pilot组件将配置下发到每个数据层面,即envoy组件里。

作为优选,b组件调用调用a组件服务时,用a组件的服务名称作为目的地址来访问。

作为优选,b组件发送一个rpc请求之后,被数据层面的envoy拦截,envoy判断出请求是dubbo协议的请求,将请求转给envoyfilter。envoyfilter提取出这个请求的目的地址,将这个请求转给filter链中的下一个处理filter。在这之前pilot已经通过监控注册中心zookeeper,获取了服务对应的所有实例ip地址,并将这个配置下发了envoy,所以这个时候envoy可以找到目的地址所对应的所有实例ip,并选择一个实例ip,将请求发送出去。

与现有技术相比,本发明的dubbo框架集成istio服务网格的方法具有以下突出的有益效果:

(一)所述dubbo框架集成istio服务网格的方法将基于dubbo的业务可以无缝的在云上部署使用,减少服务故障率;

(二)可以对使用dubborpc进行通信的服务纳入istio服务网格的范围,对这些服务进行流量治理;

(三)可以更加方便的监控使用dubborpc进行通信的服务,对服务之间通信结果,通信效率都可以方便的进行数据统计,具有良好的推广应用价值。

附图说明

图1是本发明所述dubbo框架集成istio服务网格的方法中dubbo应用启动时的配置变化流程图;

图2是本发明所述dubbo框架集成istio服务网格的方法中dubbo应用之间通信的流程图。

具体实施方式

下面将结合附图和实施例,对本发明的dubbo框架集成istio服务网格的方法作进一步详细说明。

实施例

本发明的dubbo框架集成istio服务网格的方法,将dubbo框架的服务发现和远程调用功能与istio服务网格的服务治理功能深度结合,实现对使用dubbo服务的应用进行服务治理。

该dubbo框架集成istio服务网格的方法包括以下步骤:

s1、改造istiopilot组件,增加监控注册中心的类型,将获取到的数据转换成通用配置下发到数据层面。

注册中心存储着服务提供方注册的远程服务,并将其所管理的服务列表通知给服务调用方,且注册中心和提供方和服务调用方之间均保持长连接,可以获取提供方发布的服务的变化情况,并将最新的服务列表推送给服务调用方。pilot起到istio控制层面到数据层面envoy之间的桥梁作用,并监控服务注册中心(如kubernetes)的服务注册情况。在kubernetes环境下,会监控service、endpoint、pod、node等资源信息。由以上可知只需要pilot组件来监听dubbo的注册中心,获取里面的服务数据,并及时将服务的变化下发到数据层面的envoy中,这样就可以保证服务发现的功能可用。现在的pilot监控的注册中心主要是kubernetes,并没有监控dubbo常用注册中心的功能,因此需要增加监控注册中心的类型。增加的监控注册中心类型为zookeeper。

s2、数据层面适配dubbo协议,在envoy组件中增加处理dubbo协议的filter接口。

在istio服务网格中,数据层面使用envoy组件,所有服务流量将由它完成服务发现与路由中转。因此需要在envoy中增加一个处理dubbo协议的filter接口。envoy组件收到dubborpc请求动态地创建fitler去处理,将这个请求转发到相应的filter进行处理,在filter中获取到dubborpc请求要访问的服务,将服务提取出来,并把请求转发到其他的filter接口,进行后续的流量治理。

s3、dubbo框架和istio服务网格进行交互。

具体包括以下流程:

1)系统启动,首先启动监控注册中心zookeeper和istio控制层面的pilot组件。

istio控制层面的pilot组件监听zookeeper中存储的dubbo服务提供者的信息,当服务发生改变时,pilot及时感知。

2)dubbo应用启动,如图1所示,将dubbo自身的信息注册到监控注册中心zookeeper当中。如果一个应用有三个实例的话,注册到zookeeper中的信息包含这个方法的名称(例如com.xxx.api.interface.yyy)和这个方法的服务提供者(provider)ip地址的列表。

dubbo自身的信息注册到zookeeper后,pilot组件感知到注册中心的数据发生的变化,拉取新的服务配置,也就是表格中的方法的名称“com.xxx.api.interface.yyy”和该名称下面的所有provider中的ip地址信息。之后pilot会将这些配置下发到每个数据层面,也就是envoy组件里面。

3)dubbo组件间的通信,b组件调用a组件的服务,b组件发送一个rpc请求,dubbo发送rpc请求时,找到a组件的服务提供者的所有实例的ip地址,并选择一个ip地址作为目的地址进行访问。

如图2所示,如果b组件想要调用a组件(com.xxx.api.interface.yyy)的服务,b组件就要发送一个rpc请求,在这里与一般的请求不同的是,通常dubbo发送rpc请求的时候,会找到a组件的服务提供者的所有实例的ip地址,并选择一个ip地址作为目的地址进行访问。在这里这个流程会发生变化,在调用a组件服务的时候,不需要获取a组件中服务提供者的ip地址,而是用a组件的服务名称“com.xxx.api.interface.yyy”作为目的地址来访问。这个请求发出之后,会被数据层面的envoy拦截,envoy会判断出这个请求是dubbo协议的请求,然后将请求转给envoyfilter。envoyfilter提取出这个请求的目的地址是com.xxx.api.interface.yyy,下一步将这个请求转给filter链中的下一个处理filter。在这之前pilot已经通过监视注册中心zookeeper,获取了com.xxx.api.interface.yyy这个服务对应的所有实例ip地址,并将这个配置下发了envoy,所以这个时候envoy可以找到com.xxx.api.interface.yyy目的地址所对应的所有实例ip,并选择一个实例ip,将请求发送出去。

以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

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