[走进后端 | 青训营笔记]

69 阅读6分钟

前言

真的是面试造航母,工作拧螺丝?
还是所谓的工作经验是经历了什么?
互联网公司加班多?究竟在做什么?
拒绝内耗焦虑!

团队规模和流程的关系

为什么要有流程?

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

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

需求阶段:每个人都有自己的想法,团队决策需要一个过程
开发阶段: 多人/多端协作开发,每个人有自己的安排,互相配合需要一个流程
测试阶段:产物怎样交付,测试如何开展,BUG怎样修都需要流程
发布阶段:怎样确保发布过程平稳丝滑,版本和流量怎样控制,需要有规范
运维阶段:线上问题如何应急响应,处理用户反馈和线上问题需要有流程

传统的瀑布模型

工作流程的直观表达
定义了标准的研发阶段
以流程为本,理想化模型

graph TD
需求 --> 开发 --> 测试 --> 发布 --> 运维

敏捷开发(更现代的流程模型)

以小团队快速迭代
团队成员之间的合作更加紧密
以人为本,和用户沟通

有哪些流程阶段?

1.需求阶段

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

1.1科学的砍需求

MVP思想
站在用户的角度思考
收集用户反馈,快速迭代

2.开发阶段

云原生的发展,深刻的改变了后端开发的工作

2.1云原生下的开发

传统虚拟机

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

容器化

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

单体架构

多个模块共同组成一个服务,服务体量较大
模块之间直接调用,不需要RPC通信
服务整体扩缩容量
多人开发一个代码仓库,需要充分集成测试

微服务架构

各个功能在不同的服务中
不同模块需要进行RPC通信
不同模块可以独立扩缩容
每个服务的代码仓库仅有少部分人维护

image.png

2.2代码规范、自测和文档

代码规范

养成良好的注释习惯,超过三个月的代码,自己会忘记当时在想什么
不要有魔法数字,魔法字符串
重复的逻辑抽象成公共的方法,不要copy代码
正确使用IDE的重构功能,防止修改错误

自测

单元测试
功能环境测试
测试数据通过

文档

大型改造需要有技术设计文档,方案评审
好的接口文档能更方便的和前端进行沟通

3.测试阶段

功能环境

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

集成环境

不同人开发的功能和并在一起测试,相互之间影响可能产生缺陷
迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生缺陷

回归环境

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

4.发布阶段

4.1发布过程中要做的事情

发布负责人
负责按照计划执行发布
需要通知各个相关人员发布进展
观察各个服务的发布状态,及时处理异常
变更服务的相关 RD
按照上线checklist检查服务的日志,监控,响应上线过程中的告警
对于自己负责的改动,在小流量或者是预览环境进行功能验证
执行发布计划中的其他操作(如线上配置,数据处理等)
值班同学
发布过程中的监控和告警需要特别关注,如果有异常需要立即判断是否由变更引起
如果有变更引起的告警或着用户反馈,需要及时终止发布

4.2各种发布模式

发布模式蛮力发布(简单粗暴,直接用新版本覆盖老版本)金丝雀发布滚动发布蓝绿发布红黑发布
优点简单
成本低
相对简单
能够用少量用户验证新版本功能
发布过程中用户体验不会中断
可以充分验证服务功能
发布速度快
流程相对简单
发布速度快
流程相对简单
缺点发布过程中服务会中断
出了问题会影响全部用户
发布过程中服务会中断
发现不了随用户量增大才会暴露的问题
流程比较复杂,对发布系统有比较高的要求
发布速度较慢
新老版本不兼容的情况不能使用
需要一半机器承担所有流量的能力
出问题会影响全部用户
对机器数量仍然有要求,需要能扩容一半
出了问题会影响全部用户
适用测试环境部署
小公司或者非核心的业务服务
测试环境部署
小公司或者非核心的业务服务
发布系统能力较强,可以平滑切换流量服务器资源丰富
发布系统自动化程度高,可以自己滚动
服务器资源丰富
新版本不能兼容的情况,需要一次性升级到新版
服务器资源丰富
新版本不能兼容的情况,需要一次性升级到新版

实际工作中使用的滚动发布

6b177c69889c9204d71affd395d371a.jpg 没有强大的发布系统和服务器资源不足的公司一般使用蛮力发布或者金丝雀发布
有强大的发布工具和服务器资源充足的公司一般使用滚动发布和蓝绿发布

5.运维阶段

00862db7b8586dbe761c265d6cb0076.jpg