后端开发流程 | 青训营笔记

103 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

从需求到上线的全流程

需求阶段

  • 不要浪费时间讨论不应该存在的问题

  • MVP (minimum viable product)

    • 站在用户的角度评估需求

    • 收集用户反馈,快速迭代

  • 四象限法(紧急、重要)

    • 尽量不要把事情变成紧急的事情

开发阶段

云原生

  • 传统虚拟机

    • 由物理主机虚拟出多个虚拟机,每个虚拟机拥有自己的操作系统

    • 运维同学负责维护和交付虚拟机

    • 每个虚拟机中都要安装相应的依赖环境

  • 容器化

    • 容器是在操作系统中虚拟出来的

    • 通过 cgroup, namespace 和 Union Mount 等技术实现了容器之间的相互隔离。同时容器只有很低的开销

    • 应用和其依赖作为一个整体,打包成镜像交付

微服务

  • 各个功能在不同的服务中

  • 不同的模块需要进行 RPC 通信

  • 不同模块可以独立扩缩容

  • 每个服务的代码仓库仅由少部分人维护

开发

  • 开发环境逐渐原生化

  • 本地 IDE 转移至线上

团队分支策略

Nouveau nœud de commit de merge

  • 多个团队成员各自用什么分支开发?

  • 修改出现冲突怎么办?

  • 出现了问题怎么回退到之前的版本

代码规范

  • 养成良好的注释习惯,超过三个月的代码,自己都会忘了当时想的是什么

  • 不要有魔法数字,魔法字符串

    • 如果有,应该把数字或字符串定义出来
  • 重复的逻辑抽象成公共方法,不要 cv

  • 正确使用 IDE 的重构功能(踩过坑qaq),防止修改错误

自测

  • 单元测试

  • 功能环境测试

  • 测试数据构造

文档

  • 大型改造需要有技术设计文档,方便评审

  • 好的接口文档能更方便地和前端同学进行沟通

测试阶段

推荐:《Google 软件测试之道》

越早发现缺陷,修复的成本越低

功能环境

  • 需要一个能模拟线上的环境进行开发和测试

  • 环境和环境之间能够隔离,不影响其他功能的开发和测试

集成环境

  • 不同人开发的功能合并在一起测试,相互之间的影响可能产生缺陷

  • 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生缺陷

回归环境

  • 确保新的功能不会对之前的功能产生影响

  • 回归测试一般会借助自动化脚本

image.png

发布阶段

发布模式

  • 蛮力发布:直接用新版本覆盖老版本

    • 优点

      • 简单

      • 成本低

    • 缺点

      • 发布过程中服务会中断

      • 出了问题会影响全部用户

    • 适用

      • 测试环境部署

      • 小公司或非核心的业务服务

  • 金丝雀发布:先测试一台机器

    • 优点

      • 相对简单

      • 能够用少量用户验证新版本的功能

    • 缺点

      • 发布过程中服务依然会中断

      • 发现不了随着用户量增大才会暴露的问题

    • 适用

      • 测试环境部署

      • 小公司或非核心的业务服务

  • 滚动发布:每个实例都使用金丝雀逐步放大流量

    • 优点

      • 发布过程中用户体验不会中断

      • 可以充分验证服务功能

    • 缺点

      • 流程较复杂,对发布系统有比较高的要求

      • 发布速度慢

      • 新老版本不兼容的情况下不能使用

    • 适用

      • 发布系统能力较强,可以平滑切换流量

      • 发布自动化程度较高,可以自动滚动

  • 蓝绿发布:两个实例集交替升级、交替承担流量

    • 优点

      • 发布速度快

      • 流程相对简单

    • 缺点

      • 需要一般的机器承担所有流量的能力

      • 出现问题会影响全部用户

    • 适用

      • 服务器资源丰富

      • 新老版本不能兼容的情况,需要一次性升级到新版本

  • 红黑发布:类似于蓝绿发布,只是短时间内扩容一倍的服务器

一篇非常详细的文章:常用的发布方式 - HackerVirus - 博客园

运维阶段

事故

  • 流量洪流(12306咳咳

  • 数据库表的数据量增长

  • 内存|进程泄露

  • 光缆被挖断?

出现问题

  1. 止损(关闭服务

  2. 通知服务使用者

  3. 定位问题

  4. 修复问题