由Redis故障场景,说说 ChaosBlade 贡献的二三事
晁元宁
概述
本文以2个新增 Redis 原子事件为例,帮助刚接触 ChaosBlade 的社区同学快速入门开源贡献。
开源贡献前提:了解混沌工程和掌握 Golang 开发。
原子事件贡献流程图如下:
第一步:分析故障演练需求,确认新增原子事件
Redis实际使用过程中会存在故障演练需求。
例如:
模拟Key过期故障:可以触发所有key过期的极端故障场景。
模拟缓存内存限制故障:可以主动触发Redis 内存淘汰策略释放内存场景。
根据故障演练需求价值,决定是否有必要新增相关混沌工程原子事件。
第二步:Fork项目&本地拉取代码并创建dev分支
第三步:正式开始新原子事件开发
3.1 拉取chaosblade-exec-middleware项目代码
middleware项目:包含Nginx、Redis等中间件相关实验核心代码。
项目地址:https://github.com/chaosblade-io/chaosblade-exec-middleware
3.2 新建redis目录
该目录放置Redis原子事件核心代码
3.3 新建 redis.go 文件
3.4 Redis原子事件包含到Model
model目录位置:chaosblade-exec-middleware/exec/model/目录
model目录不同文件对应不同系统支持:
1、model_darwin.go 支持Mac系统
2、model_linux.go 支持linux系统
3、model_windows.go 支持windows系统
model具体代码:
chaosblade-exec-middleware/exec/model/
3.5 Redis原子事件包含到编译文件
具体文件:添加Redis到chaosblade-exec-middleware/build/spec.go
具体代码:
chaosblade-exec-middleware/build/spec.go
3.6 开发具体原子事件
- 缓存过期实验:
chaosblade-exec-middleware/exec/redis/redis_cache_expire.go
- 缓存内存限制实验
chaosblade-exec-middleware/exec/redis/redis_cache_limit.go
第四步:使用Goland本地调试,有bug或优化再次开发调试。
4.1 搭建准备Redis服务
参考相关文档
4.2 修改Goland Debug配置
1.打开main.go 点击三角按钮,选择Modify Run Configuration…
2.修改debug配置:详细使用可以查看Goland官方文档
3.执行Debug操作:详细使用可以查看Goland官方文档
第五步:本地编译并替换测试环境旧编译文件
5.1 参考官方文档执行编译
如果在 mac 系统上,编译当前系统的版本,请执行:
make build_darwin
如果想在 mac 系统上,编译 linux 系统x86架构版本,请执行:
make build_linux
如果想在 mac 系统上,编译linux 系统arm 架构版本,请执行:
make build_linux_arm
说明:其他系统编译说明参考 官方文档
5.2 编译后文件存放在target目录中
5.3 测试环境替换为新编译文件
将测试服务器chaosblade目录以下文件替换为新版本
chaosblade-1.7.2/bin/chaos_middleware
chaosblade-1.7.2/yaml/chaosblade-middleware-spec-1.7.2.yaml
第六步:测试环境测试直至通过
6.1 测试模拟缓存过期实验
执行实验:
验证实验结果:
6.2 测试模拟缓存内存限制实验
执行实验:
验证实验结果:
说明:测试有bug或待优化,重复开发、调试和编译步骤
第七步:使用dev分支创建和提交PR
7.1 推送本地dev分支GitHub远程
7.2 登录GitHub 使用dev分支创建和提交PR
7.3 提交PR后准备官网ChaosBlade文档贡献
第八步:PR审查直至审查通过
第九步:PR合并至main,新增原子事件贡献成功。
ChaosBlade 官方网址:https://chaosblade.io/
ChaosBlade Github : https://github.com/chaosblade-io/chaosblade
ChaosBlade 钉钉社区交流群:23177705