如何编程写代码,黑帽seo工具,怎样用js做网站轮播图,优普南通网站建设Mesh应用的故障注入 故障注入前世今生Envoy设置故障注入-延迟类型设置故障注入-延迟类型并带有自定义状态码总结 故障注入前世今生
故障注入是一种系统测试方法#xff0c;通过引入故障来找到系统的bug#xff0c;验证系统的稳健性。istio支持延迟故障注入和异常故障注入。 … Mesh应用的故障注入 故障注入前世今生Envoy设置故障注入-延迟类型设置故障注入-延迟类型并带有自定义状态码总结 故障注入前世今生
故障注入是一种系统测试方法通过引入故障来找到系统的bug验证系统的稳健性。istio支持延迟故障注入和异常故障注入。
在服务网格和API网关等基础设施中故障注入通常可以通过配置来实现在Istio和Envoy中可以使用EnvoyFilter或VirtualService资源来配置故障注入规则。通过这种方式可以在不修改应用代码的情况下实现故障注入便于测试和验证系统的健壮性。
Envoy
Envoy作为数据面代理连接和流量处理的核心是网络过滤器Network Filter该过滤器一旦融合进过滤器链Filter Chain就可以实现访问控制、数据或协议转换、数据增强、审计等高级功能。通过添加新的过滤器可以用来扩展Envoy的已有功能集。 在istio中可以直接设置故障注入配置信息
kubectl get vs xxx-svr -o yaml -n nsspec:host:- xxx-svrhttp:- fault:abort:httpstatus: 500percent: 50delay:fixedDelay: 1spercent: 100envoy官方对于故障注入的建议https://cloudnative.to/envoy/configuration/http/http_filters/fault_filter.html 腾讯云官对于sidecar过滤器的描述和使用建议https://cloud.tencent.com/document/product/649/43495
设置故障注入-延迟类型
鉴于envoy的特点我们可以用它来实现故障注入新建一个sidecar过滤器填写以下内容 过滤器名称任意合法名称 作用位置作为服务端 脚本内容
function envoy_on_request(request_handle)--自定义部分定义延迟概率和延迟时间的请求头local delay_percent tonumber(request_handle:headers():get(x-delay-percent))local delay_duration tonumber(request_handle:headers():get(x-delay-duration))if delay_percent and delay_duration thenlocal random_value math.random(100)if random_value delay_percent thenrequest_handle:logInfo(Injecting delay for .. delay_duration .. ms)os.execute(sleep .. tostring(delay_duration / 1000))endend
end
function envoy_on_response(response_handle)--自定义部分
end随后登录到其他mesh应用(user)所在的节点上执行命令
持续请求该脚本从HTTP请求头中读取x-delay-percent和x-delay-duration字段然后根据这些字段的值决定是否注入延迟。如果随机数小于x-delay-percent则注入延迟单位毫秒
while true;do curl shop:80/api/v6/shop/items -H x-delay-percent: 50 -H x-delay-duration: 1000;sleep 1;done然后我们就可以观察到请求成功进入调用链页面可以观察到大概有50%的请求被延迟了1000ms 查看envoy日志可以查看到Injecting delay for 1000ms 字样
设置故障注入-延迟类型并带有自定义状态码
当延迟类型的异常发生时返回自定义状态码567
function envoy_on_request(request_handle)--自定义部分
end
function envoy_on_response(response_handle)local delay_percent 50 --50% 异常local delay_duration 1000 --延迟1000mslocal random_value math.random(100)if random_value delay_percent thenresponse_handle:logInfo(Injecting delay for .. delay_duration .. ms)os.execute(sleep .. tostring(delay_duration / 1000))response_handle:headers():replace(:status, 567)end
end总结
和阿里给的一模一样嘛excited