汉得鲲苍基础架构管理平台的核心目标是为企业的异构系统提供简单高效的一站式统一闭环管理能力,包括统一资源(集群、主机、存储等)管理、统一应用及部署管理、统一监控管理、统一服务治理,帮助企业实现更快、更好、更全面的异构系统管理。
接下来我们将会提供一系列推文,介绍鲲苍平台的使用,帮助您快速了解本平台,给您更好的使用体验。
本文为系列推文的第二十八讲,将介绍如何通过鲲苍提升系统韧性,从故障注入&故障重试开始。
本篇概述
高可用系统从不是“零故障”,而是“扛得住故障”。你是否也遇到过——服务偶发超时、下游依赖服务闪断、流量激增导致组件崩溃……这些看似“突然”的问题,其实都能在演练中提前暴露。
本篇推文将带你实战入门:
◆ 如何通过故障注入主动制造问题(如主动引入延迟、错误响应等异常),检验系统极限,验证系统容错能力及恢复机制。无需修改业务代码即可实现无侵入故障模拟,模拟网络抖动、服务宕机等真实故障场景。
◆ 如何设计故障重试机制,实现服务自我恢复,用于提升系统对临时性故障(如网络抖动、服务短暂过载等)的容错性。
前置操作
参考【鲲苍提效】灰度发布:助力产品无缝升级,让创新一步到位 中的前置操作章节,主要涉及集群与环境配置、业务服务配置两个前置操作。
功能亮点
一、关键流程:故障注入
1. 部署故障注入组件
2. 关键参数说明
服务配置:配置需要注入故障的应用服务。
- 目标服务:应用服务对应的Service Name
- 服务端口:如果Service暴露多个端口,则需要配置,否则单个端口时无需配置
- 服务版本:如果应用服务只有一个版本,则可以不用配置。对应Pod中的 version 标签值
延迟配置:注入请求延迟。
- 延迟时间:5s,1m等时间格式
- 注入百分比:请求注入延迟占比
中止配置:注入异常中断,如果配置了延迟注入则此处不生效。
- HTTP状态码:异常返回状态码,比如503等
- 注入百分比:注入异常中断的请求百分比
匹配规则:根据URL路径或者请求头匹配,只有匹配的请求才会注入故障,如果不配置,默认所有请求都会注入如上相应故障。
- 匹配模式:精确匹配,正则匹配,前缀匹配
3. 故障注入效果验证
延迟注入效果验证
## 请求头匹配,注入延迟
curl -X GET -o /dev/null -s -w "total time: %{time_total}s\n" http://hzero-gateway/hfle/v1/grayscale/version -H "Authorization: Bearer b1caa12a-b0ae-4ced-a3b5-e9fb6385faae" -H "Custom: sdq"
## 不添加请求头或者请求头匹配值不等于上面配置的
curl -X GET -o /dev/null -s -w "total time: %{time_total}s\n" http://hzero-gateway/hfle/v1/grayscale/version -H "Authorization: Bearer b1caa12a-b0ae-4ced-a3b5-e9fb6385faae" -H "Custom: sdq1"
中断注入效果验证
## 请求头匹配,注入中断
curl -X GET -o /dev/null -s -w "status code: %{http_code}\n" http://hzero-gateway.io/hfle/v1/grayscale/version -H "Authorization: Bearer b1caa12a-b0ae-4ced-a3b5-e9fb6385faae" -H "Custom: sdq"
## 不添加请求头或者请求头匹配值不等于上面配置的
curl -X GET -o /dev/null -s -w "status code: %{http_code}\n" http://hzero-gateway.io/hfle/v1/grayscale/version -H "Authorization: Bearer b1caa12a-b0ae-4ced-a3b5-e9fb6385faae" -H "Custom: sdq1"
二、关键流程:故障重试
1. 部署故障重试组件
服务配置:配置访问故障时需要重试的目标应用服务。
- 目标服务:应用服务对应的Service Name
- 服务端口:如果Service暴露多个端口,则需要配置,否则单个端口时无需配置
- 服务版本:如果应用服务只有一个版本,则可以不用配置。对应Pod中的 version 标签值
重试配置:配置请求重试规则。
- 重试次数:异常后重试的次数,不包含初始请求
- 重试超时时间:重试时间限制,防止卡死
- 重试条件:触发重试的特定错误类型,比如,常见的5xx, connect-failure, reset等
常见的两种场景如下:
- 高频网络抖动: 重试条件: connect-failure, reset + 重试次数: 3
- 服务间歇性 503: 重试条件: 5xx + 重试超时时间: 1s
匹配规则:根据URL路径或者请求头匹配,只有匹配的请求才会重试,如果不配置,默认所有请求都会进行重试。
- 匹配模式:精确匹配,正则匹配,前缀匹配
3. 故障重试效果验证
手工构造503请求:打印相关日志。
@GetMapping("/simulate-uc")
@Permission(level = ResourceLevel.SITE, permissionPublic = true)
public void simulateUC(@RequestHeader HttpHeaders headers, HttpServletResponse response) {
System.out.println("重试次数: " + headers.getFirst("x-envoy-attempt-count"));
response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE); // 503
try {
response.flushBuffer(); // 提交状态码
response.getOutputStream().close(); // 强制关闭连接
} catch (IOException e) {
throw new RuntimeException("Connection termination failed", e);
}
}
请求如下:
## 请求头匹配,注入中断
curl -X GET http://hzero-gateway/hfle/v1/grayscale/simulate-uc -H "Authorization: Bearer b1caa12a-b0ae-4ced-a3b5-e9fb6385faae" -H "Custom: sdq"
## 不添加请求头或者请求头匹配值不等于上面配置的
curl -X GET http://hzero-gateway/hfle/v1/grayscale/simulate-uc -H "Authorization: Bearer b1caa12a-b0ae-4ced-a3b5-e9fb6385faae" -H "Custom: sdq1"
联系我们:
- 试用申请https://open.hand-china.com/market-home/trial-center
- 如果您想了解鲲苍更详细的功能介绍和产品信息,请登录开放平台查阅我们的产品文档
- 如果您有疑问,可以通过开放平台进行工单反馈,问题分类请选择【产品/汉得基础架构管理平台】
- 相关产品咨询或更多信息了解,欢迎联系我们。
邮箱:[email protected]-china.com