这是我参与「第三届青训营-后端场」笔记创作活动的的第6篇笔记。
为什么要有流程
随着团队规模和问题复杂度的上升,一个人搞定一切就不可能了,超过了一个人,就需要进行团队协作,自然也就需要有流程。
常见的协作模式:
- 传统的瀑布模型:最直观,以流程为本,理想化模型
- 敏捷开发:更现代,快速迭代,团队合作紧密,以人为本
- 规模化敏捷(The scaled agile framework, SAFe):将敏捷的理念扩展成为企业的管理框架
- 现代 Scrum (Scrum是敏捷开发的一种实践模式)
- 敏捷教练(scrum master)
- 产品负责人(product owner)
- 敏捷团队(scrum team)
- 敏捷发布火车(agile release train)
- 现代 Scrum (Scrum是敏捷开发的一种实践模式)
有哪些流程
需求阶段
最小化可行产品(minimum viable product, MVP)思想
- 站在用户角度思考
- 手机用户反馈,快速迭代
开发阶段
云原生下的开发
- 传统虚拟机× 容器化√
- 单体架构× 微服务架构√
- 各个功能在不同的服务中
- 不同模块需要进行RPC通信
- 不同模块可以独立扩缩容
- 每个服务的代码仓库仅由少部分人维护
- Web IDE
团队分支策略
代码规范
- 养成良好的注释习惯,超过三个月的代码,自己都会忘了当时在想什么
- 不要有魔法数字,魔法字符串
- 重复的逻辑抽象成公共的方法,不要copy代码
- 正确使用IDE的重构功能,防止修改错误
自测
- 单元测试
- 功能环境测试
- 测试数据构造
文档
- 大型改造需要有技术设计文档,方案评审
- 好的接口文档能更方便的和前端进行沟通
测试阶段
功能测试
- 是为了测试一个新开发的功能,因此需要有能模拟线上的开发和测试环境
- 环境之间能相互隔离,这样可以独立验证不同的新功能
集成测试
- 不同人开发的功能合并在一起测试,相互之间的影响可能产生缺陷
- 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生缺陷
回归测试
- 确保新的功能不对老的功能产生影响
- 回归测试一般会借助自动化测试脚本
发布阶段
发布模式
| 发布模式 | 方法 | 优点 | 缺点 | 适用 |
|---|---|---|---|---|
| 蛮力发布 | 简单粗暴,直接用新版本覆盖老版本 | 简单,成本低 | 发布过程服务中断,出了问题影响全部用户 | 测试环境部署;小公司或者非核心的业务服务 |
| 金丝雀发布 | 先在一台机器上发布,没有问题再在所有机器上发布 | 相对简单,用少量用户验证 | 发布过程服务中断,发现不了随用户量增大才会暴露的问题 | 测试环境部署;小公司或者非核心的业务服务 |
| 滚动发布 | 每个实例都通过金丝雀的方式逐步放大流量 | 发布过程用户体验不中断,可以充分验证服务功能 | 流程复杂,对发布系统由比较高的要求;发布速度较慢;新老版本不兼容的情况不能使用 | 发布系统能力较强,可以平滑切换流量;发布自动化程度高,可以自动滚动 |
| 蓝绿发布 | 常备两个集群,先把流量全部切换到Group 1,升级Group2,然后再把流量全部切换到Group 2,升级Group 1。最终恢复流量。 | 发布速度快,流程相对简单 | 需要有一半机器承担所有流量的能力;出问题影响全部用户 | 服务器资源丰富;新老版本不能兼容的情况 |
| 红黑发布 | 与蓝绿发布类似,但是日常只有一个集群工作,发布时扩容一个集群升级新版本,切换流量后下掉老版本的集群。 | 发布速度快,流程相对简单 | 对机器数量仍然有要求,出问题影响全部用户 | 服务器资源丰富;新老版本不能兼容的情况 |
发布过程要做的事
- 发布负责人
- 负责按照计划执行发布
- 需要通知各个相关人员发布进展
- 观察各个服务的发布状态,及时处理异常
- 变更服务的相关RD
- 按照上线checklist检查服务的日志,监控,响应上线过程中的告警
- 对于自己负责的改动,在小流量或者是预览环境进行功能验证
- 执行发布计划中的其他操作(如线上配置,数据处理等)
- 值班同学
- 发布过程中的监控和告警需要特别关注,如果有异常需要立刻判断是否由变更引起
- 如果有变更引起的告警或者用户反馈,需要及时中止发布
运维阶段
故障发生后:
- 止损
- 周知
- 定位
- 修复
流程怎样优化
DevOps解决方案
- 代码管理
- 自动化测试
- 持续集成(CI)
- 持续交付(CD)
全流程自动化
- 通过效能平台串联各个阶段
- 需求发起研发流程的自动化
- 写代码,测试环境部署的自动化
- 自动化测试触发和报告分析
- 发布过程可观测融入流程
- 减少无价值的等待
- 分析整个流程的耗时,计算真正产生价值的时间
- 不断优化流程,让有价值的流程时间占比上升