CN113382080B - 一种微服务治理系统和方法 - Google Patents
一种微服务治理系统和方法 Download PDFInfo
- Publication number
- CN113382080B CN113382080B CN202110713888.3A CN202110713888A CN113382080B CN 113382080 B CN113382080 B CN 113382080B CN 202110713888 A CN202110713888 A CN 202110713888A CN 113382080 B CN113382080 B CN 113382080B
- Authority
- CN
- China
- Prior art keywords
- service
- node
- micro
- link
- fusing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 11
- 230000015556 catabolic process Effects 0.000 claims description 9
- 238000006731 degradation reaction Methods 0.000 claims description 9
- 230000004044 response Effects 0.000 claims description 9
- 238000001514 detection method Methods 0.000 claims description 8
- 230000000694 effects Effects 0.000 claims description 8
- 230000008569 process Effects 0.000 claims description 8
- 230000007246 mechanism Effects 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 4
- 241001124156 Mecoptera Species 0.000 claims description 3
- 238000004891 communication Methods 0.000 claims description 3
- 238000004364 calculation method Methods 0.000 claims 3
- 238000005067 remediation Methods 0.000 claims 3
- 230000001680 brushing effect Effects 0.000 claims 1
- 230000001960 triggered effect Effects 0.000 claims 1
- 238000007726 management method Methods 0.000 abstract description 9
- 241000533950 Leucojum Species 0.000 abstract description 2
- 230000000593 degrading effect Effects 0.000 abstract 1
- 230000005540 biological transmission Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000000750 progressive effect Effects 0.000 description 3
- 238000005070 sampling Methods 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004540 process dynamic Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 230000003213 activating effect Effects 0.000 description 1
- 238000007664 blowing Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000009792 diffusion process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000009125 negative feedback regulation Effects 0.000 description 1
- 230000001012 protector Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000001926 trapping method Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0793—Remedial or corrective actions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/215—Flow control; Congestion control using token-bucket
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Hardware Redundancy (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明提出一种微服务治理系统和方法,所述的系统包括负载均衡、服务限流、链路追踪和熔断降级模块。本发明的一种微服务治理方法通过负反馈控制负载均衡策略均衡微服务节点的压力,通过snowflake算法生成链路追踪的标识隐式传递到整个链路中得以完整得知微服务的调用链路,利用可自动退化为单机限流的限流方案和可自动探活重连的分布式熔断方法得以完成分布式集群环境下的服务限流和熔断,从而提高了微服务系统的可用性。
Description
技术领域
本发明属于计算机技术领域,具体涉及一种微服务治理系统和方法。
背景技术
随着业务的扩展,现有的应用框架系统无法满足需求。因此,通过使用分布式服务框架,提高了开发能力,并使开发结果和实现过程不一致的问题得到了解决,微服务(Microservices)是最近技术圈里非常流行的系统架构解决方案。
早期Internet行业的业务发展规模并没有现在这么庞大,业务系统的规模相对简单,业务逻辑也不复杂。MVC模型(Model View Controller)的垂直应用程序结构是对业务系统的需求。框架经历了从传统的垂直应用程序框架到RPC框架,很长一段时间的服务框架以及微服务架构的时代,近年来,微服务的部署发展迅速,敏捷发展并构建了基础架构。全面的优化产品,比如亚马逊、阿里巴巴和华为都在成功实施微服务的过程中,其结构进化比较迅速。根据系统升级,传统的服务(SOA)体系结构,已经不能满足性能和软件开发的需求。微服务结构已经成为了更流行的选择。微服务框架是细分大型复杂系统的一种结构样式,通过独立功能,服务之间的通用协议进行通信。
微服务架构会使得微服务之间有着网状的拓扑结构关系,在可用性和可维护性上带来了很多困难。复杂的调用链使得调用的情况难以定位,在链路中的部分错误可能会影响全局,进而影响了整个系统的可用性,节点的增多也为性能提出了挑战。
发明内容
为了提高微服务框架的性能和稳定性,解决流量激增问题和保护下游服务,避免系统中失败的扩散,以及为了能追踪微服务调用的链路情况,提高微服务各节点的负载能力,本发明提出了一种微服务治理系统及方法,所述的系统,包括:负载均衡模块、服务限流模块、链路追踪模块和熔断降级模块;其中,
负载均衡模块:基于负反馈调节的调整机制,即统计各个服务器节点的性能,计算出其性能的压力情况和权重情况,根据这两个值来调整该服务器节点的权重,以实现动态的负载均衡权重;
链路追踪模块:通过snowflake算法生成链路追踪的标识,将该标识隐式传递到整个链路中,通过消息队列接受该标识,并存储至数据库中,得以完整得知微服务拓扑调用网络中的调用链路;
服务限流模块:将令牌桶存储至Redis中,以触发性的方法,渐进式得异步更新令牌数量,以实现集群级别限流,使用探活变量,使得令牌桶能够自动退化为单机模式;
熔断降级模块:采用可自动探活重连的分布式熔断方法,集群熔断器收集各实例的请求状态,并在集群熔断器内部持有熔断状态的状态机,根据请求状态切换状态机到关闭、半关闭和开启状态,以实现分布式集群熔断。
根据本发明的另一方面,还提出一种微服务治理方法,包括如下步骤:
步骤1、负载均衡步骤:基于负反馈调节的调整机制,即统计各个服务器节点的性能,计算出其性能的压力情况和权重情况,根据这两个值来调整该服务器节点的权重,以实现动态的负载均衡权重;
步骤2、链路追踪步骤:通过snowflake算法生成链路追踪的标识,将该标识隐式传递到整个链路中,通过消息队列接受该标识,并存储至数据库中,得以完整得知微服务拓扑调用网络中的调用链路;
步骤3、服务限流步骤:以触发性的方法,渐进式得异步更新令牌数量,以实现集群级别限流,使用探活变量,使得令牌桶能够自动退化为单机模式;
步骤4、熔断降级步骤:采用自动探活重连的分布式熔断方法,集群熔断器收集各实例的请求状态,并在集群熔断器内部持有熔断状态的状态机,根据请求状态切换状态机到关闭、半关闭和开启状态,以实现分布式集群熔断。
进一步的,所述的负载均衡模块基于负反馈调节的调整机制,即统计各个服务器节点的性能,计算出其性能的压力情况和权重情况,根据这两个值来调整该节点的权重,以实现动态的负载均衡权重。该模块用于执行以下步骤:
第一步,采样系统负载情况,使用了Linux的top命令用于显示进程的动态,然后在筛选出CPU的使用率,100减去CPU使用率就是剩余的CPU占有率,然后连接MySQL数据库,把数据输出到数据库中,使用cronjob定时统计,既可以完成定期对各个节点的CPU指标进行采样的操作。
第二步,对权重进行归一化处理后,为每一个参数设定一个表示负载参数的重要程度的常量系数Ri,如下式所示:
第三步,计算集群中任意一个节点N的负载情况,可以表示为L(N),则有:
L(Ni)=R1Ci+R2Mi+R3Pi+R1Ti
其中,C为该节点CPU利用率,M为该节点内存利用率,P为该节点线程比值,T为该节点响应时间比值。
与节点的机器负载情况相对应的,是结点的网络负载情况,即路由分发的请求量。路由的分发情况由结点的权重决定,设W(Ni)为该节点的权重。
第四步,计算出该节点的机器负载占总集群机器负载的比值。公式如下:
该节点路由的分发量由其权重决定。同样可以计算出该节点权重比值,公式如下:
第五步,比较这两个值,即可知道该节点负载的合理性:
(1)当r(L)=r(W),此时不用调整权重。说眀相对于整个集群来说,服务器S当前负载较均衡;
(2)当r(L)<r(W),需要适当增加该服务器权重,提高S的资源利用率。此时S是集群中负载较轻的一个,分担更多调用请求;
(3)当r(L)>r(W),需要适减小权重,避免S响应时间过慢而引起的请求累积。说明S是当前集群中负载较重的服务器之一,这样会相应减少对S的后续请求。
第六步,调整权重,合理的策略是渐进的,是路由分发的变化不至于过激而影响到服务的平稳运行,设W(Ni)'为调整后的权重,则公式如下:
W(Ni)'=W(Ni)+W(Ni)×a(r(L)-r(W))
其中a为调整因子。值越大调整速度越快。
进一步的,所述的链路追踪模块,进行一次分布式的调用,链路在整个服务中传递,为了标记传递的过程和结果,各个概念定义如下:
(定义1)分布式调用完成的一次标识。对一个分布式系统来说,无论是基于HTTP的还是基于TCP的,一次完整的远程方法调用的标识。
(定义2)服务调用链路。在分布式系统中,完成一次服务,从用户发起请求,到给用户返回数据,途中可能经历多次请求的转发,这多次请求的链路,由服务节点和服务节点之间的关系组成,而这些服务节点和服务节点之间的关系则组成了一个有向图,那就是完整的服务调用链路。
(定义3)链路追踪的ID。用户发起请求后,生成一个定位标识,该标识由网关或者负载均衡服务器生成,用来追踪完整的调用链路。
(定义4)服务请求的ID。分布式微服务系统中,一次请求可能贯串多个子系统,为了区分每次子请求,即各个微服务组件之间的调用,生成一个调用ID。
(定义5)数据流。请求上游带往请求下游的数据。比如请求的方法,调用方的IP地址,调用方的容器ID,上游的请求ID等等。
所述链路追踪模块用于执行以下步骤:
第一步,使用snowflake算法来构建分布式的全局唯一ID。生成公式如下:
snowflackID=(timestamp-beginTimestamp)<<timestampLeftShift)|
(clusterId<<clusterIdShift)|
(instanceId<<instanceIdShift)|sequence
第二步,在ThreadLocal中使用一个临时的状态记录器,当服务节点接收到远程方法调用的请求,或发起远程方法调用请求时,该临时状态记录器的状态都会变化。而远程方法调用的服务消费端在执行调用之前,经过过滤器处理,会将信息写入临时状态记录器。服务端在执行调用之前,也会经过过滤器处理,将信息写入临时状态记录器。因此每发起远程方法调用,上下文状态会变化,实现了隐式的参数传递。
第三步,采用消息队列来异步统计链路数据,跟踪代码的调用者的IP比调用者更具体通过传输队列进行异步测量的异步通信,例如远程方法调用的开始和完成时间,服务的提供者和消费者的IP地址和端口号,调用的方法等,包含被叫方请求的呼叫和被响应者应答的调用,考虑到搜索条件比较简单,可以继续进行通过获取MySql的数据库来处理内存链接数据。
进一步的,服务限流模块,采用渐进式,触发性得加令牌,即异步更新当前持有的令牌数,将令牌桶存储至Redis中,渐进式触发性得异步更新令牌数,以实现集群级别限流,使用探活变量,使得令牌桶可以自动退化为单机模式。所述服务限流模块用于执行以下步骤:
第一步,请求时先检查有无初始化,如果是第一次访问,那么没有初始化,将SET初始化。
第二步,如果已经初始化,那么计算可加入令牌的数量,计算现在时间减去上次时间,乘以令牌产生速度,就是可以加入的令牌数量。如果可以加入,则把当前时间作为最后加入令牌时间。公式如下:
expect_tokenCount=permit-stokenCount
第三步,计算加入令牌后最大值,取最大容量和加入令牌后最大值的最小值作为当前容量。如果可以获取令牌,则去掉此时需要拿走的令牌。如果无法获取到令牌,则把当前最新的令牌数写回令牌桶中。
进一步的,所述服务熔断模块,微服务调用开始前,系统首先进行熔断器状态判断。系统通过熔断状态来进行判断。具体而言,针对熔断设置一个阈值,如果熔断器处于关闭状态,则表明服务调用失败率没有超过设置的阈值,可以继续进行服务调用。而当熔断器处于开启状态,则表明服务调用失败率超过了设置的阈值,当前服务不可继续调用,需要进行服务的降级处理。熔断器除了关闭和开启状态外,还存在个半开启状态。半开启状态允许服务消费方尝试性调用服务。所述服务熔断模块用于执行如下步骤:
第一步,微服务节点从熔断器下载当前的熔断状态,判断熔断器开启或者半开启情况,如果已经熔断,不请求下游,直接执行设立的兜底方法。如果处于未熔断状态,执行请求。
第二步,微服务上报请求结果,熔断器更新熔断统计数据。针对尝试性调用的服务也设置一个阈值,如果调用成功次数超过阈值,则熔断器状态从半开启状态切换到关闭状态,并且调用次数器归零,服务正常调用;如果在半开启状态下服务调用次数没有超过阈值,则表明尝试性调用失败,熔断器将切换到开启状态。
本发明相较于其他现有技术的优点在于:
(1)本发明负载均衡模块根据各个节点的负载,采用基于负反馈调节的,权重自适应机器负载情况负载均衡策略,实时调节各节点负载均衡权重,以更好地平衡各个节点的压力,提高了微服务系统性能。
(2)本发明通过链路追踪模块,定义了链路追踪使用了雪花算法生成了链路追踪的标识,并且将标识隐式传递到整个链路中,得以完整得知服务的调用情况。
(3)本发明通过服务限流模块,一方面采用渐进式,触发性得加令牌,即异步更新当前持有的令牌数,提高了性能,减少了对读写压力;另一方面自动退化机制,在极端情况下,服务器也有不可用的时候,这时分布式限流转化为单机限流,保障了可用性。
(4)本发明通过服务熔断模块,防止了远程方法链式调用的雪崩,调用提高分布式微服务系统的可用性,同时系统有自动探活的能力,使得微服务系统可以自动从熔断状态恢复正常。
附图说明
图1为本发明的微服务治理系统结构图;
图2为负载均衡模块实现过程;
图3为服务限流模块实现过程;
图4为熔断降级模块实现过程。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅为本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域的普通技术人员在不付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。
如图1所示,根据本发明的一个实施例,所述的微服务治理系统包含四个模块,分别是负载均衡模块、链路追踪模块、服务限流模块、服务熔断模块。其中,
负载均衡模块:基于负反馈调节的调整机制,即统计各个服务器节点的性能,计算出其性能的压力情况和权重情况,根据这两个值来调整该服务器节点的权重,以实现动态的负载均衡权重;
链路追踪模块:通过snowflake算法生成链路追踪的标识,将该标识隐式传递到整个链路中,通过消息队列接受该标识,并存储至数据库中,得以完整得知微服务拓扑调用网络中的调用链路;
服务限流模块:将令牌桶存储至Redis中,以触发性的方法,渐进式得异步更新令牌数量,以实现集群级别限流,使用探活变量,使得令牌桶能够自动退化为单机模式;
熔断降级模块:采用可自动探活重连的分布式熔断方法,集群熔断器收集各实例的请求状态,并在集群熔断器内部持有熔断状态的状态机,根据请求状态切换状态机到关闭、半关闭和开启状态,以实现分布式集群熔断。
具体实现过程如下:
负载均衡模块采集系统负载情况,计算各节点负载,然后计算各节点路由分配比例,负反馈调节节点负载均衡情况。该模块的实现过程如图1所示。
(1)采样系统负载情况,使用了Linux的top命令用于显示进程的动态,然后在筛选出CPU的使用率,100减去CPU使用率就是剩余的CPU占有率,然后连接MySQL数据库,把数据输出到数据库中,使用cronjob定时统计,既可以完成定期对各个节点的CPU指标进行采样的操作。同样,使用free命令,可以查看内存占有率,使用cronjob定时统计,然后输出到数据库中。用top命令可以查看线程数,认为基准为100,除以100是节点线程比值。响应时间记录。
(2)计算集群中任意一个节点N的负载情况,可以表示为L(N),则有:
L(Ni)=R1Ci+R2Mi+R3Pi+R4Ti
其中,R1表示进程数,R2表示响应时间,R3表示CPU利用率,R4表示内存利用率的权重系数,C为该节点CPU利用率,M为该节点内存利用率,P为该节点线程比值,T为该节点响应时间比值。服务器预设值是{0.5,0.3,0.1,0.1},表示其CPU利用率和内存利用率较为重要,其他两项不用特别关注。与节点的机器负载情况相对应的,是结点的网络负载情况,即路由分发的请求量。路由的分发情况由结点的权重决定,设W(Ni)为该节点的权重。
然后,计算出该节点的机器负载占总集群机器负载的比值。该节点路由的分发量由其权重决定。同样可以计算出该节点权重比值,
r(L)是该节点的机器负载占总集群机器负载的比值,r(W)是该节点权重比值;
(3)比较这两个值,即可知道该节点负载的合理性:
当r(L)=r(W),此时不用调整权重。说眀相对于整个集群来说,服务器S当前负载较均衡;当r(L)<r(W),需要适当增加该服务器权重,提高S的资源利用率。此时S是集群中负载较轻的一个,分担更多调用请求;当r(L)>r(W),需要减小权重,避免S响应时间过慢而引起的请求累积。说明S是当前集群中负载较重的服务器之一,这样会相应减少对S的后续请求。
(4)调整权重,合理的策略是渐进的,是路由分发的变化不至于过激而影响到服务的平稳运行,设W(Ni)'为调整后的权重,则公式如下:
W(Ni)'=W(Ni)+W(Ni)×a(r(L)-r(W))
r(L)是该节点的机器负载占总集群机器负载的比值,r(W)是该节点权重比值,W(Ni)为该节点的权重;a是动态调整的变化因子;此处设置为0.3,希望能相对平稳得调整路由策略。
链路追踪模块,进行一次分布式的调用,链路在整个服务中传递,为了标记传递的过程和结果,生成链路的标识并传递到链路中。具体执行如下步骤:
(1)使用snowflake算法来构建分布式的全局唯一ID。timestamp为当前时间戳;beginTimestamp为系统开始计时时间戳,是一个定值,这里取0;timestampLeftShift即为时间戳左移位数,此处为22;clusterId是集群的ID,需要外部传入;clusterIdShift是集群所在的位数,此处为17;instanceId是机器ID;instanceIdShift是实例ID所在的位数,此处为12;serialNumber是毫秒内的序列。
(2)在ThreadLocal中使用一个临时的状态记录器,当服务节点接收到远程方法调用的请求,或发起远程方法调用请求时,该临时状态记录器的状态都会变化。而远程方法调用的服务消费端在执行调用之前,经过过滤器处理,会将信息写入临时状态记录器。服务端在执行调用之前,也会经过Filter处理,将信息写入临时状态记录器。
(3)将远程方法调用的开始和完成时间,服务的提供者和消费者的IP地址和端口号,调用的方法这些数据从ThreadLocal中拿到,将该数据写入消息队列后,一个消费者接受该消息,异步得将链路数据写入数据库。
服务限流模块,在服务的提供者端,需要根据消费者的重要程度,以及平时的流量大小,来给每个流量设置一个流量上线,同一时间内只会给某个消费者提供一定流量的支持,超过限制则等待或者直接拒绝。
服务的消费者基于令牌桶算法进行限流。如果流量未达到设定值,则服务提供者允许消费者流量进入。如果令牌桶中已经没有令牌,即流量达到了设定值,则根据预先的限流策略,直接抛弃请求,或者将请求置于消息队列中,等待令牌桶中有可用令牌,即流量降低时,再进行请求。用此方法,也完成了流量消峰填谷的效果,该模块的实现过程如图2所示。
(1)请求时先检查有无初始化,如果是第一次访问,那么没有初始化,将令牌桶初始化。
(2)如果已经初始化,那么计算可加入令牌的数量,计算现在时间减去上次时间,乘以令牌产生速度,如果可以加入,则把当前时间作为最后加入令牌时间。公式如下:
expect_tokenCount=permit–stokenCount
permits是请求间隔内产生的令牌数,timestamp为当前时间戳;lastTimestamp是上一次远程方法调用记录的时间戳,slope是令牌桶的产生速度,expect_tokenCount是所剩令牌数量,tokenCount是本次请求的令牌数,通过比较所剩令牌数量的正负,判断远程方法调用有没有达成服务限流。
(3)计算加入令牌后最大值,取最大容量和加入令牌后最大值的最小值作为当前容量。如果可以获取令牌,则去掉此时需要拿走的令牌。如果无法获取到令牌,则把当前最新的令牌数写回令牌桶中。
服务熔断模块,在系统服务之间运行时,由于远程服务故障导致问题扩散,可能会出现“雪崩效应”。为避免这种情况,服务管理平台系统必须实现服务的熔断,降级和限制。该模块的实现过程如图3所示。
(1)从熔断器下载当前的熔断状态,判断熔断器开启或者半开启情况,如果已经熔断,不请求下游,直接执行fallback方法。如果处于未熔断状态,执行请求。
(2)上报请求结果,熔断器更新熔断统计数据。
(3)熔断器判断已经熔断后,5分钟时间后,下游服务的提供者,提供服务的能力可能已经恢复,则熔断器进入半开启状态,即此时允许部分流量的进入。半开启状态允许一部分流量进入,对于这一部分允许进入的流量,会尝试进行远程方法调用,然后进行调用成功率的统计,如果调用成功率高于阈值,说明此时熔断的下游已经恢复,可以继续提供服务,那么系统不再熔断。如果调用成功率低于阈值,说明下游还未恢复,为避免对下游的影响,熔断器重新开启。
本发明未详细描述的部分属于本领域公知技术。
本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围的不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术人员根据本发明构思所能够想到的等同技术手段。
Claims (4)
1.一种微服务治理方法,其特征在于,包括如下步骤:
步骤1、负载均衡步骤:基于负反馈调节的调整机制,即统计各个服务器节点的性能,计算出其性能的压力情况和权重情况,根据这两个值来调整该服务器节点的权重,以实现动态的负载均衡权重;
步骤2、链路追踪步骤:通过snowflake算法生成链路追踪的标识,将该标识隐式传递到整个链路中,通过消息队列接收该标识,并存储至数据库中,得以完整得知微服务拓扑调用网络中的调用链路;
步骤3、服务限流步骤:以触发性的方法,渐进式的异步更新令牌数量,以实现集群级别限流,使用探活变量,使得令牌桶能够自动退化为单机模式;
步骤4、熔断降级步骤:采用自动探活重连的分布式熔断方法,集群熔断器收集各实例的请求状态,并在集群熔断器内部持有熔断状态的状态机,根据请求状态切换状态机到关闭、半开启和开启状态,以实现分布式集群熔断;
所述步骤1中,负反馈调节的动态调整方法如下:
(1.1)使用Linux系统的定时任务cron定期对集群中各个节点的各项指标采集,然后输出到数据库中,以便后期计算;
(1.2)在负载均衡服务器的本地内存维护一份权重,执行时的策略和固定权重的负载均衡算法一致,还设置有一个异步的定时任务,用于定时调整各个节点权重的值,并将其刷入本地内存,完成权重的动态调整,调整公式如下:
公式2:L(Ni)=R1Ci+R2Mi+R3Pi+R4Ti
公式5:W(Ni)′=W(Ni)+W(Ni)×a(r(L)-r(W))
其中,Ri表示权重系数,R1表示进程数,R2表示响应时间,R3表示CPU利用率,R4表示内存利用率的权重系数,Ci为该服务器节点CPU利用率,Mi为该节点内存利用率,Pi为该节点线程比值,Ti为该节点响应时间比值;集群中任意一个节点N的负载情况,表示为L(Ni),n为节点N的数量,r(L)是该节点的机器负载占总集群机器负载的比值,r(W)是该节点权重比值,W(Ni)为该节点的权重;a是动态调整的变化因子;W(Ni)′是调整后的服务器节点权重;。
2.根据权利要求1所述微服务治理方法,其特征在于:所述步骤2链路追踪的过程如下:
(2.1)基于整个调用链路和链路中每次远程方法调用的两层结构,构造链路追踪;
(2.2)链路追踪标识的生成:使用snowflake算法来构建分布式的全局唯一ID;
(2.3)链路追踪标识的传递:使用线程本地存储变量来实现隐式传递,然后异步收集链路数据。
3.根据权利要求1所述微服务治理方法,其特征在于:所述步骤3中使得令牌桶能够自动退化为单机模式,采用触发式令牌桶集群限流的过程如下:
(3.1)在redis中持有一个令牌桶,定义令牌桶的大小和令牌产生的速度;当服务调用者进行服务请求时,首先申请令牌,此时令牌桶先对比当前时间和下一次能请求到令牌的时间,再计算当前产生的令牌数,进行限流控制;
(3.2)使用lua语言编写脚本计算令牌桶,计算公式如下:
公式8:expect_tokenCount=permits-tokenCount
其中permits是请求间隔内产生的令牌数,timestamp为当前时间戳;lastTimestamp是上一次远程方法调用记录的时间戳,slope是令牌的产生速度,expect_tokenCount是所剩令牌数量,tokenCount是本次请求的令牌数,通过比较所剩令牌数量的正负,判断远程方法调用有没有达成服务限流;
(3.3)微服务的每个节点增加一个限流的降级配置,该配置默认关闭,当与服务器失联的情况下,微服务节点会将限流的降级配置开启,此时不再使用分布式限流方案,而是改为在本机维护令牌桶,切换为单机限流模式。
4.根据权利要求1所述微服务治理方法,其特征在于:所述步骤4中,自动探活重连的分布式熔断方法如下:
(4.1)本系统首先维护一个熔断状态,实例从配置中读取到熔断的阈值,然后统计远程方法调用的成功率,与熔断阈值比较;当熔断器关闭时,表明远程方法调用处于正常状态,服务提供者可以继续正常提供服务;当熔断器打开时,说明远程方法调用失败的情况很多,服务不可用,为避免影响下游,需要降级处理;
(4.2)服务的消费者,从集群熔断器拉取当前的熔断配置,得知当前的熔断器状态,如果是关闭的,则不执行远程方法调用,直接返回设置的fallback的结果;如果熔断器允许执行远程方法调用,则调用后,服务的提供者上报调用的结果,这样集群熔断器得以统计请求失败和超时的比例,然后更新当前的熔断状态;
(4.3)分布式熔断器的状态机不止有开启和关闭两种状态,在这两种状态之外,还存在个半开启状态;当服务已经进入熔断状态,一定时间后,下游服务的提供者,提供服务的能力可能已经恢复,则熔断器进入半开启状态,即此时允许部分流量的进入;半开启状态允许一部分流量进入,对于这一部分允许进入的流量,会尝试进行远程方法调用,然后进行调用成功率的统计,如果调用成功率高于阈值,说明此时熔断的下游已经恢复,则继续提供服务,那么系统不再熔断;如果调用成功率低于阈值,说明下游还未恢复,为避免对下游的影响,熔断器重新开启。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110713888.3A CN113382080B (zh) | 2021-06-25 | 2021-06-25 | 一种微服务治理系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110713888.3A CN113382080B (zh) | 2021-06-25 | 2021-06-25 | 一种微服务治理系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113382080A CN113382080A (zh) | 2021-09-10 |
CN113382080B true CN113382080B (zh) | 2023-03-28 |
Family
ID=77579302
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110713888.3A Active CN113382080B (zh) | 2021-06-25 | 2021-06-25 | 一种微服务治理系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113382080B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114157551B (zh) * | 2021-11-29 | 2023-07-21 | 中国平安财产保险股份有限公司 | 适用于微服务的熔断识别方法、装置、设备及存储介质 |
CN115277577B (zh) * | 2022-09-28 | 2023-04-28 | 平安银行股份有限公司 | 数据处理方法、装置、计算机设备和计算机可读存储介质 |
CN117955984B (zh) * | 2024-03-26 | 2024-06-25 | 苏州元脑智能科技有限公司 | 服务器调度方法、装置、系统、计算机设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110502494A (zh) * | 2019-08-30 | 2019-11-26 | 北京思维造物信息科技股份有限公司 | 日志处理方法、装置、计算机设备及存储介质 |
CN110995611A (zh) * | 2019-12-20 | 2020-04-10 | 创盛视联数码科技(北京)有限公司 | 一种用于针对高并发请求分布式限流方法 |
CN111787073A (zh) * | 2020-06-18 | 2020-10-16 | 多加网络科技(北京)有限公司 | 一种统一服务的限流熔断平台及其方法 |
CN111988355A (zh) * | 2020-06-29 | 2020-11-24 | 汉海信息技术(上海)有限公司 | 限流方法、装置、服务器及服务器集群 |
CN112217894A (zh) * | 2020-10-12 | 2021-01-12 | 浙江大学 | 一种基于动态权重的负载均衡系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10887369B2 (en) * | 2017-09-25 | 2021-01-05 | Splunk Inc. | Customizable load balancing in a user behavior analytics deployment |
US10983769B2 (en) * | 2019-05-16 | 2021-04-20 | Citrix Systems, Inc. | Systems and methods for using a call chain to identify dependencies among a plurality of microservices |
-
2021
- 2021-06-25 CN CN202110713888.3A patent/CN113382080B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110502494A (zh) * | 2019-08-30 | 2019-11-26 | 北京思维造物信息科技股份有限公司 | 日志处理方法、装置、计算机设备及存储介质 |
CN110995611A (zh) * | 2019-12-20 | 2020-04-10 | 创盛视联数码科技(北京)有限公司 | 一种用于针对高并发请求分布式限流方法 |
CN111787073A (zh) * | 2020-06-18 | 2020-10-16 | 多加网络科技(北京)有限公司 | 一种统一服务的限流熔断平台及其方法 |
CN111988355A (zh) * | 2020-06-29 | 2020-11-24 | 汉海信息技术(上海)有限公司 | 限流方法、装置、服务器及服务器集群 |
CN112217894A (zh) * | 2020-10-12 | 2021-01-12 | 浙江大学 | 一种基于动态权重的负载均衡系统 |
Also Published As
Publication number | Publication date |
---|---|
CN113382080A (zh) | 2021-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113382080B (zh) | 一种微服务治理系统和方法 | |
Xiong et al. | The best of both worlds: A general architecture for data management in blockchain-enabled Internet-of-Things | |
Sakic et al. | Towards adaptive state consistency in distributed SDN control plane | |
CN108712464A (zh) | 一种面向集群微服务高可用的实现方法 | |
US8045453B2 (en) | Methods and systems for alleviating congestion in a connection-oriented data network | |
AU740146B2 (en) | A telecommunications performance management system | |
US7099879B2 (en) | Real-time monitoring of service performance through the use of relational database calculation clusters | |
US20220172076A1 (en) | Prediction of network events via rule set representations of machine learning models | |
WO2002015481A2 (en) | Methods, systems, and computer program products for managing a service provided by a network | |
US20110202645A1 (en) | Methods and Apparatus to Test Network Elements | |
CN108965014A (zh) | QoS感知的服务链备份方法及系统 | |
US11381471B2 (en) | System and method for predicting and handling short-term overflow | |
CN105306507B (zh) | 分布式架构中的容灾处理方法及容灾处理装置 | |
CN110855737B (zh) | 一种一致性级别可控的自适应数据同步方法和系统 | |
CN109189509A (zh) | 接口的调用方法、接口调用的响应方法及服务器 | |
Nylander et al. | Cloud application predictability through integrated load-balancing and service time control | |
CN113079427A (zh) | 基于网络演化模型的ason网络业务可用性评估方法 | |
Oliveira et al. | Cognitive Management of Bandwidth Allocation Models with Case-Based Reasoning-Evidences Towards Dynamic BAM Reconfiguration | |
US20230216811A1 (en) | Method and apparatus for managing network traffic via uncertainty | |
Martinez-Julia et al. | Explained intelligent management decisions in virtual networks and network slices | |
CN113542027B (zh) | 一种基于分布式服务架构的流量隔离方法、装置和系统 | |
Burgin | Dynamic capacity management in the BISDN | |
Hariri et al. | Catalina: A Smart Application Control and Management Environement | |
CN111553796A (zh) | 一种汇率管理方法、装置及计算机可读存储介质 | |
CN109783251A (zh) | 基于Hadoop大数据平台的数据处理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |