从需求到上线|青训营笔记

107 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第7篇笔记

  • 流程
    • 瀑布开发:需求->开发->测试->发布->运维
    • 敏捷开发:更小的团队,更快的迭代
    • SAFe(The Scaled Agile Framework)
      • 一套管理框架
      • 精益产品开发
      • 敏捷软件开发
      • 系统思考
  • 阶段
    • 需求阶段:砍需求
      • MVP(最小化可行产品)思想
        • 站在用户角度思考
        • 收集用户反馈,快速迭代
    • 开发阶段
      • 云原生下的开发
        • 传统虚拟机
          • 在物理主机中虚拟出多个虚拟机,每个虚拟机拥有自己的操作系统
          • 运维人员负责维护和交付虚拟机
          • 每个虚拟机中都要安装相应的依赖环境
        • 容器化
          • 容器是在操作系统中虚拟出来的
          • 通过cgroup,namespace和Union Mount等技术实现了容器之间的相互隔离,同时容器只有很低的开销
          • 应用和其依赖作为一个整体,打包成镜像交付
        • 微服务
          • 单体架构
            • 多个模块共同组成一个服务,服务体量较大
            • 模块之间直接调用,不需要RPC通信
            • 服务整体扩缩容量
            • 多人开发一个代码仓库,需要充分集成测试
          • 微服务架构
            • 各个功能在不同的服务中
            • 不同模块需要进行RPC通信
            • 不同模块可以独立扩缩容
            • 每个服务的代码仓库仅由少部分人维护
      • 分支策略
      • 代码规范、自测和文档
        • 代码规范
          • 养成良好的注释习惯,超过三个月的代码,自己都会忘了当时在想什么
          • 不要有魔法数字,魔法字符串
          • 重复的逻辑抽象成公共的方法,不要copy代码
          • 正确使用IDE的重构功能,防止修改错误
        • 自测
          • 单元测试
          • 功能环境测试
          • 测试数据构造
        • 文档
          • 大型改造需要有技术设计文档,方案评审
          • 好的接口文档能更方便与前端进行沟通
    • 测试阶段
      • 单元测试->集成测试->系统测试->UI测试
      • 功能环境
        • 需要一个能模拟线上的环境进行开发和测试
        • 环境和环境之间能够隔离,不影响其他功能的开发和测试
      • 集成环境
        • 不同人开发的功能合并在一起测试,相互之间的影响可能产生缺陷
        • 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生缺陷
      • 回归环境
        • 确保新的功能不对老的功能产生影响
        • 回归测试一般会借助自动化测试脚本
    • 发布阶段
      • 发布模式
        • 蛮力发布:直接用新版本覆盖旧版本
        • 金丝雀发布:先更新少量用户,确定没问题后全部更新
        • 滚动发布:每个实例都通过金丝雀方式逐步放大流量(用户体验最好)
        • 蓝绿发布:把服务分为蓝绿两组,先把蓝组流量摘掉然后升级,只用绿组提供服务,之后切换全部流量,只用蓝组提供服务,然后升级绿组服务,最终两组全部升级。
        • 红黑发布:和蓝绿发布类似,但是发布时会动态扩容出一组新服务,而不需要常备两组服务
    • 运维阶段
      • 可能出现的问题
        • 用户量增加引起流量洪峰
        • 数据库表的数据量增长导致查询速度变慢
        • 内存/进程泄露导致服务资源不足
        • 光缆被挖断
      • 止损->周知->定位->修复
  • 流程优化
    • DevOps
      • 代码管理
      • 自动化测试
      • 持续集成
      • 持续交付
    • 全流程自动化
      • 通过效能平台串联各个阶段
        • 需求发起研发流程的自动化
        • 写代码,测试环境部署的自动化
        • 自动化测试触发和报告分析
        • 发布过程可观测融入流程
      • 减少无价值的等待
        • 分析整个流程耗时,计算真正产生价值的时间

        • 不断优化流程,让有价值的流程时间占比上升