一种用于现代分布式微服务架构的通信方法与系统与流程

专利2022-06-30  65


本发明属于通信技术领域,涉及大型数据中心的微服务治理,特别涉及一种用于现代分布式微服务架构的通信方法与系统。



背景技术:

在现代互联网应用中,绝大多数业务解决方案都是将业务流程拆分为多个细分步骤,每个步骤只负责完成一个任务。然后在系统设计上将每个任务设计为一个微小的服务,称为微服务。一个完整的业务服务通常由多个微服务组成,这样的设计不仅降低了系统的耦合度,同时也提高了代码的复用效率。

与此同时,如果一个完整的业务由多个微服务组成,那么当用户请求业务时,多个微服务之间需要通过协作来共同完成该业务需求。微服务之间的协作必须通过某种特定的相互通信的方式来实现。目前来说,大部分的微服务之间的通信方法都是使用为互联网设计的http协议或者rpc协议。

事实上,为了提高业务吞吐量和容灾,微服务一般都有多个实例,且运行在不同的物理服务器上,同时微服务之间也可能存在跨数据中心调用的情况。现有的微服务设计都依赖于一个带有负载均衡的调用框架,然后在该框架上实现负载均衡。由于缺乏统一的实践标准,这样的实现都依赖负载均衡框架进行多语言开发,以适配不同语言开发的微服务。由于大型公司都有自己的基础设施,缺乏统一的标准建议,这一类通信方法无法做到通用。同时为了保证高并发的处理能力,还会涉及集群调度,节点动态伸缩,如果不小心设计,极有可能出现服务“雪崩”的情况。

除此之外,在复杂业务中,涉及到的微服务非常多,微服务之间的调用链条也会十分冗长,微服务之间的相互依赖关系难以梳理清楚。上述问题,很容易导致微服务的开发者自身很难确定自己的服务会被谁调用,无法确定微服务的上下游,进而导致难以进行优化,追踪,调试。

不同的微服务之间还需要界定访问权限,以防止意外的信息泄漏和数据污染,随着微服务调用链的增长,访问权限控制的复杂度也随之上升,从而加大了整体服务的响应时间和运算开销。目前微服务的权限控制实现主要有两个方向,一个是在容器化的调用场景下使用容器编排框架的访问权限控制实现;一个是在微服务内部使用黑/白名单方式实现。前者是一个较好的解决方案,但没有和通信框架结合,后者实现代价较大,且不具备扩展性。

综上,传统的微服务存在一下几个问题:

(1)高并发下设计复杂,实现困难。

(2)微服务之间权限控制缺乏统一标准,实现效率低下。

(3)流量控制、负载均衡均需要单独的设计。

(4)缺乏请求追踪标准,难以追踪微服务调用链,导致业务难以调试。

(5)缺乏统一的度量方案,导致难以实现通用的监控报警设施。

就目前来说,微服务之间多使用rpc通信,通信的数据序列化方法多采用protobuf,虽然有着相似的工业实现,但是缺乏统一的标准。

综上,设计一个通用的微服务通信协议,提供统一的、可控的标准,能够在分布式环境下优雅地解决以上问题是分布式微服务的必然发展方向。



技术实现要素:

为了克服上述现有技术的缺点,本发明的目的在于提供一种用于现代分布式微服务架构的通信方法与系统,在基于容器、虚拟机、虚拟网络的现代分布式服务架构下,以及使用现有rpc通信模式,protobuf数据序列化方法的基础上,定义了基于该协议的分布式微服务场景下的应用层通信方式,旨在解决上文中提出的微服务架构存在的五个问题之部分或者全部,并提出相关实施的标准。

为了实现上述目的,本发明采用的技术方案是:

一种用于现代分布式微服务架构的通信方法,在每一个微服务节点上运行数据代理,并利用控制中心控制整个微服务网络的行为,每个微服务的所有消息收发都由数据代理完成,微服务代码只与数据代理沟通,将数据放入数据代理中与osi模型的应用层之间进行传输,数据代理负责完成其余所有操作。

