需求到上线全流程| 青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记
1、为什么要有流程
- 个人开发者不需要流程
- 超过一个人团队需要协作
- 团队规模up,会产生问题
如果开发的话没有流程会产生大问题
瀑布模型
敏捷开发
- 更小团队迭代
- 团队成员合作更紧密
- 以人为本,和用户沟通
The scaled agile framework
它是一套管理框架,有着如下特点
- 精益的产品开发
- 敏捷软件开发
- 系统的思考
现代的scrum包括以下流程
- 软件教练
- 产品owner
- 敏捷团队
- 敏捷发布火车
2、有哪些流程
2.1 需求阶段
不应该浪费时间讨论不存在的问题。
MVP思想
- 站在用户的角度思考
- 收集用户反馈,快速迭代
在做事情的时候可以按照紧急程度进行分类,优先做紧急且重要的事情。
2.2 开发阶段
目前时代在发展,已经进入云原生的开发时代,它深深的改变了后端开发的工作。
在原来传统虚拟机的开发环境下:
- 物理主机中虚拟出多个虚拟机
- 运维人员交互虚拟机
- 每个虚拟机安装依赖环境
容器化之后:
- 容器是操作系统虚拟来的
- 通过cgroup、namespace、union mount等技术实现容器之间的相互开销,同时容器只有很低的开销
- 应用和依赖作为一个整体,打包成镜像交付
目前许多应用也从单体应用转变为微服务应用。
单体架构
- 服务大
- 不需要rpc通信
- 服务整体扩充容量
- 多人开发一个代码仓库,需要充分集成测试
微服务架构
- 各个功能在不同的服务中
- 需要rpc通信
- 可以独立扩缩容
- 每个服务代码只需要少部分人维护
目前开发环境也渐渐云原生化,各种web ide层出不穷,免去了人们花时间配置web ide的总体时间。
在协作方面,团队采用分支开发的方式进行协作开发,每个人可以创建自己的开发分支,开发完毕并完成代码审查后再将已经开发好的代码合并到主分支上。
代码规范方面,应遵循以下原则:
- 写注释!
- 不要有魔法数字以及字符串
- 公共逻辑进行抽象,不要光cv代码
- 正确使用ide的重构功能,防止修改错误
自测:
- 单元测试
- 功能测试
- 测试数据自己造
文档:
- 大的改造要有评审
- 好的接口文档和前端进行沟通
2.3 测试阶段
测试阶段的环境
功能环境
需要模拟线上环境进行开发和测试,环境环境间要隔离好!不要影响其他功能。
集成环境
不同人开发的功能一起测试,相互之间影响发现可能产生的缺陷
迭代发布的所有功能一起测试,确保此次迭代发布的功能互不影响
回归环境
确保新功能不影响老功能
回归测试一般借助脚本
2.4 发布阶段
发布过程要做的事
负责人:
- 负责按计划发布
- 通知各个人员发布进展
- 观察各个服务状态,及时处理异常
业务负责RD:
- 按照checklist检查服务日志,监控等信息
- 对于自己负责的改动,在小流量进行认证
- 执行发布阶段其他操作
值班同学:
- 监控和告警需要特别关注,如果有异常需要及时关注
- 变更引起的告警,需要及时终止发布
发布模式
1、蛮力发布
2、金丝雀发布
3、滚动发布
4、蓝绿发布
5、红黑发布
2.5 运维阶段
在公司发展过程中有很多超大规模微服务体系,在应对这些复杂的微服务监控,往往研发人员会在服务中进行埋点采集metrics、logging、分布式trace等数据。