这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记。
为什么要有流程
项目的开发需要团队的合作
瀑布模型
按照一定的时间线逐步完成工作,流程直观可达、以流程为本、理想化模型
敏捷开发
快速迭代、以人为本、和用户沟通Scrum
The Scaled Agile Framework(SAFe)
多个scrum相互配合; 精益产品开发、敏捷软件开发、系统思考
团队的流程
举例:
有哪些流程
流程的总览
需求阶段:提出idea,团队做出决策
开发阶段:多人协作开发
测试阶段:交付产物、开展测试、修复BUG
发布阶段:确保发布过程平稳、如何控制版本和流量
运维阶段:应急响应,线上问题处理流程
需求阶段
明确什么该做、什么不该。 后端站在客户角度评估需求;
最小化可行产品(minimum viable product,MVP)思想 站在用户角度思考;收集用户反馈,快速迭代。如
开发阶段
云原生开发
容器化
传统虚拟机开发:每个虚拟机有自己操作系统,安装相应的依赖环境
容器化:容器在操作系统虚拟出来,容器之间相互隔离,开销低;应用和其他依赖作为一个整体,打包成镜像交付
微服务:
各个功能在不同的服务中;
不同模块进行RPC通信;(缺点:造成了网络通信开销)
不同模块独立扩缩容;
每个服务代码仓库由少部分人维护
参考论文:μSuite: A Benchmark Suite for Microservices.
分支策略
根据main提交自己的分支,再将自己的分支提到主干分支
测试阶段
google软件测试之道 保证每一段的质量——单元测试
功能环境:模拟新的功能;保证不影响其他功能 集成环境:所有功能合在一起测试 回归环境:确保新的功能不对老的功能产生影响
发布阶段
发布过程中出现问题,如何调查?
1、F12开发者工具
2、使用cur检测接口发现 ,绑定
发布模式
蛮力发布:
优点:简单、成本低
缺点:发布过程服务中断、影响用户
适用:测试环境部署、非核心业务
金丝雀发布
先发布一部分进行试探。
优点:相对简单、能够少量用户验证新版本
缺点:发布过程中中断;发现不了用户量增多暴露的问题
适用:测试环境部署、非核心业务
滚动发布
每个实例都通过金丝雀方式逐步放大流量;
优点:发布过程用户体验不中断;充分验证服务功能
缺点:流程较复杂,对发布系统有较大要求;发布速度慢;新老版本需要兼容
适用:发布系统能力强;发布自动化程度高
蓝绿发布
分为蓝绿两组,先把蓝组升级,只用绿组提供服务;之后切换全部流量只用蓝组提供服务,升级绿组。
优点:发布速度快、流程简单
缺点:有一般机器承担所有流量的能力,出问题影响全部用户
适用:服务器资源丰富,需要一次性升级到新版本
红黑发布
发布时动态扩容一组新的服务,不需要常备两组。
优点:发布速度快、流程简单
缺点:对机器数量要求,出问题影响所有永华
适用:和蓝绿发布一致
一般实际中使用滚动发布和蓝绿发布模式。
运维阶段
一些问题如:
用户量增加引起洪峰
数据库数据流增长、查询变慢
内存泄漏导致服务资源不足
光缆被挖断
先止损、修复再定位问题。
怎么样执行流程
DevOps
开发运维形成一个闭环
全流程自动化
通过效能平台串联各个阶段