本文是从零学习envoy笔记第四章 - 断路器
- 从零学习envoy笔记 - Gateway总览
- 从零学习envoy笔记 - 学习EG API和Gateway API
- 从零学习envoy笔记 - 快速部署实验环境
- 从零学习envoy笔记 - 官方Task Backend Routing
- 从零学习envoy笔记 - 官方Task Backend Utilization Load Balancing
- 从零学习envoy笔记 - 官方Task Bandwidth Limit
- 从零学习envoy笔记 - 官方Task Client Traffic Policy
BackendTrafficPolicy
断路器是指,当后端压力过大时,Envoy 主动限制继续打到后端的请求数量,让一部分请求快速失败,用于保护后端。
Envoy Gateway 支持如下断路器阈值
- 并发连接:限制 Envoy 可以與上游服務建立的連線數。當達到此閾值時,將不會建立新連接,部分請求將被排隊,直到現有連接可用為止。
- 并发请求:限制 Envoy 向上游服務發送的並發請求數。當達到此閾值時,請求將被排隊。
- Pending请求:限制 Pending 請求队列的大小。當達到此閾值時,超出佇列容量的請求將被終止。
503狀態碼。
Envoy 的计数器是跟随 Envoy Proxy 实例来维护的,默认的断路器为 1024,对于高并发系统来说很容易被触发
断路器配置
断路器配置就是根据 BackendTrafficPolicy 来配置的,然后绑定到对应的 Gatway API 上
yaml
| |
实验
设置路由 red / gray, 50% 的流量到red,50%流量到gray
text
| |
给 HTTPRoute 加断路器
text
| |
测试访问
text
| |
需要注意的是,这里不能用 for , for 是串行的,没法测试出来
这里需要用 ab 这类工具测试才可以,这里使用 go 的 hey (官网推荐的工具) 来进行测试
text
| |
hey 测试结果更明显些,可以看出来什么请求多少个
text
| |
卸载断路器的结果
text
| |
上述例子差不多为 200 25%, 503 75%,这里模拟的是 “100 个请求、50 并发”,“每一个后端同时接受 “1 个 active + 5 个 pending ≈ 6 个可接受请求” (可能有多种条件,如85,15; 80,20)
text
| |
Reference
[1] Circuit Breakers