本文涉及工程中测试/稳定性相关的一些内容,全文见:https://segmentfault.com/a/11...
1.仿真环境是用线上流量转发到下线环境作线下实验。重点在于流量引入和数据/队列/push,im服务的隔离
2.全链路压测 是用大量与线上流量相似的流量请求到线上,检测故障。重点在于大量数据与真实流量的模拟,压测数据隔离
3.流量回放 能够用来定位问题,将有问题请求百分百还原到线下机器,对控制读写接口返回用线上真实mock,可不断重复。重点在于线下请求劫持到回放机器进行mock,和mock数据匹配。
4.故障注入也被叫防火平台,用于故障主动注入演练服务保护有效性等。
由于都是公司未开源东西。这里都会涉及到引流和数据隔离,先重点说下这两个的通用解决,而后只简单介绍四个的实现。html
assistant server为了截获响应给TCPCopy,不会回给online serverjava
数据同步+大量机器mysql
写本地或写丢弃,读线上。nginx
redis,mq,mysqlweb
ultron-server:web控制台,负责新建压测计划、压测任务,调整压测,修改压测配置,查看压测监控和性能数据等。
daemon:远程调起agent。ultron-server新建压测任务只会在数据库添加一条待运行的压测任务记录,并将空闲agent分配给压测任务,ultron-server自己不负责发压,而后daemon会从数据库读取待运行的任务以及给任务分配好的agent,而后经过shell命令远程调起agent。
datasource: 即数据源,全链路压测时向agent提供司乘基本信息和路线信息,http日志回放时向agent提供日志日志文件。datasource起了一个定时任务从redis(全链路压测)或者日志文件(http日志回放)读取数据,缓存到内存的队列里面,当压测agent启动后,从datasource的内存队列里面拉取压测数据。
redisfiller: 将匹配好的路线信息和司乘数据写入redis,供datasource拉取数据用。redis
降级预案的有效性:下游依赖出现故障时,预案能及时应对,将系统的 SLA 维持在相对较高的水平,不因下游故障引发当前服务可用性的故障
监控报警:校验报警是否符合预期:是否报警、消息提示是否正确、报警的实效、收到报警的人是否预期
故障复现:故障复盘的后续todo项落地效果如何,经过必定时间后对故障的重现和验证,完成闭环
架构容灾测试:主备切换、负载均衡、流量调度等容灾手段健壮性如何,提早发现并修复可避免的重大问题
参数调优:限流策略、报警阈值、超时设置的调优
故障模型训练:有针对性的制造一些故障,给故障定位系统制造数据sql
1.依赖服务端:故障规则,依赖分析
依赖模型包括关系、流量、强弱三个组成部分:
依赖关系:定义依赖的方向,我依赖谁,谁依赖我
依赖流量:定义每一个应用、服务、方法调用的次数
依赖强弱:定义依赖的松紧程度
对依赖的治理就是持续稳定的拿到关系、流量、强弱的数据。
架构拓扑可视化:自动探测应用的拓扑结构,绘制组件间依赖关系和应用对基础架构的依赖
2.依赖插件:
调用拦截,业务识别,注入
结果输出:依赖报表,用例轨迹,插件管理等
https://help.aliyun.com/docum...
3.注入:shell
降级、熔断,服务(1.目前写sdk在代码中读配置直接不发送就返回,分协议处理。2.统一劫持返回)和功能(开关配置)
限流,nginx改;统一入口流量劫持(目前thrift没作,能够和nginx同样令牌桶)
预案管理,开关监控数据库