这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记。
王晨老师在《从需求到上线全流程》这门课中为我们详细地介绍了实际在工作中会遇到的许多问题以及解决方案,给还未经历职场的我们提供了非常实用的指导意见。
在课程的一开始,王晨老师就抛出了三个我们常问的问题:
- 面试造航母,工作拧螺丝?
- 所谓工作经验是经历了什么?
- 互联网公司加班多?究竟在做什么? 问题十分贴地气,也是我们十分关心的问题,接下来就让我们跟着王晨老师的思路在课程中寻找问题的答案吧。
为什么要有流程
团队规模和流程的关系
- 个人开发者是不需要流程的
- 超过一个人的团队就需要写作
- 随着团队规模上升,会出现全新的问题
复杂项目没有流程会有什么问题:
- 需求阶段:每个人都有自己的想法,团队决策需要一个过程
- 开发阶段:对人多端协作开发,每个人有自己的安排,相互配合需要一个流程
- 测试阶段:产物怎么交付,测试如何开展,BUG怎么修复都需要流程
- 发布阶段:怎么确保发布过程平稳丝滑,版本和流量如何控制,需要规范
- 运维阶段:线上问题如何应急响应,处理用户反馈和线上问题需要有流程
传统的瀑布模型
- 工作流程的直观表达
- 定义了标准的研发阶段
- 以流程为本,理想化模型
敏捷开发
-
敏捷开发宣言
我们通过身体力行和帮助他人来揭示更好的软件开发方式。经由这项工作,我们形成了如下价值观:
个体与交互 重于 过程和工具
可用的软件 重于 完备的文档
客户协作 重于 合同谈判
响应变化 重于 遵循计划
在每对比对中,后者并非全无价值,但我们更看重前者 -
以小团队快速迭代
-
团队成员之间的合作更加紧密
-
以人为本,和客户沟通
有哪些流程
需求阶段
- 不要浪费时间讨论本不应该存在的问题
- MVP(minimum viable product,最小化可行产品)思想
- 站在用户角度思考
- 收集用户反馈,快速迭代
- 将需求按照重要、不重要以及紧急、不紧急做好分类
开发阶段
- 云原生的发展,深刻改变了后端开发的工作
- 云原生下的开发
- 传统虚拟机
- 在屋里主机中虚拟出多个虚拟机,每个虚拟机拥有自己的操作系用
- 运维人员负责维护和交付虚拟机
- 容器化
- 容器是在操作系统中虚拟出来的
- 通过cgroup、namespace和Union Mount等技术实现了容器之间的相互隔离,同时容器只有很低的开销
- 应用和其依赖作为一个整体,打包成镜像交付
- 单体架构
- 微服务架构
- 开发环境逐渐云原生化
- FaaS、PaaS等计数,让开发逐渐从本地IDE向线上转变
- 从入职临到电脑搭建完一套完整的开发环境需要很久,通过WEB IDE等技术,环境未来将会开箱即用
- 传统虚拟机
- 代码规范、自测和文档
- 代码规范
- 养成良好的注释习惯,超过三个月的代码,自己都会忘了当时在想什么
- 不要有魔法数字,魔法字符串
- 重复的逻辑抽象成公共的方法,不要copy代码
- 正确使用IDE的重构功能,防止修改错误
- 自测
- 单元测试
- 功能环境测试
- 测试数据构造
- 文档
- 大型改造需要有技术设计文档,方案评审
- 好的接口文档能更方便的和前端进行沟通
- 代码规范
测试阶段
- 功能环境
- 需要一个能模拟线上的环境进行开发和测试
- 环境和环境之间能够隔离,不影响其他功能的开发和测试
- 集成环境
- 不同人开发的功能合并在一起测试,相互之间的影响可能产生缺陷
- 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生缺陷
- 回归环境
- 确保新的功能不对老的功能产生影响
- 回归测试一般会借助自动化测试脚本
发布阶段
发布过程中要做的事情
- 发布负责人
- 负责按照计划执行发布
- 需要通知各个相关人员发布进展
- 观察各个服务的发布状态,及时处理异常
- 变更服务的相关RD
- 按照上线checklist检查服务的日志,监控,响应上线过程中的告警
- 对于自己负责的改动,在小流量或者是预览环境进行功能验证
- 执行发布计划中的其他操作(如线上配置,数据处理等)
- 值班同学
- 发布过程中的监控和告警需要特别关注,如果有异常需要立刻判断 是否由变更引起
- 如果有变更引起的告警或者用户反馈,需要及时中止发布
各种发布模式
- 蛮力发布,直接用新版本覆盖老版本
- 金丝雀发布,对少量用户提前发布新版本
- 滚动发布,每个实例都使用金丝雀发布,用户体验平滑
- 蓝绿发布,将服务二分,交替发布
- 红黑发布,与蓝绿发布类似,发布时会动态扩容出一组新的服务
运维阶段
飞机平飞阶段也有可能发生事故
- 用户量增加引起流量洪峰(12306抢票)
- 数据库表的数据量增长导致查询速度变慢
- 内存、进程泄漏导致服务资源不足
- 光缆被挖断
流程怎样优化
Devops
- 代码管理
- 自动化测试
- 持续集成
- 持续交付
- 效率竖井
- 流程中实际产生价值的部分很短
- 大量时间用在等待和传递上
- 人和人之间的沟通很慢
全流程自动化
- 通过效能平台串联各个阶段
- 需求发起研发流程的自动化
- 写代码,测试环境部署的自动化
- 自动化测试触发和报告分析
- 发布过程可观测融入流程
- 减少无价值的等待
- 分析整个流程的耗时,计算真正产生价值的时间
- 不断优化流程,让有价值的流程时间占比上升