概述
熔断器关注禁用那些可能请求错误的会话,从负载均衡器的角度来看,它们充当断路器,当被触发时,临时暂停特定端点的使用。以避免级联错误及雪崩效应导致资源耗尽。
在client配置中有两个模块可以被视为断路器:
Fail Fast - 会话(连接)驱动的断路器
Failure Accrual - 请求驱动的断路器
Fail Fast
默认情况下,快速失败在 linkerd 中是禁用的,因为在使用少量主机时代理服务请求可能会出现问题。如果服务只有一个主机,从负载均衡池中删除与该主机的唯一连接将导致该服务的所有请求失败,直到重新建立连接。在这种情况下,最好将连接留在池中,并继续发送请求。然而,对于较大的服务,快速失败是有用的,并且可以在每路由器的基础上在配置路由器时通过设置 failFast 参数来启用。
我们来演示一下会话驱动的熔断器。
1、修改config/linkerd.yaml开启failFast,默认是关闭状态。
$ vi config/linkerd.yaml
routers:
- protocol: http
client:
#开启failFast
failFast: true
loadBalancer:
kind: p2c
maxEffort: 5
2、重启linkerd
$ ./linkerd config\linkerd.yaml
3、测试访问
执行多次请求
$ curl -H "Host:test" http://127.0.0.1:4140
It works too!
It works too!
It works!
It works!
It works!
It works too!
It works!
4、模拟会话失败(我们关闭上文建立的81服务)
$ sudo mv /etc/nginx/sites-enabled/default2 /etc/nginx/sites-available/
5、ngnix 重新加载配置文件
$ sudo /usr/sbin/nginx -s reload
6、测试访问
执行多次请求
$ curl -H "Host:test" http://127.0.0.1:4140
It works!
It works!
It works!
It works!
在某次请求明显感觉得到卡顿之后,客户端开启了熔断模式,请求被负载均衡定向到健康的服务节点。
7、恢复服务
$ sudo mv /etc/nginx/sites-available/default2 /etc/nginx/sites-enabled/
$ sudo /usr/sbin/nginx -s reload
8、测试访问
执行多次请求
$ curl -H "Host:test" http://127.0.0.1:4140
It works too!
It works too!
It works!
It works!
It works!
It works too!
It works!
requeueBudget重试
requeues
Requeues连接级故障前提是保证幂等。如果遇到连接级别失败,并且有requeueBudget配置(有默认配置),则将重试请求。是由client下的requeueBudge参数配置的。每个client都有自己的requeueBudge,不与其他client或service共享。
会话(连接)级别的重试配置,可以在client配置下新增requeueBudget配置:
routers:
- protocol: http
client:
requeueBudget:
minRetriesPerSec:10
percentCanRetry:0.2
ttlSecs:10