这是我参与「第三届青训营 -后端场」笔记创作活动的的第三篇笔记。笔记的内容总结并归纳了王晨老师讲述的从需求到上线全流程,了解了业务从需求到上线的整体流程和后端开发工程师的日常~
这门课讲什么
面试造航母、工作拧螺丝?
所谓工作经验是经历了什么?
互联网公司加班较多?究竟在做什么?
1.为什么要有流程
1.1 为什么要有流程
个人开发者是不需要流程的
超过一个人的团队就需要协作
随着团队规模上升,会出现全新的问题
复杂项目没有流程会有哪些问题: 需求阶段:每个人都有自己的想法,团队决策需要有一个过程
开发阶段:多人/多端协作开发,每个人有自己的安排,相互配合需要有一个流程
测试阶段:产品如何交付,测试如何开展,BUG怎么修都需要流程
发布阶段:如何确保发布过程平稳丝滑,版本和流量如何控制,都需要有对应的规范
运维阶段:线上问题如何应急响应,处理用户反馈和线上问题需要有流程
1.2 传统的瀑布模型
- 工作流程的直观表达
- 定义了标准的研发阶段
- 以流程为本,理想化模型
1.3 敏捷开发
以小团队快速迭代
团队成员之间的合作更加紧密
以人为本,和用户沟通
1.4 The Scaled Agile Framework(SAFe)简介
SAFe是一套管理框架:
- 精益产品开发
- 敏捷软件开发
- 系统思考
2. 有哪些流程
2.1 需求阶段
不要浪费时间讨论不应该存在的问题:
示例:马斯克讲述特斯拉在生产线自动化中存在的问题
MVP(minimum viable product, 最小化可行产品)思想
站在用户的角度思考
收集用户反馈,快速迭代
事情时间花费模型:
2.2 开发阶段
2.2.1 云原生场景下的后端开发
云原生的发展,深刻改变了后端开发的工作
传统虚拟机:
- 在物理主机中虚拟出多个虚拟机,每个虚拟机拥有自己的操作系统
- 运维人员负责维护和交付虚拟机
- 每个虚拟机中都要安装相应的依赖环境
容器化:
- 容器是在操作系统中虚拟出来的
- 通过cgroup,namespace和Union Mount等技术实现了容器之间的相互隔离,同时容器只有很低的开销
- 应用和其依赖作为一个整体,打包成镜像交付
单体架构:
- 多个模块共同组成一个服务,服务器体量较大
- 模块之间直接调用,不需要RPC通信
- 服务整体扩缩容量
- 多人开发一个代码仓库,需要充分集成测试
微服务架构:
- 各个功能在不同的服务中
- 不同模块需要进行RPC通信
- 不同模块可以独立扩缩容
- 每个服务的代码仓库仅由少部分人维护
开发环境逐渐云原生化:
- FaaS,PaaS等等技术,让开发逐渐从本地IDE向线上转变
- 从入职领到电脑搭建完一套完整的开发环境需要很久,通过WEB IDE等技术,环境未来将会开箱调用
2.2.2 团队的分支策略
多个团队成员之间各自用什么分支开发?
修改之间有冲突怎样解决?
除了问题的代码如何回退到之前版本?
放一下老师团队实际项目的分支图:
2.2.3 代码规范、自测和文档
代码规范:
- 养成良好的注释习惯,超过三个月的代码,自己都会忘了自己当时在想什么
- 不要有魔法数字,魔法字符串
- 重复的逻辑抽象成公共的方法,不要copy代码
- 正确使用IDE的重构功能,防止修改错误
自测:
- 单元测试
- 功能环境测试
- 测试数据构造
文档:
- 大型改造需要有技术设计文档,方案评审
- 好的接口文档能更方便地与前端进行沟通
2.3 测试阶段
即写即测:
测试金字塔模型(越早发现缺陷修复的成本越低)
功能环境:
- 需要一个能模拟线上的环境进行开发和测试
- 环境和环境之间能够隔离,不影响其他功能的开发和测试
集成环境:
- 不同人开发的功能合并在一起测试,相互之间的影响可能产生缺陷
- 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生缺陷
回归环境:
- 确保新的功能不对老的功能产生影响
- 回归测试一般会借助自动化测试脚本
2.4 发布阶段
发布阶段是极其重要的,很多检查都是不可或缺的
飞机的事故大部分都发生在起飞和降落阶段
发布过程中要做得事情
发布负责人:
- 负责按照计划执行发布
- 需要通知各个相关人员发布进展
- 观察各个服务的发布状态,及时处理异常
变更服务的相关RD:
- 按照上线checklist检查服务的日志,监控,响应上线过程中的告警
- 对于自己负责的改动,在小流量或者是预览环境进行功能验证
- 执行发布计划中的其他操作(如线上配置,数据处理等)
值班同学:
- 发布过程中的监控和告警需要特别关注,如果有异常需要立刻判断是否由变更引起
- 如果有变更引起的告警或者用户反馈,需要及时终止发布
2.4.1 各种发布模式-蛮力发布
2.4.2 金丝雀发布
2.4.3 滚动发布
2.4.4 蓝绿发布
2.4.5 红黑发布
在实际项目过程中采用何种发布方式由对应公司和项目决定
2.5 运维阶段
飞机平飞阶段也可能发生事故:
- 用户量增加引起的流量洪峰
- 数据库表的数据量增长导致查询速度变慢
- 内存/进程泄漏导致服务资源不足
- 光缆被挖断
公司在发展过程中,逐渐形成了十分复杂的超大规模微服务体系。为了实现对这些复杂微服务的监控,我们往往会在微服务中添加埋点采集Metrics、Logging、分布式Trace等多种数据。
3.1 怎样让生活更美好
理论上来说:在重视质量的团队,效率往往较低;在重视效率的团队,事故往往较多
- 技术的发展会带来质量和效率的同时提高
- 将质量保障融入到流程,将流程自动化
- 从需求到上线全流程自动化,同时提高质量和效率
3.2 DevOps
DevOps 解决方案:
- 代码管理
- 自动化测试
- 持续集成
- 持续交付
效率竖井:
- 流程中实际产生价值的部分很短
- 大量的时间浪费在等待和传递上
- 人和人之间的沟通很慢
3.3 全流程自动化
通过效能平台串联各个阶段:
- 需求发起研发流程的自动化
- 写代码,测试环境部署的自动化
- 自动化测试触发和报告分析
- 发布过程可观测融入流程
减少无价值的等待:
- 分析整个流程的耗时,计算真正产生价值的时间
- 不断优化流程,让有价值的流程时间占比上升