所述控制中心是一个中心控制节点,负责调控所有的数据代理节点,实现服务注册、配置下发、访问权限控制配置,拥有控制数据代理的权限;所述数据代理是对上层应用的接口,提供统一的消息收发和服务查询接口,负责实现微服务环境中的服务发现、流量控制和负载均衡访问,并接受控制中心的控制,提供流量监控、请求追踪的功能。

所述控制中心拥有从数据代理收集任何数据的能力,从而根数据据代理的情况详细感知整个网络负载状况。

所述微服务间的数据通信统一由和每个微服务在同一个容器或pod的数据代理传输,通信流程为:微服务将需要调用的服务的名字、接口和数据传递给数据代理,由数据代理负责将消息传递到被调服务的一个实例上,该实例会被数据代理调用,并将数据交给被调服务处理,被调服务处理完成后将结果返回给被调方的数据代理,被调方的数据代理再将数据返回给调用方的数据代理,最终调用方的数据代理将消息返回给调用方的微服务,完成数据一次传输。

在控制中心侧,控制中心提供不同服务之间的访问流量控制配置,控制变量包括:微服务的访问权限,定义了某一个微服务能够被调用的条件;微服务的访问熔断措施,定义了当大量流量激增时对服务的保护方式;微服务的负载均衡规则,定义了当为服务有多个运行的实例时,负载分配的方式,这些配置内容将会被下发到数据代理上;

在数据代理侧,每一个数据代理都会根据自己的服务名字接收到对应的配置内容,配置内容包括可访问服务名字列表和ip列表以及熔断策略和负载均衡配置,并且周期性地和控制中心交互更新所述配置内容,数据代理根据所述的配置决定是否发送来自应用的请求,并适配对应的熔断策略负载均衡策略。

所述微服务通过数据代理发送的数据都在数据头部增加一个数据代理头,数据代理头内包含了可自定义的信息,用户能够通过为数据代理编写扩展,扩展根据数据代理头进行的额外操作。

所述可自定义的信息包括请求染色id、服务名称以及缓存控制信息,其中染色id是一种请求追踪方案,用户通过定义染色id,以用户的uid、sessionid或者自定义的请求键值作为染色id,数据代理则根据染色id自动上报数据流向情况,从而能够获取一个请求从外部进入数据中心后,在所途径的微服务链条上的处理路径,便于追踪请求和排查错误,且上层应用能够读取染色id,提供了充足的扩展性。

当数据中心内的微服务完成用户请求处理后,将处理结果传递给数据中心的网关,由网关负责最终的数据交付。

本发明还提供了一种用于现代分布式微服务架构的通信系统,介于用户以微服务形式开发的业务服务应用和osi模型的应用层之间,向下对接osi模型的应用层,进行底层网络通信,向上对接用户,即开发者,作为消息传递通道,从而接管原有的内网通信方式,其特征在于,包括:

数据代理,运行在每一个微服务节点上,每个微服务的所有消息收发都由数据代理完成,微服务代码只与数据代理沟通,将数据放入数据代理中与osi模型的应用层之间进行传输,数据代理负责完成其余所有操作;

控制中心,控制整个微服务网络的行为。

通过上述方案,本发明解决了以往微服务治理困难的问题,即背景技术所述的5个问题。

本发明将微服务之间的通信抽离出来,形成独立的系统,开发者在以微服务的形式编写业务逻辑的时候,无需再控制微服务之间的通信方式,也无需引用相应的代码,只需声明需要访问的服务名称,提供对应的数据即可,极大简化了开发流程,减少了程序的外部依赖和代码数量,提高了开发效率。同时独立的数据传输系统能够提供更清晰的调试信息,对数据传输系统的改动不会影响现有的业务逻辑代码,提高了整个系统的鲁棒性。

附图说明

图1是微服务通信协议与osi模型的层级关系。

图2是本发明数据封装示意图。

图3是本发明外部数据交互模型示意图。

图4是本发明通信示意图。

具体实施方式

下面结合附图和实施例详细说明本发明的实施方式。

