孤尽T31训练营13系统健壮性设计笔记

195 阅读3分钟

这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

代码评审

程序员的的分级

  • 写出计算机可以理解的代码
  • 写出自己未来可以理解的代码
  • 写出别人可以自我理解的代码

程序员的自我修养

  • 写出好代码-->技术水平不断提高-->帮助别人成长-->写出好代码

代码评审

  • 简称CR
  • 熵减的过程
    • 减少系统混乱
  • 提高代码质量
    • 工程师相互review,扫除知识盲区,提升代码的质量
  • 提升代码规范度
    • 通过代码审查,发现纠正不规范情况,慢慢形成良好开发规范

如何做好CR

  • 统一的编码与设计规范
  • 完善的技术架构说明与事例
  • 不定期的Review会议

CR建议

  • 对事不对人
  • 至少一条下面评价
  • PR内容一定要少
  • 不要在review中讨论需求
  • 明确各模块负责人

两个CR实战

image-20211126124720649.png

image-20211126124729791.png

健壮性与鲁棒性

什么是软件的健壮性差

  • 一个人经常生病的话那我们说他体质差。软件会有黑客的各类破解,病毒或者在使用中因为数据 错误、操作错误、设计功能问题等等导致软件的可用性差,即称为软件 的健壮性差。

健壮笥与鲁棒性

  • 健壮性
    • 意译
    • 异常情况、特殊环境、超限情况下依然能够稳定运行的能力
  • 鲁棒性
    • 音译
    • 形容词robust强健的,强壮的,耐用的,坚固的,富有活力的

健壮性度量

  • 架构,负载均衡、容灾能力
  • 代码,参数检验、异常处理、分支覆盖
  • 环境,混沌工程、异地多活

如何构建健壮性的系统

负载均衡

  • 负载均衡是防止服务或者数据热点问题的出现 ,使得集群内的所有服务器的负载水位在同一个水平线上
  • 轮询法
    • 按顺序轮流地分配到各个服务器上(可以加权)
  • 最小连接数法
    • 根据服务器的连接数来分配流量
  • IP哈希法
    • 保证IP地址请求到同一服务器上
  • 随机法
    • 流量随机分发

容灾能力

  • 限流
    • 有策略地丢弃部分用户请求
  • 熔断
    • 服务全部停止响应,以保护核心流程
  • 灾备
    • 复制多份系统能力或解决数据核心服务单点问题
  • 降级
    • 部分功能不可用或用户体验被降级

数据的健壮性

  • 数据是企业生命线
  • 逻辑删除
    • 杜绝物理删除
  • 主备准实时备份
    • 快速切换服务能力
  • 定时云端离线备份
    • 防地震,防水灾
  • 定时本地冷备份
    • 可以作为数据日志快照

面向失败的架构思维

面向失败架构

  • 网络抖动
    • 甚至是断网,如何提示、恢复、切换
  • 服务超时
    • 任何服务都要考虑超时没有返回的可能性
  • 弱电断电
    • 多云、多地部署能力
  • 洪峰流量
    • 流量打爆服务器后的健壮性

混沌工程

混沌工程(ChaosEngineering):是在分布式系统上进行实验的学科,是一种未雨绸缪的心态.由薄弱的环节上,做到自我发现.特点是放置一个炸弹进去,控制爆炸半径,评估损伤和自我修复能力.

混沌原则

在开发混沌工程实验时,可以遵循以下原则,将有助于实验设计

  • 建立稳定状态的假设
  • 多样化现实世界事件
  • 在生产环境运行实验
  • 持续自动化运行实验
  • 最小化“爆炸半径”