这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
当要开发的项目复杂了之后,会遇到一系列的问题。 例如:
- 需求阶段:每个人都有自己的想法,团队决策需要有一个过程
- 开发阶段:多人/多端协作开发,每个人有自己的安排,相互配合需要有一个流程
- 测试阶段:产物怎样交付,测试如何开展,bug 怎么修都需要流程
- 发布阶段:怎样确保发布过程平稳丝滑,版本和流量如何控制,需要有规范
- 运维阶段:线上问题如何应急响应,处理用户反馈和线上问题需要有流程
可以看见,这些都需要一个规范和流程。下面是几个阶段的一些注意事项。
需求阶段
- 不要浪费时间讨论不应该存在的问题
- 开发者需要学会站在用户的角度评估需求
- 使用 MVP 思想、四象限法等多种方式
开发阶段
由于云原生的发展,现在的后端开发工作跟几年前已经有了很大的区别, 作为后端开发者,应该把 Kubernetes 和容器技术作为一个基础知识, 因为这对日常的开发影响很大。
虚拟机 VS 容器化
如果说过去在虚拟机中的开发是用剑决斗,那云原生技术爆发的当下,就是能够在决斗中用枪了
虚拟机
- 在物理主机中虚拟出多个虚拟机,每个虚拟机拥有自己的操作系统
- 运维人员负责维护和交互虚拟机
- 每个虚拟机中都要安装相应的依赖环境
容器化
- 容器是在操作系统中虚拟出来的
- 通过cgroup、namespace和Union Mount等技术实现了容器之间的相互隔离,同时容器只有很低的开销
- 应用和其依赖作为一个整体,打包成镜像交付
单体架构 VS 微服务架构
单体架构
- 多个模块共同组成一个服务,服务体量较大
- 模块之间直接调用,不需要 RPC 通信
- 服务整体扩缩容量
- 多人开发一个代码仓库,需要充分集成测试
微服务架构
- 各个功能在不同的服务中
- 不同模块需要进行 RPC 通信
- 不同扩快可以独立扩缩容
- 每个服务的代码仓库仅由少部分人维护
测试阶段
你需要在写完每一段代码之后立即测试这段代码,当完成了更多的代码时,就要做更多的测试。测试不是独立隔离的活动,它本身就是开发过程的一部分,质量不等于测试,当你把开发过程和测试放到一起,就像在搅拌机里混合搅拌那样,直到不能区分彼此的时候,你就得到了质量。
——《Google 软件测试之道》