代码评审
烂代码的标准
-
不遵守diam规约
-
代码像迷宫
-
代码流程复杂或不清楚
-
代码执行效率低
-
bug 多
烂代码的后果
死循环: 不断出现的坑 -> 进度紧张 -> 到处灭火
对自己的要求
1.写出计算机能理解的代码
2.写出自己未来可以理解的代码
3.写出别人可以自我理解的代码
CR 常用的工具
Phabricator
Gerrit
CheckStyle
实战
健壮性
健壮性的定义:在遇到异常情况时,依然可以运行的能力。
架构
负载均衡
负载均衡:防止服务或者数据热点问题的出现,使得集群内的所有服务器的负载在同一个水平线上。
负载均衡的方法
轮询法:按顺序轮流地分配到各个服务器上。
最小连接法:根据服务器的链接数来分配流量。
随机法:流量随机分发
IP哈希法:保证IP地址请求到同一服务器上。
容灾能力
限流:有策略丢弃部分用户请求。限流和降级是不同的。
降级:部分功能不可用。
熔断:服务全部停止响应,以保护核心流程
灾备:赋值多份系统能力或解决数据核心服务单点问题
Sentinel
流控规则配置
感知机制
不要物理删除;主备切换
代码
代码健壮性:
-
所有的 POJO 类属性必须使用包装数据类型.
-
定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值。
-
定义数据对象 DO 类时,属性类型要与数据库字段类型相匹配
-
getter/setter 方法中,不要增加业务逻辑
-
进制在POJO类中,同时存在对应属性 xxx 的 isxxx() 和 getxxx() 方法
-
构造方法里进制加入任何业务逻辑。
-
封装:被封装的范围要尽量小。如果要扩展的话,再封装一下。
参数校验;
异常处理;
分支覆盖;
注意条件判断时的覆盖情况。条件组合的覆盖。
环境
混沌工程;
异地多活;
断网断电之后造成的影响
面向失败架构
思维就是力量
目的是为了防范已知的确定性风险和位置的不确定性风险
测试健壮性
功能测试:想象用户的一切可能行为进行正确性验证
稳定性测试:确定系统长时间在正常压力情况下运行的有效性
性能测试:系统能够体用的最大服务级别的能力
混沌工程:确定贡献上系统故障的恢复能力
自动化测试:一般用于核心接口的输入输出:不经常改动,所以可以用自动化脚本来测试。
混沌工程
Chaos Engineering
是在分布式系统上进行实验的科学,是一种未雨绸缪的心态。
建立稳定状态的假设
多样化实现世界事件
在生产环境运行实验
持续自动化运行实验
最小化“爆炸半径”