本发明一种用于现代分布式微服务架构的通信方法与系统,与计算机网络osi模型的关系如图1所示,可将其作为连接业务服务和计算机网络应用层的桥梁。本发明是介于业务服务和osi模型的应用层之间的一层新的协议,向下对接网络模型的应用层,使用http或者rpc等协议进行底层网络通信;向上对接用户,即开发者,作为新的消息传递通道,接管原有的内网http或rpc通信方式。

本发明主要由两部分组成,一部分是控制中心,负责控制整个微服务网络的行为;一部分是数据代理,运行在每一个微服务节点上,负责微服务消息的发送和接收。因此,在分布式或者云计算场景下,微服务只需要与数据代理交流,无需知道具体事件细节,解决了背景技术中提到的问题(1)。具体而言,本发明要求所有微服务的消息收发都由数据代理完成,微服务代码只与数据代理沟通,数据代理负责完成余下的所有操作。

本发明中,控制中心是一个中心控制节点,负责调控所有的数据代理节点,实现服务注册、配置下发、访问权限控制配置,拥有控制数据代理的权限。在数据中心中,中心化的网络配置效率要远远高于基于以太网路由的非中心化配置。

同时控制中心拥有从数据代理收集任何数据的能力,根据数据代理的情况控制中心可以对整个网络负载状况详细的感知,解决了背景技术中提到的问题(5)。

本发明中,数据代理是微服务通信协议对上层应用的接口,提供统一的消息收发,服务查询接口,负责实现微服务环境中的服务发现、流量控制和负载均衡访问,并接受控制中心的控制,提供流量监控、请求追踪的功能。

在具体实现过程,本发明主要包括流量控制和数据封装,由此提出了流量控制协议和数据封装协议。

其中,流量控制协议定义了微服务之间的数据传输不再通过直接的rpc请求进行交互,而是将数据放入数据代理中进行传输。在使用方需要声明调用服务的名字。这一传输方式在工业界通常被称为“边车”模式,本协议在“边车”模式的基础上,定义了流量的交互方式和管理方式,使之有一个可以遵循的模式和标准。

同时,流量控制协议定义了流量控制的配置方式和实现方式。解决了背景技术中提到的问题(2)和(3)。流量控制协议规定:微服务间的数据通信统一由和每个微服在同一个容器(独立docker环境下)或pod(kubenetes环境下)的数据代理传输。通信流程为:微服务将需要调用的服务的名字、接口和数据传递给数据代理,由数据代理负责将消息传递到被调服务的一个实例上,该实例会被数据代理调用,并将数据交给被调服务处理,被调服务处理完成后将结果返回给被调方的数据代理,被调方的数据代理再将数据返回给调用方的数据代理,最终调用方的数据代理将消息返回给调用方的微服务,完成数据一次传输。

为了提供以上能力,流量控制协议定义了控制中心和数据代理两个实体的行为。

在控制中心侧,流量控制的配置能力由控制中心提供,控制中心通过网络接口、命令行操作界面等方式,提供不同服务之间的访问流量控制。控制变量包括:微服务的访问权限,定义了某一个微服务能够被调用的条件;微服务的访问熔断措施,定义了当大量流量激增时对服务的保护方式;微服务的负载均衡规则,定义了当为服务有多个运行的实例时,负载分配的方式,这些配置将会被下发到数据代理上。

在数据代理侧,每一个数据代理都会根据自己的服务名字接收到对应的配置,配置内容包括可访问服务名字列表和ip列表,熔断策略和负载均衡配置。并且周期性的和控制中心交互更新这些数据。数据代理会根据这些配置决定是否发送来自应用的请求,并适配对应的熔断策略负载均衡策略。

数据封装协议定义了数据代理如何封装上层应用发送的数据。

