searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

浅析微服务熔断

2023-09-27 06:14:52
9
0

一、微服务“熵”和 “环”

1.1、微服务之“熵”

        可以先看看2012年淘宝核心链路应用拓扑图

1.2、微服务之“环”

如何检测服务调用是否存在环路(参考单链表环路定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路)

1.3、微服务之“环”检测识别

一种常见的环路识别方法:

上游服务调用下游服务时追加自身来源标识参数(trace),

下游服务收到请求时判断trace中包含自身标识次数达到固定阈值,则判定存在环路

如上图,A->B->C->D->B  … 存在B、C、D、E环路

环路的危害显而易见,短时间内消耗大量服务资源,直至服务崩溃

1.4、微服务之“环”检测识别具体实现

实质就是在RPC调用层实现该判定逻辑,很少的代码入侵

二、服务熔断降级工具hystrix-go介绍

三、熔断的一些相关基础概念

首先我们要了解什么是服务雪崩:

如图,假设存在服务A->B->C调用链,A流量突增,A能扛得住,B也能扛得住,C扛不住了,这时C会影响B服务的返回结果,此时的B服务无法返回满足A预期的数据,如果A服务对B服务又有重试,可能会导致B服务完全不可用,A服务面向客户端,对于客户端来说A服务无法返回预期数据,也是不可用的了

一个服务失败,导致整条链路的服务都失败的情形,称之为服务雪崩

那什么是熔断?下面我们来用生活中常见的熔断应用举例,

第一个图是2020年3月9号,受疫情和石油崩盘影响,美国股票市场出现熔断

第二个图保险丝是用来防止过大电流产生危险的一种装置,电流大时,因过热保险丝会熔断,切断电路,起到保护作用。保险丝简单价廉,但更换麻烦。

第三个图空气开关,电流将流过双金属片而发热。如果电流过大,双金属片发热多而发生弯曲,使电路断开,起到保护作用。在排除故障后,只要稍后等双金属片冷却,按复位按钮就可恢复工作

服务熔断的原理

如下图所示,,断路器模式的状态图,当远程服务被调用时,断路器将监视这个调用,如调用时间太长,断路器将会介入并中断调用。此外,断路器将监视所有对远程资源的调用,如对某一个远程资源的调用失败次数足够多,那么断路器会出现并采取快速失败,阻止将来调用此远程资源的请求.

什么是服务降级

服务降级主要有两种场景:

一、当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度

二、当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户

在实际的项目中,可以采用以下的方式来完成降级工作

梳理出核心业务流程和非核心业务流程。然后在非核心业务流程上加上开关,一旦发现系统扛不住,关掉开关,结束这些次要流程。

一个微服务下肯定有很多功能,区分出主要功能和次要功能。然后次要功能加上开关,需要降级的时候,把次要功能关了

降低一致性,即将核心业务流程的同步改异步,将强一致性改最终一致性

默认兜底数据,返回静态数据,实现方式包括hard code,配置数据,文件缓存等

        Hystrix 是由 Netflex 开发的一款开源组件,提供了基础的熔断功能。 Hystrix 将降级的策略封装在 Command 中,提供了 run 和 fallback 两个方法,前者表示正常的逻辑,比如微服务之间的调用……,如果发生了故障,再执行 fallback方法返回结果,我们可以把它理解成保底操作。如果正常逻辑在短时间内频繁发生故障,那么可能会触发短路,也就是之后的请求不再执行 run,而是直接执行 fallback。hystrix-go 则是用 go 实现的 hystrix 版,更确切的说,是简化版

另外,也可以从hystrix-go的配置项看有哪些功能

配置1: Timeout

超时时间,默认1秒

配置2: RequestVolumeThreshold

默认值20.意思是至少有20个请求才进行errorThresholdPercentage错误百分比计算。比如一段时间(10s)内有19个请求全部失败了。错误百分比是100%,但熔断器不会打开,因为requestVolumeThreshold的值是20.

配置3: SleepWindow

过多长时间,熔断器再次检测是否开启,默认为5000,即5s钟

配置4: ErrorPercentThreshold

设定错误百分比,默认值50%,例如一段时间(10s)内有100个请求,其中有55个超时或者异常返回了,那么这段时间内的错误百分比是55%,大于了默认值50%,这种情况下触发熔断器-打开。

按照以上配置的熔断器表现如下:

每当20个请求中,有50%失败时(包括1秒超时失败),熔断器就会打开,此时再调用此服务,将会直接返回失败,不再调远程服务。直到5s钟之后,重新检测该触发条件,判断是否把熔断器关闭,或者继续打开

 

五、熔断服务在rpc调用中的应用说明

我们用一组图展示加入熔断前后的RPC调用流程对比,充分说明熔断服务的作用

 

0条评论
作者已关闭评论
x****n
4文章数
0粉丝数
x****n
4 文章 | 0 粉丝
x****n
4文章数
0粉丝数
x****n
4 文章 | 0 粉丝
原创

