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

178 阅读7分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第三篇笔记。笔记的内容总结并归纳了王晨老师讲述的从需求到上线全流程,了解了业务从需求到上线的整体流程和后端开发工程师的日常~

这门课讲什么

面试造航母、工作拧螺丝?

所谓工作经验是经历了什么?

互联网公司加班较多?究竟在做什么?

1.为什么要有流程

1.1 为什么要有流程

个人开发者是不需要流程的

超过一个人的团队就需要协作

随着团队规模上升,会出现全新的问题

1.PNG

复杂项目没有流程会有哪些问题: 需求阶段:每个人都有自己的想法,团队决策需要有一个过程

开发阶段:多人/多端协作开发,每个人有自己的安排,相互配合需要有一个流程

测试阶段:产品如何交付,测试如何开展,BUG怎么修都需要流程

发布阶段:如何确保发布过程平稳丝滑,版本和流量如何控制,都需要有对应的规范

运维阶段:线上问题如何应急响应,处理用户反馈和线上问题需要有流程

2.PNG

1.2 传统的瀑布模型

  • 工作流程的直观表达
  • 定义了标准的研发阶段
  • 以流程为本,理想化模型

3.PNG

1.3 敏捷开发

以小团队快速迭代

团队成员之间的合作更加紧密

以人为本,和用户沟通

4.PNG

1.4 The Scaled Agile Framework(SAFe)简介

SAFe是一套管理框架:

  • 精益产品开发
  • 敏捷软件开发
  • 系统思考

5.PNG

2. 有哪些流程

2.1 需求阶段

不要浪费时间讨论不应该存在的问题:

示例:马斯克讲述特斯拉在生产线自动化中存在的问题

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

站在用户的角度思考

收集用户反馈,快速迭代

6.PNG

事情时间花费模型:

7.PNG

2.2 开发阶段

2.2.1 云原生场景下的后端开发

云原生的发展,深刻改变了后端开发的工作

传统虚拟机:

  • 在物理主机中虚拟出多个虚拟机,每个虚拟机拥有自己的操作系统
  • 运维人员负责维护和交付虚拟机
  • 每个虚拟机中都要安装相应的依赖环境

容器化:

  • 容器是在操作系统中虚拟出来的
  • 通过cgroup,namespace和Union Mount等技术实现了容器之间的相互隔离,同时容器只有很低的开销
  • 应用和其依赖作为一个整体,打包成镜像交付

8.PNG

单体架构:

  • 多个模块共同组成一个服务,服务器体量较大
  • 模块之间直接调用,不需要RPC通信
  • 服务整体扩缩容量
  • 多人开发一个代码仓库,需要充分集成测试

微服务架构:

  • 各个功能在不同的服务中
  • 不同模块需要进行RPC通信
  • 不同模块可以独立扩缩容
  • 每个服务的代码仓库仅由少部分人维护

开发环境逐渐云原生化:

  • FaaS,PaaS等等技术,让开发逐渐从本地IDE向线上转变
  • 从入职领到电脑搭建完一套完整的开发环境需要很久,通过WEB IDE等技术,环境未来将会开箱调用

2.2.2 团队的分支策略

多个团队成员之间各自用什么分支开发?

修改之间有冲突怎样解决?

除了问题的代码如何回退到之前版本?

放一下老师团队实际项目的分支图:

9.PNG

2.2.3 代码规范、自测和文档

代码规范:

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

自测:

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

文档:

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

2.3 测试阶段

即写即测:

10.PNG

测试金字塔模型(越早发现缺陷修复的成本越低)

11.PNG

功能环境:

  • 需要一个能模拟线上的环境进行开发和测试
  • 环境和环境之间能够隔离,不影响其他功能的开发和测试

集成环境:

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

回归环境:

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

2.4 发布阶段

发布阶段是极其重要的,很多检查都是不可或缺的

飞机的事故大部分都发生在起飞和降落阶段

发布过程中要做得事情

发布负责人:

  • 负责按照计划执行发布
  • 需要通知各个相关人员发布进展
  • 观察各个服务的发布状态,及时处理异常

变更服务的相关RD:

  • 按照上线checklist检查服务的日志,监控,响应上线过程中的告警
  • 对于自己负责的改动,在小流量或者是预览环境进行功能验证
  • 执行发布计划中的其他操作(如线上配置,数据处理等)

值班同学:

  • 发布过程中的监控和告警需要特别关注,如果有异常需要立刻判断是否由变更引起
  • 如果有变更引起的告警或者用户反馈,需要及时终止发布

2.4.1 各种发布模式-蛮力发布

12.PNG

2.4.2 金丝雀发布

13.PNG

2.4.3 滚动发布

14.PNG

2.4.4 蓝绿发布

15.PNG

2.4.5 红黑发布

16.PNG

在实际项目过程中采用何种发布方式由对应公司和项目决定

2.5 运维阶段

飞机平飞阶段也可能发生事故:

  • 用户量增加引起的流量洪峰
  • 数据库表的数据量增长导致查询速度变慢
  • 内存/进程泄漏导致服务资源不足
  • 光缆被挖断

17.PNG

公司在发展过程中,逐渐形成了十分复杂的超大规模微服务体系。为了实现对这些复杂微服务的监控,我们往往会在微服务中添加埋点采集Metrics、Logging、分布式Trace等多种数据。

3.1 怎样让生活更美好

理论上来说:在重视质量的团队,效率往往较低;在重视效率的团队,事故往往较多

18.PNG

  • 技术的发展会带来质量和效率的同时提高
  • 将质量保障融入到流程,将流程自动化
  • 从需求到上线全流程自动化,同时提高质量和效率

3.2 DevOps

DevOps 解决方案:

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

19.PNG

效率竖井:

  • 流程中实际产生价值的部分很短
  • 大量的时间浪费在等待和传递上
  • 人和人之间的沟通很慢

20.PNG

3.3 全流程自动化

通过效能平台串联各个阶段:

  • 需求发起研发流程的自动化
  • 写代码,测试环境部署的自动化
  • 自动化测试触发和报告分析
  • 发布过程可观测融入流程

减少无价值的等待:

  • 分析整个流程的耗时,计算真正产生价值的时间
  • 不断优化流程,让有价值的流程时间占比上升

21.PNG