上层服务通过数据代理发送的数据都会被加上一个数据代理头,如图2所示,数据经过数据代理之后在数据头部增加了数据代理头,数据代理头内包含了可自定义的信息,其中可包含请求染色id,服务名称,缓存控制信息等。用户可以为数据代理编写扩展,扩展可根据数据代理头进行额外的操作。染色id是本协议的一种请求追踪方案,用户可以定义染色id,以用户的uid、sessionid或者自定义的请求键值作为染色id,数据代理会根据染色id自动上报数据流向情况,从而能够获取一个请求从外部进入数据中心后,在所途径的微服务链条上的处理路径,便于追踪请求和排查错误。且上层应用可以读取染色id,提供了充足的扩展性。解决了背景技术中提到的问题(4)。

最终,微服务通信协议只存在于提供网络服务的数据中心内,或者横跨多个数据中心的私有局域网络内,不对外延伸到数据中心网关外围,其设计的目的是为分布式数据中心的微服务或云服务提供一个新的协同通信方式。当数据中心内的微服务完成用户请求处理后,微服务通信协议会将处理结果传递给数据中心的网关,由网关负责最终的数据交付,完全兼容现有的网络结构,外部用户对新增的微服务协议无感知,如图3所示。

下面介绍在本协议的规定下,一个基于微服务的互联网应用处理用户请求的流程。此流程为一个用户登陆流程,用户通过用户名和密码登录,登录成功后会返回用户的个人信息。其后端服务包含一个用户身份鉴定服务,用户信息存储服务。

首先用户与数据中心的交互与本发明所限定的方法和系统以及协议无关,使用的是常规的http/https请求与数据中心交互。当请求到达数据中心后,数据传输由本发明的方案接管,微服务间通信流程如图4。

首先用户向数据中心发送请求,请求到达数据中心网关后,会按照本专利的协议规定,根据用户的url查找对应的服务名称,然后将数据、访问的服务名称和接口按照协议定义封装,传送给数据代理。

数据首先会到达身份鉴定服务。数据代理根据流量控制协议,按照微服务的要求将数据传递给位于节点a的身份鉴定服务的数据代理,该数据代理会将封装好的数据解包后传递给身份鉴定服务,身份鉴定服务就是微服务的业务逻辑,在这个例子中会验证用户名密码是否正确,根据验证结果,若正确则调用用户信息存储服务;若不正确则直接返回,通过数据代理将数据通过网关传递回用户。

根据身份鉴定服务的业务逻辑,如果鉴定成功,则会调用用户信息存储服务,相应请求会传输到数据代理,然后数据代理根据服务名称和接口找到位于节点b的用户信息存储服务。当请求到达用户信息存储服务时,数据会以同样的方式被解包,执行相应的业务逻辑,生成用户的信息,然后再次根据数据封装协议的规则封装数据,传递给数据代理,由于用户信息存储服务是被调用方,其产生的结果会通过代理返回到调用方,也就是身份鉴定服务中,然后身份鉴定服务会将用户信息通过网关返回给用户。


技术特征:

1.一种用于现代分布式微服务架构的通信方法,其特征在于,在每一个微服务节点上运行数据代理,并利用控制中心控制整个微服务网络的行为,每个微服务的所有消息收发都由数据代理完成,微服务代码只与数据代理沟通,将数据放入数据代理中与osi模型的应用层之间进行传输,数据代理负责完成其余所有操作。

2.根据权利要求1所述用于现代分布式微服务架构的通信方法,其特征在于,所述控制中心是一个中心控制节点,负责调控所有的数据代理节点,实现服务注册、配置下发、访问权限控制配置,拥有控制数据代理的权限;所述数据代理是对上层应用的接口,提供统一的消息收发和服务查询接口,负责实现微服务环境中的服务发现、流量控制和负载均衡访问,并接受控制中心的控制,提供流量监控、请求追踪的功能。

3.根据权利要求1或2所述用于现代分布式微服务架构的通信方法,其特征在于,所述控制中心拥有从数据代理收集任何数据的能力,从而根据数据代理的情况详细感知整个网络负载状况。

