从需求到上线全流程 | 青训营笔记

125 阅读5分钟

这是我参与「第三届青训营-后端场」笔记创作活动的的第6篇笔记。

为什么要有流程

随着团队规模和问题复杂度的上升,一个人搞定一切就不可能了,超过了一个人,就需要进行团队协作,自然也就需要有流程。

常见的协作模式:

  • 传统的瀑布模型:最直观,以流程为本,理想化模型
  • 敏捷开发:更现代,快速迭代,团队合作紧密,以人为本
  • 规模化敏捷(The scaled agile framework, SAFe):将敏捷的理念扩展成为企业的管理框架
    • 现代 Scrum (Scrum是敏捷开发的一种实践模式)
      • 敏捷教练(scrum master)
      • 产品负责人(product owner)
      • 敏捷团队(scrum team)
      • 敏捷发布火车(agile release train)

有哪些流程

需求阶段

最小化可行产品(minimum viable product, MVP)思想

  • 站在用户角度思考
  • 手机用户反馈,快速迭代

开发阶段

云原生下的开发

  • 传统虚拟机× 容器化√
  • 单体架构× 微服务架构√
    • 各个功能在不同的服务中
    • 不同模块需要进行RPC通信
    • 不同模块可以独立扩缩容
    • 每个服务的代码仓库仅由少部分人维护
  • Web IDE

团队分支策略

代码规范

  • 养成良好的注释习惯,超过三个月的代码,自己都会忘了当时在想什么
  • 不要有魔法数字,魔法字符串
  • 重复的逻辑抽象成公共的方法,不要copy代码
  • 正确使用IDE的重构功能,防止修改错误

自测

  • 单元测试
  • 功能环境测试
  • 测试数据构造

文档

  • 大型改造需要有技术设计文档,方案评审
  • 好的接口文档能更方便的和前端进行沟通

测试阶段

功能测试

  • 是为了测试一个新开发的功能,因此需要有能模拟线上的开发和测试环境
  • 环境之间能相互隔离,这样可以独立验证不同的新功能

集成测试

  • 不同人开发的功能合并在一起测试,相互之间的影响可能产生缺陷
  • 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生缺陷

回归测试

  • 确保新的功能不对老的功能产生影响
  • 回归测试一般会借助自动化测试脚本

发布阶段

发布模式

发布模式方法优点缺点适用
蛮力发布简单粗暴,直接用新版本覆盖老版本简单,成本低发布过程服务中断,出了问题影响全部用户测试环境部署;小公司或者非核心的业务服务
金丝雀发布先在一台机器上发布,没有问题再在所有机器上发布相对简单,用少量用户验证发布过程服务中断,发现不了随用户量增大才会暴露的问题测试环境部署;小公司或者非核心的业务服务
滚动发布每个实例都通过金丝雀的方式逐步放大流量发布过程用户体验不中断,可以充分验证服务功能流程复杂,对发布系统由比较高的要求;发布速度较慢;新老版本不兼容的情况不能使用发布系统能力较强,可以平滑切换流量;发布自动化程度高,可以自动滚动
蓝绿发布常备两个集群,先把流量全部切换到Group 1,升级Group2,然后再把流量全部切换到Group 2,升级Group 1。最终恢复流量。发布速度快,流程相对简单需要有一半机器承担所有流量的能力;出问题影响全部用户服务器资源丰富;新老版本不能兼容的情况
红黑发布与蓝绿发布类似,但是日常只有一个集群工作,发布时扩容一个集群升级新版本,切换流量后下掉老版本的集群。发布速度快,流程相对简单对机器数量仍然有要求,出问题影响全部用户服务器资源丰富;新老版本不能兼容的情况

发布过程要做的事

  • 发布负责人
    • 负责按照计划执行发布
    • 需要通知各个相关人员发布进展
    • 观察各个服务的发布状态,及时处理异常
  • 变更服务的相关RD
    • 按照上线checklist检查服务的日志,监控,响应上线过程中的告警
    • 对于自己负责的改动,在小流量或者是预览环境进行功能验证
    • 执行发布计划中的其他操作(如线上配置,数据处理等)
  • 值班同学
    • 发布过程中的监控和告警需要特别关注,如果有异常需要立刻判断是否由变更引起
    • 如果有变更引起的告警或者用户反馈,需要及时中止发布

运维阶段

故障发生后:

  • 止损
  • 周知
  • 定位
  • 修复

流程怎样优化

DevOps解决方案

  • 代码管理
  • 自动化测试
  • 持续集成(CI)
  • 持续交付(CD)

全流程自动化

  • 通过效能平台串联各个阶段
    • 需求发起研发流程的自动化
    • 写代码,测试环境部署的自动化
    • 自动化测试触发和报告分析
    • 发布过程可观测融入流程
  • 减少无价值的等待
    • 分析整个流程的耗时,计算真正产生价值的时间
    • 不断优化流程,让有价值的流程时间占比上升