上线到发布全流程 | 青训营笔记

177 阅读5分钟

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

团队之间的配合才是提高效率的重点

为什么要有流程

  • 个人开发者是不需要流程的
  • 超过一个人的团队就需要协作
  • 随着团队规模的上升,会出现全新的问题

复杂项目没有流程会出现什么问题

需求阶段:每个人都有自己的想法,团队决策需要由有一个过程

开发阶段:多人/多端协作开打,每个人都有自己的安排,相互配合需要一个流程

测试阶段:产品怎样交付,测试如何展开,BUG怎么修都需要一个流程

发布阶段:怎么样确保发布过程平稳丝滑,版本和流量如何控制,需要有规范

运维阶段:线上问题如何应急响应,处理用户反馈和线上问题需要有流程

传统的瀑布模型

  • 工作流程的直观表达
  • 定义了标准的研发过程
  • 以流程未本,理想化模型
  • 需求
  • 开发
  • 测试
  • 发布
  • 运维

敏捷开发

  • scrum

  • 以小团队快速迭代

  • 团队成员之间的合作更加的紧密

  • 以人为本,和用户沟通

  • 延申成企业的一个管理框架SAFe(多个scrum协作开发)

    • 精益产品开发
    • 敏捷软件开发
    • 系统思考
  • 现代的srum

    • 敏捷教练Scrum Master
    • 产品负责人 Product Owner
    • 敏捷团队 Scrum Team
    • 敏捷发布火车Agile Release Train
  • 人员名词解释

    • RD:研发
    • PM:产品经理
    • PRD:需求文档
    • UED:用户体验设计
    • QA:测试
    • Scrum:敏捷团队1
    • P0/P1:优先级0/优先级1
    • Backing:规划列表
  • 常有会议

    • 待办事项整理会议

      产品负责人描述下个迭代希望实现的用户故事,PM提出需求列表

    • 迭代计划会议

      选择迭代的任务和估算工作量

    • 每日站会

      • 昨天做了什么
      • 今天将要做什么
      • 你有需要帮助的地方
    • 评审会

      小组向产品负责人展示迭代结果

    • 反思会

      在每个迭代后召开简短的反思会,总结哪些事情没有做好,哪些事情做的好

有哪些阶段

  • 需求阶段

    • 科学砍需求
    • 站在用户角度提出需求(MVP最小可行产品思想)
    • 收集用户反馈,快速迭代
    • 评估自己事情的紧要程度,分层(重要,紧急程度,先看重要性)
  • 开发阶段

    • 对业界有一定的了解(云原生)。云原生下的开发(WEB IDE)

      • 传统虚拟机

        • 在物理机中模拟出多个虚拟机,每个虚拟机拥有自己的操作系统
        • 运维人员负责维护和交付虚拟机
        • 每个虚拟机中都要安装相应的依赖环境
      • 容器化

        • 容器是在操作系统中虚拟出来的
        • 通过cgroup,namespace和Union Mount等技术实现了容器之间的相互隔离,同时容器只有很低的开销
        • 应用和其依赖作为一个整体,打包成镜像交付
      • 单体架构

        • 多个模块共同组成一个服务,服务体量大
        • 模块之间直接调用,不需要PRC进行通信
        • 服务整体扩缩容量
        • 多人开发一个代码仓库,需要充分集成测试
      • 微服务架构(网络通信消耗大)

        • 各个功能在不同的服务中
        • 不同模块需要进行PRC通信
        • 不同模块可以独立扩缩容
        • 每个服务的代码仓库仅由少部分人维护
      • 团队之间的分支策略

        • 各自用什么分支
        • 冲突怎么解决
        • 如何回退到之前的版本
      • 代码规范

        • 养成良好的注释习惯
        • 不要有魔法数字,魔法字符串
        • 重复的逻辑抽象成公共的方法
        • 正确使用IDE的重构功能,防止修改错误
      • 自测

        • 单元测试
        • 功能环境测试
        • 测试数据构造
      • 文档

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

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

          测试阶段

      • 为自己的代码负责

      • 不要依赖测试人员

      • 功能环境

        • 需要一个能模拟线上的环境进行开发和测试
        • 环境和环境之间能够隔离吗,不影响其他功能的开发和测试
      • 集成环境

        • 不同人开发的功能合并在一起测试,相互之间的影响可能会产生缺陷
        • 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的应先不产生缺陷
      • 回归环境

        • 确保新的功能不对老的功能产生影响
        • 回归测试一般会借助自动化测试脚本

      发布阶段

      • 检查发布的全过程,排查问题

      • 发布负责人

        • 负责按照计划执行发布
        • 需要通知各个相关人员发布进展
        • 观察各个服务的发布状态,即使处理异常
      • 变更服务的相关RD

        • 按照上线checklist检查服务的日志,监控,响应上线过程中的告警
        • 对于自己负责的改动,在小流量或者预览环境进行环境验证
        • 执行发布计划中的其他操作
      • 值班同学

        • 发布过程中的监控和告警需要特别关注,如果有异常需要立刻判断是否由变更引起
        • 如果有变更引起的报警或者用户反馈,需要及时终止发布
      • 发布模式

        • 蛮力发布(测试环境)
        • 金丝雀发布(服务会中断)
        • 滚动发布(流程复杂,新老版本不兼容)
        • 蓝绿发布(需求资源量大,一半机器承担所有的流量)
        • 红黑发布(需要扩容一倍)
        • 经常使用的是滚动发布(虽然发布速度慢,但是用户体验好)

        运维阶段

        • 止损
        • 周知
        • 定位
        • 修复

      流程优化

      • DevOps解决方案

        • 代码管理
        • 自动化测试
        • 持续集成
        • 持续交付
        • 效率竖井
      • 通过效能平台串联各个阶段

      • 减少无价值的等待