汉得鲲苍基础架构管理平台的核心目标是为企业的异构系统提供简单高效的一站式统一闭环管理能力,包括统一资源(集群、主机、存储等)管理、统一应用及部署管理、统一监控管理、统一服务治理,帮助企业实现更快、更好、更全面的异构系统管理。
接下来我们将会提供一系列推文,介绍鲲苍平台的使用,帮助您快速了解本平台,给您更好的使用体验。
本文为系列推文的第十五讲,将介绍如何通过鲲苍实现灵活的服务熔断与限流配置能力。
服务熔断与限流能力,是保障服务稳定运行、保障用户体验、提高系统整体可用性的重要手段。
服务熔断(Circuit Breaker) :当访问某服务的请求错误比例达到一定阈值时,为了保证整体业务系统的可用性,即启动熔断限制规则,隔离不健康的服务实例,有效提高正常服务实例的访问成功率,从而避免故障服务影响到其他正常服务。服务熔断可以有效防止服务故障雪崩效应,提高系统可用性。
服务限流(Rate Limiting) :面对流量风暴,或可预知的大流量冲击,对指定对象进行流量限制,可以有效防止瞬时流量过大造成的服务故障或者单个服务占用过多资源导致的服务不可用。
服务熔断字段说明
前置准备
1. 部署httpbin应用
部署基础组件选择istio-httpbin组件进行部署,各字段填写如下图所示:
2. 部署fortio-deploy工具
◆ 新建部署组
部署fortio-deploy工具,部署组文件可点击此处下载。
◆ 新建服务发现
服务发现目标选择对应部署组,并填写信息如下图所示:
服务熔断实战一:最大连接数(并发)
1. 服务熔断配置
选择目标服务demo-httpbin,如下配置表示当并发请求数及连接数超过1时,继续访问目标服务将会触发熔断。
2. 验证
首先输入以下代码设置变量:
【export FORTIO_POD=$(kubectl get pods -n yanshi-demo -l app=fortio -o 'jsonpath={.items[0].metadata.name}')】
然后输入以下代码进行访问,表示连续发起20次请求,且并发连接数为1:
【kubectl exec "$FORTIO_POD" -c fortio -n yanshi-demo -- /usr/bin/fortio load -c 2 -qps 0 -n 20 -loglevel Warning http://demo-httpbin:8000/get】
验证结果如下,20次请求里有25%请求返回503,表示已被熔断拦截(Istio允许一定的误差):
增加并发连接数到3,验证如下:
【kubectl exec "$FORTIO_POD" -c fortio -n yanshi-demo -- /usr/bin/fortio load -c 3 -qps 0 -n 20 -loglevel Warning http://demo-httpbin:8000/get】
验证结果如下,被熔断的错误率达到了60%:
从日志中可以看到累计被熔断的请求数:
【kubectl exec "$FORTIO_POD" -c istio-proxy -n yanshi-demo -- pilot-agent request GET stats | grep httpbin | grep pending】
服务熔断实战二: 连续5xx
1. 服务熔断配置
选择目标服务demo-httpbin,如下配置表示当连续出现5xx错误数为3时,就会触发熔断。
2. 验证
◆ 步骤一
输入以下代码进行访问,表示连续发起请求20次,最大请求数为3:
【kubectl exec "$FORTIO_POD" -c fortio -n yanshi-demo -- /usr/bin/fortio load -c 3 -qps 0 -n 20 -loglevel Warning http://demo-httpbin:8000/get】
验证结果如下,全部返回正常:
◆ 步骤二
输入以下代码进行访问,表示发起3次502状态码请求:
【kubectl exec "$FORTIO_POD" -c fortio -n yanshi-demo -- /usr/bin/fortio load -c 1 -qps 0 -n 3 -loglevel Warning http://demo-httpbin:8000/status/502】
验证结果如下,三次请求返回502状态码,全部正常返回:
◆ 步骤三
输入以下代码进行访问,表示发起3次正确请求:
【kubectl exec "$FORTIO_POD" -c fortio -n yanshi-demo -- /usr/bin/fortio load -c 1 -qps 0 -n 3 -loglevel Warning http://demo-httpbin:8000/get】
验证结果如下,三次请求均返回503表示服务已被熔断:
3. 查看服务事件
服务限流字段说明
1. 全局限流
2. 本地限流
前置准备
◆ 存在已部署运行的Bookinfo应用
服务限流实战一:全局限流
1. 服务限流配置
选择目标服务productpage,如下配置表示当请求路径精确匹配并且请求数大于2时,就会触发限流。
每一条限流明细之间集合关系为交集。
2. 验证
输入以下代码进行访问,表示发起10次请求:
【for i in (kubectl -n yanshi-demo get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -s productpage:9080/static/bootstrap/js/bootstrap.min.js -o /dev/null -w "%{http_code}\n"; done 】
验证结果如下,第四次访问时开始被限流:
服务限流实战二:本地限流
1. 服务限流配置
选择目标服务productpage,如下配置表示同一时间最大请求数为3时,就会触发限流。
本地限流采用令牌桶算法进行限流,限流预算仅限于单个服务实例维度。每一条限流明细之间集合关系为交集。
2. 验证
输入以下代码进行访问,表示发起10次请求:
【for i in (kubectl -n yanshi-demo get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -s productpage:9080/productpage -o /dev/null -w "%{http_code}\n"; done】
验证结果如下,第六次访问时开始被限流:
查看服务事件
想了解平台更多功能?请关注后续一系列推文~
欢迎在评论区留言,与我们一起探讨服务熔断、限流在您业务中的应用潜力!
联系我们:
-
如果您想了解鲲苍更详细的功能介绍和产品信息,请登录开放平台查阅我们的产品文档
-
如果您有疑问,可以通过开放平台进行工单反馈,问题分类请选择【产品/汉得基础架构管理平台】
-
相关产品咨询或更多信息了解,欢迎联系我们。邮箱: openhand@vip.hand-china.com