浅析微服务熔断

2023-09-27 06:14:52
9
0

一、微服务“熵”和 “环”

1.1、微服务之“熵”

        可以先看看2012年淘宝核心链路应用拓扑图

1.2、微服务之“环”

如何检测服务调用是否存在环路(参考单链表环路定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路)

1.3、微服务之“环”检测识别

一种常见的环路识别方法:

上游服务调用下游服务时追加自身来源标识参数(trace),

下游服务收到请求时判断trace中包含自身标识次数达到固定阈值,则判定存在环路

如上图,A->B->C->D->B  … 存在B、C、D、E环路

环路的危害显而易见,短时间内消耗大量服务资源,直至服务崩溃

1.4、微服务之“环”检测识别具体实现

实质就是在RPC调用层实现该判定逻辑,很少的代码入侵

二、服务熔断降级工具hystrix-go介绍

三、熔断的一些相关基础概念

首先我们要了解什么是服务雪崩:

如图,假设存在服务A->B->C调用链,A流量突增,A能扛得住,B也能扛得住,C扛不住了,这时C会影响B服务的返回结果,此时的B服务无法返回满足A预期的数据,如果A服务对B服务又有重试,可能会导致B服务完全不可用,A服务面向客户端,对于客户端来说A服务无法返回预期数据,也是不可用的了

一个服务失败,导致整条链路的服务都失败的情形,称之为服务雪崩

那什么是熔断?下面我们来用生活中常见的熔断应用举例,

第一个图是2020年3月9号,受疫情和石油崩盘影响,美国股票市场出现熔断

第二个图保险丝是用来防止过大电流产生危险的一种装置,电流大时,因过热保险丝会熔断,切断电路,起到保护作用。保险丝简单价廉,但更换麻烦。

第三个图空气开关,电流将流过双金属片而发热。如果电流过大,双金属片发热多而发生弯曲,使电路断开,起到保护作用。在排除故障后,只要稍后等双金属片冷却,按复位按钮就可恢复工作

服务熔断的原理

如下图所示,,断路器模式的状态图,当远程服务被调用时,断路器将监视这个调用,如调用时间太长,断路器将会介入并中断调用。此外,断路器将监视所有对远程资源的调用,如对某一个远程资源的调用失败次数足够多,那么断路器会出现并采取快速失败,阻止将来调用此远程资源的请求.

什么是服务降级

服务降级主要有两种场景:

一、当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度

二、当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户

在实际的项目中,可以采用以下的方式来完成降级工作

梳理出核心业务流程和非核心业务流程。然后在非核心业务流程上加上开关,一旦发现系统扛不住,关掉开关,结束这些次要流程。

一个微服务下肯定有很多功能,区分出主要功能和次要功能。然后次要功能加上开关,需要降级的时候,把次要功能关了

降低一致性,即将核心业务流程的同步改异步,将强一致性改最终一致性

默认兜底数据,返回静态数据,实现方式包括hard code,配置数据,文件缓存等

        Hystrix 是由 Netflex 开发的一款开源组件,提供了基础的熔断功能。 Hystrix 将降级的策略封装在 Command 中,提供了 run 和 fallback 两个方法,前者表示正常的逻辑,比如微服务之间的调用……,如果发生了故障,再执行 fallback方法返回结果,我们可以把它理解成保底操作。如果正常逻辑在短时间内频繁发生故障,那么可能会触发短路,也就是之后的请求不再执行 run,而是直接执行 fallback。hystrix-go 则是用 go 实现的 hystrix 版,更确切的说,是简化版

另外,也可以从hystrix-go的配置项看有哪些功能

配置1: Timeout

超时时间,默认1秒

配置2: RequestVolumeThreshold

默认值20.意思是至少有20个请求才进行errorThresholdPercentage错误百分比计算。比如一段时间(10s)内有19个请求全部失败了。错误百分比是100%,但熔断器不会打开,因为requestVolumeThreshold的值是20.

配置3: SleepWindow

过多长时间,熔断器再次检测是否开启,默认为5000,即5s钟

配置4: ErrorPercentThreshold

设定错误百分比,默认值50%,例如一段时间(10s)内有100个请求,其中有55个超时或者异常返回了,那么这段时间内的错误百分比是55%,大于了默认值50%,这种情况下触发熔断器-打开。

按照以上配置的熔断器表现如下:

每当20个请求中,有50%失败时(包括1秒超时失败),熔断器就会打开,此时再调用此服务,将会直接返回失败,不再调远程服务。直到5s钟之后,重新检测该触发条件,判断是否把熔断器关闭,或者继续打开

 

五、熔断服务在rpc调用中的应用说明

我们用一组图展示加入熔断前后的RPC调用流程对比,充分说明熔断服务的作用

 

文章来自个人专栏
数据库事务
2 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0