大纲:代码评审、健壮性与鲁棒性、混沌工程
代码评审
如何做CR(code review)
- 统一的编码与设计规范
- 完整的技术架构说明与事例
- 不定期的Review会议
- 小项目(3个月内)可以10天/次,大项目(6个月以上)15天/次,前期可以安排密集一些,后期考虑1月/次
推荐工具:
- Phabricator:Facebook开源的代码审查工具
- Gerrit:非常强的CR + 代码托管工具
- CheckStyle:代码规范检查工具
CR建议
- PR内容一定要少
- 至少一条正面评价
- 对事不对人
- 不要在review中讨论需求
- 明确各模块负责人
健壮性与鲁棒性
健壮性(意译):异常情况、特殊环境、超限情况、依然能够稳定运行的能力
鲁棒性(形容词robust,音译)
健壮性度量:
- 架构:负载均衡、容灾能力
- 代码:参数校验、异常处理、分支覆盖
- 环境:混沌工程、异地多活
负载均衡:
防止服务或者数据热点问题的出现,使得集群内的所有服务器的负载水位在同一个水平线上
- 轮询法:按顺序轮流地分配到各个服务器上(可以加权)
- 最小连接数法:根据服务器的连接数来分配流量
- 随机法:流量随机分发
- IP哈希法:保证IP地址请求在同一服务器上
容灾能力
- 限流:有策略地丢弃部分用户请求
- 降级:部分功能不可用,或用户体验被降级
- 熔断:服务全部停止响应,以保护核心流程
- 灾备:复制多份系统能力或解决数据核心服务单点问题
数据健壮性
- 逻辑删除:杜绝物理删除
- 定时本地冷备份:可以作为数据日志快照
- 主备准实时备份:快速切换服务能力
- 定时云端离线备份:防地震,防水灾
代码健壮性
面向失败架构
- 网络抖动:甚至是断网,如何提示,恢复,切换
- 服务超时:任何服务都要考虑超时没有返回的可能性
- 弱电断电:多云,多地部署能力
- 洪峰流量:流量打爆服务器后的架构健壮性
断电预案
断网处理
测试健壮性
- 功能测试:想象用户的一切可能行为进行正确性验证
- 稳定性测试:确定系统长时间在正常压力情况下运行的有效性
- 性能测试:系统能够提供的最大服务级别的能力
- 混沌工程:确定线上系统故障的恢复能力
混沌工程
混动工程是在分布式系统上进行实验的学科,是一种未雨绸缪的心态。由薄弱的环节上,做到自我发现。特点是放置一个炸弹进去,控制爆炸半径,评估损伤和自我修复能力。
Netflix提出 Chaos Monkey
在开发混沌工程实验时,可遵循以下原则,将有助于实验设计:
- 建立稳定状态的假设
- 多样化现实世界事件
- 在生产环境运行实验
- 持续自动化运行实验
- 最小化“爆炸半径”
稳定性指标