后端开发与迭代
一、开发流程
1、需求阶段
不浪费时间讨论不应该存在的问题
MVP(minimum viable product 最小化可行产品) 思想
重要和紧急程度(先看重要性,再看紧急性 )
2、开发阶段
云原生
云原生下的开发最大的区别就是部署形式不同
- 传统虚拟机
传统虚拟机上的服务开发,是在物理机上或者是更底层上虚拟出多个虚拟主机,然后在每个虚拟主机中安装软件和依赖,虚拟机需要有专门的运维人员维护。
- 容器化
容器是从操作系统中虚拟出来的,所有容器共享宿主机的系统,通过cgroup,namespace 和union mount 实现了容器之间的隔离,因此在部署时,应用和其依赖的系统是整体打包成一个镜像的,后端开发不再依赖运维人员创建程序的运行时环境。
云原生带来另一个改变就是微服务
- 单体架构
- 多个模块共同组成一个服务,服务体量较大
- 模块之间直接调用,不需要RPC通信
- 服务整体扩缩容量
- 多人开发一个代码仓库,需要充分集成测试
一个服务中多个不同的模块构成了一个部署单元,各个模块作为一个整体部署和伸缩,这种架构下往往服务会形成一个很大的代码仓库,大家共同维护一个大型系统
- 微服务架构
- 各个模块在不同的服务中
- 不同模块需要进行RPC通信
- 不同模块可以独立扩缩容
- 每个服务的代码仓库仅由少部分人维护
微服务架构是把模块拆分到不同的服务中去,拆分的粒度更细,可以让每个模块独立的扩缩容,同时可以让少数几个人维护一个仓库,更适合敏捷的开发流程
开发环境逐渐云原生化
FaaS、PaaS 等技术让开发逐渐从本地 IDE向线上转变
团队之间采用分支策略
代码规范
- 有良好注释习惯
- 不要有魔法数字,魔法字符串
- 重复的逻辑抽象成公共的方法,不要copy代码
- 正确使用IDE的重构功能 ,防止修改错误
自测
- 单元测试
- 功能环境测试
- 测试数据构造
文档
- 大型改造需要有技术设计文档,方案评审
- 好的接口文档能更方便的和前端进行沟通
3、测试阶段
越早发现缺陷修复的成本越低
- 功能环境
- 集成环境
- 回归环境
4、发布阶段
各种发布模式
- 蛮力发布
- 金丝雀发布
- 滚动发布
- 蓝绿发布
- 红黑发布
5、运维阶段
当故障发生时,首先是止损,其次是让服务上下游感知到出了问题,之后我们才需要取定位和修复问题
二、流程怎样优化
DevOps 解决方案
- 代码管理
- 自动化测试
- 持续集成
- 持续交付
从需求开始,写代码,编译,测试,发布,运维,监控形成一个闭环
全流程自动化
通过效能平台串联各个阶段
减少无价值的等待