腾讯微服务平台TSF学习笔记(一)--如何使用TSF的Sidecar过滤器实现mesh应用的故障注入

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 ns
spec:host:- xxx-svrhttp:- fault:abort:httpstatus: 500percent: 50delay:fixedDelay: 1spercent: 100

envoy官方对于故障注入的建议: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!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/194205.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型的交互能力

摘要&#xff1a; 基础大模型显示出明显的潜力&#xff0c;可以改变AI系统的开发人员和用户体验&#xff1a;基础模型降低了原型设计和构建AI应用程序的难度阈值&#xff0c;因为它们在适应方面的样本效率&#xff0c;并提高了新用户交互的上限&#xff0c;因为它们的多模式和生…

RobotFramework之用例执行时添加命令行参数(十三)

学习目录 引言 标签tag 设置变量 随机执行顺序 设置监听器 输出日志目录和文件 引言 Robot Framework 提供了许多命令行选项&#xff0c;可用于控制测试用例的执行方式以及生成的输出。本节介绍一些常用的选项语法。 标签tag 之前文章我们介绍过&#xff0c;在测试套件…

浅谈滑动窗口

滑动窗口是什么&#xff1f; 滑动窗口其实是一个想象出来的数据结构。有左边界L和有边界R。 举例来说&#xff1a;数组 arr {3,1,5,7,6,5,8}; 其窗口就是我们规定的一个运动轨迹。 最开始时&#xff0c;边界LR都在数组的最左侧&#xff0c;此时没有包住任何数。 此时规定&…

线性变换概论

线性变换 定义 设 V V V 和 W W W 都是在域 K K K上定义的向量空间&#xff0c; T : V → W T :V \rightarrow W T:V→W 对任二向量 x , y ∈ V x,y \in V x,y∈V,与任何标量 a ∈ K a \in K a∈K&#xff0c;满足&#xff1a; T ( x y ) T ( x ) T ( y ) T(xy)T(x)T(…

Windows 的 WSL 中运行 EasyConnect

Windows 的 WSL 中运行 EasyConnect docker-easyconnect 安装 Docker Desktop 通过 Docker 的官网 Docker Desktop 下载并安装. 安装过程一直下一步即可, 默认推荐 WSL 模式 初始化过程需要梯子 安装完后在搜索框搜索 docker-easyconnect hagb/docker-easyconnect 就是需要…

Spring Boot中使用Redis进行大数据缓存

Spring Boot中使用Redis进行大数据缓存 在Spring Boot中使用Redis进行大数据缓存是一种常见的做法&#xff0c;因为Redis是一种高性能的内存数据库&#xff0c;适用于缓存大量数据。以下是说明和示例代码&#xff0c;演示如何在Spring Boot项目中使用Redis进行大数据缓存。 步…

【Spring总结】注解开发

本篇讲的内容主要是基于Spring v2.5的注解来完成bean的定义 之前都是使用纯配置的方式来定义的bean 文章目录 前言1. Spring v2.5 注解开发定义bean第一步&#xff1a;在需要定义的类上写上注解Component第二步&#xff1a;在Spring Config中定义扫描包第三步&#xff1a;主方法…

在线ws/wss调试工具

具体前往&#xff1a;在线webSocket(ws)调试工具

项目点使用Redis作为缓存技术-自用

在spring boot项目中&#xff0c;使用缓存技术只需在项目中导入相关缓存技术的依赖包&#xff0c;并在启动类上使用EnableCaching开启缓存支持即可。 例如&#xff0c;使用Redis作为缓存技术&#xff0c;只需要导入Spring data Redis的maven坐标即可。 描述 使用Redis缓存高频数…

图书管理系统 保姆级教学 手把手教你图书管理系统设计!

天梯无捷径&#xff0c;唯有苦攀登。 一起加油&#xff0c;小伙伴们&#xff01;&#xff01; 目录 1. 实现思路: 2. 那么如何找对象呢? 3. Book类的实现 Book类总代码&#xff1a; 4. BookList类的实现 BookList类总代码&#xff1a; 5. 用户的操作 5.1 AddOperation类…

Ubuntu(Linux)的基本操作

基本操作三步走 1、输入vim code.c点击i&#xff08;出现insert&#xff09;表示可以编辑代码编辑代码之后按下esc&#xff08;退出编辑模式&#xff09;按下shift:&#xff08;冒号&#xff09;wq&#xff08;退出文件&#xff09;2、输入gcc code.c&#xff08;进行编译代码…