这是我参与「第三届青训营 -后端场」笔记创作活动的的第6篇笔记
一、 本堂课重点内容
1. 为什么要有流程
2. 有哪些流程
3. 流程怎样优化
4. 后端开发的一周
二、 详细知识点介绍
2.1 为什么要有流程
2.1.1 团队规模和流程的关系
复杂项目没有流程有什么问题
需求阶段:每个人都有自己的想法,团队决策需要有一个过程
开发阶段:多人/多端协作开发,每个人有自己的安排,相互配合需要有一个流程
测试阶段:产物怎样交付,测试如何开展,BUG怎么修都需要流程
发布阶段:怎样确保发布过程平稳丝滑,版本和流量如何控制,需要有规范
运维阶段:线上问题如何应急响应,处理用户反馈和线上问题需要有流程
2.1.2 传统的瀑布模型
特点:工作流程的直观表达
定义了标准的研发阶段
以流程为本,理想化模型
2.1.3 敏捷开发
特点:以小团队快速迭代
团队成员直接的合作更加紧密
以人为本,和用户沟通
2.1.4 SAFe简介
SAFe是一套管理框架。
现代的Scum:
敏捷教练Scrum Master
产品负责人Product Owner
敏捷团队Scrum Team
敏捷发布火车Agile Release Train
2.1.5 团队的流程
人员&名词解释:
RD:研发
PM:产品经理
PRD:需求文档
UED:用户体验设计
QA:测试
Scum1:敏捷团队1
P0/P1:优先级0/优先级1
Backlog:规划列表
会议解释:
待办事顶整理会议(Backlog Grooming Meeting):产品负责人描述下个迭代希望实现的用户故事,PM提出需求列表
迭代计划会议(Sprint Planning Meeting):选择迭代的任务和估算工作量
每日站会(Standup Meeting):
昨天你做了什么?
今天你将要做什么?
你有需要帮助的地方吗?
评审会(Review Meeting:小组向产品负责人展示迭代工作结果
反思会(Retrospective Meeting):在每个迭代后召开简短的反思会,总结哪些事情做得好,哪些事情做得不好
2.2有哪些流程
2.2.1 需求阶段
MVP(minimum viable product,最小化可行产品)思想:
站在用户的角度思考,手机用户反馈,快速迭代
四象限法——用于评估需求
先判断重要性再判断紧急程度
2.2.2 开发阶段
云原生下的开发:
传统虚拟机:
在物理主机中虚拟出多个虚拟机,每个虚拟机拥有自己的操作系统
运维人员负责维护和交付虚拟机
每个虚拟机中都要安装相应的依赖环境
容器化:
容器是在操作系统中虚拟出来的
通过cgroup,namespace和Union Mount等技术实现了容器之间的相互隔离,桶时容器只有很低的开销
应用和其依赖作为一个整体,打包成镜像交付
单体架构:
多个模块共同组成一个服务,服务体量较大
模块之间直接调用,不需要RPC通信
服务整体扩缩容量
多人开发一个代码仓库,需要充分集成测试
微服务架构:
各个功能在不同的服务中
不同模块需要进行RPC通信
不同模块可以独立扩缩容
每个服务的代码仓库仅由少部分人维护
云原生下的开发特点:
开发环境逐渐云原生化
FaaS,PaaS等等技术,让开发逐渐从本地IDE向线上转变
从入职领到电脑搭建完一套完整的开发环境需要很久,通过WEB IDE等技术,未来环境将会开箱即用
2.2.3 团队的分支策略
我们日常工作中写代码都是基于主干的某个版本进行修改,改完之后再把代码合并回主干形成新的版本
这里就会有一些协作上的问题:
多个团队成员各自用什么分支?修改有冲突怎么解决?出了问题代码如何回退?
为了应对这些问题:
有些团队会有一个专门的分支叫做release?分支,大家都把代码合并到release分支,然后测试,发布,之后再把release分支合会master
有些团队会直接把开发的分支合入master,然后再用某个master_上的commit发布
之所以有各种各样的分支策略,就是因为我们在后续的测试和发布阶段要按照对应的分支和commiti进行交付
2.2.4 代码规范,自测和文档
代码规范:
养成良好的注释习惯,超过三个月的代码,自己都会忘了当时在想什么
不要有魔法数字,魔法字符串
重复的逻辑抽象成公共的方法,不要copy代码
正确使用IDE的重构功能,防止修改错误
自测:
单元测试
功能环境测试
测试数据构造
文档:
大型改造需要有技术设计文档,方案评审
好的接口文档能更方便的和前端进行沟通
2.2.3测试阶段
功能环境:
需要一个能模拟线上的环境进行开发和测试
环境和环境之间能够隔离,不影响其他功能的开发和试
集成环境:
不同人开发的功能合并在一起汉试,相互之间的影响可能产生缺陷
迭代发布的所有功能合并在一起侧试,确保发布的所有功能之问的影响不产生缺陷
回归环境:
确保新的功能不对老的功能产生影响
回归测试一般会借助自动化测试脚本
2.2.4发布阶段
职责分布:
发布负责人:
负责按照计划执行发布
需要通知各个相关人员发布进展
观察各个服务的发布状态,及时处理异常
变更服务的相关RD:
按照上线checklist检查服务的日志,监控,响应上线过程中的告警
对于自己负责的改动,在小流量或者是预览环境进行功验证
执行发布计划中的其他操作(如线上配置,数据处理等)
值班同学:
发布过程中的监控和告警需要特别关注,如果有异常需要立刻判断
是否由变更引起
如果有变更引起的告警或者用户反馈,需要及时中止发布
各种发布模式:
1. 简单粗暴,直接用新版本覆盖老版本
优点:简单,成本低
缺点:发布过程中服务会中断,出了问题会影响全部用户
适用:测试环境部署,小公司或者非核心的业务服务
2. 金丝雀发布
由于金丝雀对瓦斯极其敏感,因此以前矿工开矿下矿洞前,先会放一只金丝雀进去探是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得名。
优点:相对简单,能够用少量用户验证新版本功能
缺点:发布过程中服务会中断,发现不了随用户量增大才会暴露的问题
适用:测试环境部署,小公司或者非核心的业务服务
3. 滚动发布:每个实例都通过金丝雀的方式逐步放大流量,对用户影响小,体验平滑。
优点:发布过程中用户体验不会中断,可以充分验证服务功能
缺点:流程较复杂,对发布系统有比较高的要求,发布速度较慢,新老版本不兼容的情况不能使用
适用:发布系统能力较强,可以平滑切换流量,发布自动化程度高,可以自动滚动
4. 蓝绿发布
把服务分成蓝绿两组,先把蓝组流量摘掉然后升级,只用绿组提供服务,之后切换全部流量,只用蓝组提供服务,然后升级绿组服务,最终两组全部升级。
优点:发布速度快,流程相对简单
缺点:需要有一半机器承担所有流量的能力,出问题会影响全部用户
适用:服务器资源丰富,新老版本不能兼容的情况,雲要一次性升级到新版
5. 红黑发布
和蓝绿发布类似,但是发布时会动态扩容出一组新的服务,而不需要常备两组服务。
优点:发布速度快,流程相对简单
缺点:对机器数量仍然有要求,需要能扩容一倍,出问题会影响全部用户
适用:服务器资源丰富,新老版本不能兼容的情况,需要一次性升级到新版
6. 滚动发布
实际工作中,我们的发布使用的是滚动发布,发布的负责人需要关注滚动的粒度和时间,以及具体执行的进度
因为这种方式对用户的体验最平滑,同时公司也有强大的流量控制能力,能够平滑的切换流量能够支持滚动
但是仍然有一些场景需要使用蓝绿发布
可能有些公司因为发布需要在用户低峰期进行,所以在那些公司发布的时候,往往都是在夜深人静的时候,这也就是程序员经常要晚上加班的很大一个原因
2.2.5运维阶段
公司在发展过程中,逐渐形成了十分复杂的超大规模微服务体系。为了实现对这些复杂微服务的监控,我们往往会在微服务中添加埋点采集Metrics、.Logging、分布式Trace等多种数据。
2.3流程怎样优化
2.3.1DevOps
DevOps解决方案:代码管理、自动化测试、持续集成、持续交付
所谓DevOps,就是由左侧的Dev和右侧的Ops组成,从需求开始,写代码,编译,测试,发布,运维,监控形成了一个闭环。于是我们可以进行特续集成,持续交付,也就是说CI和CD,大家谈CI/CD的时候其实往往独立去谈,其实整个流程是密不可分的
效率竖井:流程中实际产生价值的部分很短、大量的时间用在等待和传递上、人和人之间的沟通很慢
2.3.2 全流程自动化
通过效能平台串联各个阶段:
需求发起研发流程的自动化
写代码,测试环境部署的自动化
自动化测试触发和报告分析
发布过程可观测融入流程
减少无价值的等待:
分析整个流程的耗时,计算真正产生价值的时间
不断优化流程,让有价值的流程时间占比上升
2.4 后端开发的一周
周一:产品功能演示和反思会
针对上个迭代开发的功能进行演示,反思上个迭代的不足,如果没有特殊的问
题可以跳过。此时,PM和UED已经准备好了明天要规划的需求列表
周二:Grooming会议
之前的一周,backlog里积累了92个需求
在会议上,PO和PM阐述各个需求的价值
Scrum Master和架构师确认需求中包含的技术任务
最终,会议确定下个迭代要做70个需求,并给你安排了10个需求
周三:提交火车发布车票
之前开发的需求需要上线,提交一个发布车票
对其他人提交的上线工单进行Code Review
修复代玛缺陷
周四:发布
之前提交车票的部分功能要在今天发布
发布过程中发现监控出现异常,马上中止了发布,定位问题原因
发现是自己的代码有问题,需要进行回滚和修复
周五:Planning会议
发现下个进代只能完成8个需求,按照优先级把2个需求移出迭代
将8个需求的工作量进行评估
把8个需求各自的开发和上线时间进行排期
三、 课后个人总结
本堂课主要介绍了项目整体的开发流程和协调分工。可以对未来的工作流程有一个大体的认识。
四、 引用参考
青训营官方课程