这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
1.为什么要有流程
传统的瀑布模型
需求 -> 开发 -> 测试 -> 发布 -> 运维
缺点:低效,工作是定死的,到一定阶段就需要做一定的事情,因此需要等待前面的流程完成。
敏捷开发
- 小团队快速迭代
- 团队成员之间的合作更加紧密
- 以人为本,和用户沟通
The Scaled Agile Framework(SAFe) 一套管理框架
现代的Scrum
- 敏捷教练 Scrum Mater
- 产品负责人 Product Owner
- 敏捷团队 Scrum Team
- 敏捷发布火车 Agile Release Train
2.流程有哪些
需求阶段
MVP (minimum viable product, 最小可行化产品)思想
- 站在用户的角度思考
- 收集用户反馈,快速迭代
开发阶段
云生态下的开发
1.1 传统虚拟机
- 在物理主机中虚拟出多个虚拟机,每个虚拟机都有自己的操作系统
- 运维人员负责维护和交付虚拟机
- 每个虚拟机中都有安装相应的依赖环境
1.2 容器化
- 容器是在操作系统中虚拟出来的
- 通过cgroup,namespace和Union Mount等技术实现了容器之间的相互隔离,同时容器只有很低的开销
- 应用和其依赖作为一个整体,打包交给镜像
2.1 单体架构
- 多个模块共同组成一个服务,服务体量较大
- 模块之间直接调用,不需要RPC通信
- 服务整体扩缩容量
- 多人开发一个代码仓库,需要充分集成测试
2.2 微服务架构
- 各个功能在不同的服务中
- 不同模块需要RPC通信
- 不同模块可以独立扩缩容量
- 每个服务的代码仓库仅由少部分人维护
- 开发环境逐渐云化
- Faas,Paas等等技术,让开发逐渐从本地IDE向线上转变
- 从入职到电脑搭建完一整套的开发环境需要很久,通过WEB IED等技术,环境未来将会开箱即用
测试阶段
- 功能环境
- 需要一个能模拟线上的环境进行开发和测试
- 环境和环境之间能够隔离,不影响其他功能的开发和测试
- 集成环境
- 不同开发的功能合并在一起测试,相互之间的影响可能产生缺陷
- 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生缺陷
- 回归环境
- 确保新的功能不对老的功能产生影响
- 回归测试一般会借助自动化测试脚本
发布阶段
蛮力发布
简单粗暴,直接用新版本覆盖老版本
优点:简单,成本低
缺点:发布过程中服务会中断,出了问题会影响全部用户
适用:测试环境部署,小公司或者非核心的业务服务
金丝雀发布
优点:相对简单,能够用少量的用户验证新版本的功能
缺点:发布过程中服务会中断,发现不了随用户增大才会暴露的问题
适用:测试环境部署,小公司或者非核心的业务服务
滚动发布
每个实例都通过金丝雀的方式逐步放大流量,对用户影响小,体验平滑
优点:发布过程中用户体验不会中断,可以充分验证服务功能
缺点:流程较复杂,对发布系统有比较高的要求;发布速度较慢;新老版本不兼容情况不能使用
适用:发布系统能力较强,可以平滑切换流量;发布自动化程度高,可以自由滚动
蓝绿发布
把服务分成蓝绿两组,先把蓝组流量摘掉后升级,只用绿组提供服务,之后切换全部流量,只用蓝组提供服务,然后升级绿组服务,最终两组全部升级。
优点:发布速度快;流程相对简单
缺点:需要有一半的机器承担所有流量的能力;出问题会影响全部用户
适用:服务器资源丰富;新老版本不能兼容的情况,需要一次性升级到新版
红黑发布
和蓝绿发布相似,但是发布时会动态扩容出一组新的服务,而不需要常备两组服务。
优点:发布速度快;流程相对简单
缺点:对机器数量仍有要求,需要能扩容一半;出问题会影响全部用户
适用:服务器资源丰富;新老版本不能兼容的情况,需要一次性升级到新版
没有强大发布系统和服务器资源不足的公司一般使用蛮力发布或者金丝雀发布
有强大的发布工具和服务器资源充足的公司一般使用滚动发布和蓝绿发布