开课吧孤尽T31训练营学习笔记-DAY30-系统健壮性设计

125 阅读4分钟

系统健壮性设计

这节课是孤尽老师上课,讲了很多系统健壮性方面的设计思想,内容很多,需要细细品味。

一、代码评审

系统健壮的基础其实是优良的代码,怎么保证优良的代码,孤尽老师给了解决方案,就是代码评审,code review,简称CR。

1.1 什么是烂代码

从人的角度

  1. 维护者脏话的频率高
  2. 维护者脏话的类型丰富
  3. 存在打架斗殴的可能性
  4. 面向离职编程

代码角度

  1. 不遵守代码规约
  2. 代码像迷宫
  3. 代码流程脚踩西瓜皮
  4. 代码执行效率低
  5. 10行代码15个bug

烂代码如何产生

  1. 业务催的紧直接写代码
  2. 没时间填坑,却不断挖坑
  3. 到处灭火,更是没有时间CodeRevew

1.2 程序员自我认知

星级程序员标准

  1. ※写出计算机可以理解的代码
  2. ※※ 写出未来自己可以理解的代码
  3. ※※※ 写出别人可以自我理解的代码

自我修养的过程

image.png

1.3 代码评审

代码评审的好处

  1. 团队成长:养成团队成员间的交流文化,有利于团队的知识共享
  2. 提升代码规范度:通过代码审查,发现纠正不规范情况,慢慢形成良好开发规范
  3. 提高代码质量:工程师互相review,扫除知识盲区,提升代码的质量
  4. 熵减的过程:减少系统混乱

代码评审副作用

  1. 对于自己错误的深刻理解
  2. 交流中碰撞出激情的火花
  3. 锻炼肺活量

如何做代码评审

  1. 统一的编码与设计规范
  2. 完整的技术架构说明与示例
  3. 不定期的review会议:小项目(3月)10天一次,大项目15天一次;前期密集,后期考虑1月一次。

推荐工具

Phabricator: Facebook开源代码审查工具 Gerrit: CodeReview+代码托管 CheckStyle:代码规范检查工具

CR建议

  1. 对事不对人
  2. 至少一条正面评价
  3. PR内容一定要少
  4. 不要在review中讨论需求
  5. 明确各模块负责人

二、 系统健壮性

2.1 健壮性度量

image.png

2.2 怎么提高健壮性

负载均衡

土豪:F5; 屌丝:LVS

容灾能力

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

推荐方案:Sentinel阿里开源项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。

数据健壮性

数据是企业生命线

  1. 逻辑删除,杜绝物理删除
  2. 主备准实施备份,具备快速切换服务的能力
  3. 定时云端离线备份,放地震,放水灾
  4. 定时本地冷备份,可以作为数据日志快照

代码健壮性

代码规约

  1. 所有的POJO类属性必须使用包装数据类型
  2. DO、DTO、VO、POJO类属性不要设定任何属性默认值
  3. 定义数据对象DO时,属性类型要与数据库字段类型相匹配
  4. getter/setter不要增加业务逻辑
  5. 禁止在POJO中同时出现isXXX和getXXX
  6. 构造方法里禁止加入任何业务逻辑,如果有初始化业务逻辑,放在init方法中

异常处理规约 image.png

封装:封装是一种对象功能内聚的表现形式,主要是被封装的组件、类、方法的影响半径尽可能的小,这也是提升系统健壮性的一种思维方式。

三、总结

这篇暂时从第一个层面给一些系统健壮性的思路和解决方案。后续一篇继续分享孤尽老师更加高层面的一个思维:面向失败的设计和开发。