4.根据权利要求1所述用于现代分布式微服务架构的通信方法,其特征在于,所述微服务间的数据通信统一由和每个微服务在同一个容器或pod的数据代理传输,通信流程为:微服务将需要调用的服务的名字、接口和数据传递给数据代理,由数据代理负责将消息传递到被调服务的一个实例上,该实例会被数据代理调用,并将数据交给被调服务处理,被调服务处理完成后将结果返回给被调方的数据代理,被调方的数据代理再将数据返回给调用方的数据代理,最终调用方的数据代理将消息返回给调用方的微服务,完成数据一次传输。

5.根据权利要求4所述用于现代分布式微服务架构的通信方法,其特征在于,在控制中心侧,控制中心提供不同服务之间的访问流量控制配置,控制变量包括:微服务的访问权限,定义了某一个微服务能够被调用的条件;微服务的访问熔断措施,定义了当大量流量激增时对服务的保护方式;微服务的负载均衡规则,定义了当为服务有多个运行的实例时,负载分配的方式,这些配置内容将会被下发到数据代理上;

在数据代理侧,每一个数据代理都会根据自己的服务名字接收到对应的配置内容,配置内容包括可访问服务名字列表和ip列表以及熔断策略和负载均衡配置,并且周期性地和控制中心交互更新所述配置内容,数据代理根据所述的配置决定是否发送来自应用的请求,并适配对应的熔断策略负载均衡策略。

6.根据权利要求1或4所述用于现代分布式微服务架构的通信方法,其特征在于,所述微服务通过数据代理发送的数据都在数据头部增加一个数据代理头,数据代理头内包含了可自定义的信息,用户能够通过为数据代理编写扩展,扩展根据数据代理头进行的额外操作。

7.根据权利要求6所述用于现代分布式微服务架构的通信方法,其特征在于,所述可自定义的信息包括请求染色id、服务名称以及缓存控制信息,其中染色id是一种请求追踪方案,用户通过定义染色id,以用户的uid、sessionid或者自定义的请求键值作为染色id,数据代理则根据染色id自动上报数据流向情况,从而能够获取一个请求从外部进入数据中心后,在所途径的微服务链条上的处理路径,便于追踪请求和排查错误,且上层应用能够读取染色id,提供了充足的扩展性。

8.根据权利要求1所述用于现代分布式微服务架构的通信方法,其特征在于,当数据中心内的微服务完成用户请求处理后,将处理结果传递给数据中心的网关,由网关负责最终的数据交付。

9.一种用于现代分布式微服务架构的通信系统,介于用户以微服务形式开发的业务服务应用和osi模型的应用层之间,向下对接osi模型的应用层,进行底层网络通信,向上对接用户,即开发者,作为消息传递通道,从而接管原有的内网通信方式,其特征在于,包括:

数据代理,运行在每一个微服务节点上,每个微服务的所有消息收发都由数据代理完成,微服务代码只与数据代理沟通,将数据放入数据代理中与osi模型的应用层之间进行传输,数据代理负责完成其余所有操作;

控制中心,控制整个微服务网络的行为。

10.根据权利要求9所述用于现代分布式微服务架构的通信系统,其特征在于,所述底层网络通信使用http或者rpc协议。

技术总结
一种用于现代分布式微服务架构的通信方法与系统,在每一个微服务节点上运行数据代理,并利用控制中心控制整个微服务网络的行为,每个微服务的所有消息收发都由数据代理完成,微服务代码只与数据代理沟通,将数据放入数据代理中与OSI模型的应用层之间进行传输,数据代理负责完成其余所有操作,本发明将微服务之间的通信抽离出来,形成独立的系统,开发者在以微服务的形式编写业务逻辑的时候,只需声明需要访问的服务名称,提供对应的数据即可,极大简化了开发流程,减少了程序的外部依赖和代码数量,提高了开发效率。同时独立的数据传输系统能够提供更清晰的调试信息,对数据传输系统的改动不会影响现有的业务逻辑代码,提高了整个系统的鲁棒性。

技术研发人员:高广宇;刘驰;李金尧;方力
受保护的技术使用者:北京理工大学
技术研发日:2020.01.09
技术公布日:2020.06.05

转载请注明原文地址: https://bbs.8miu.com/read-55265.html

最新回复(0)