架构演进路径
架构没有最好的,只有最合适的。每一代架构的出现,都不是为了取代上一代,而是为了解决上一代在特定场景下的痛点。
理解架构演进的逻辑,比记住每个架构的特性更重要。
为什么需要理解架构演进
很多人学架构,学的是「是什么」——微服务是什么、Kubernetes 是什么、服务网格是什么。但更重要的是理解「为什么」——为什么需要微服务?为什么 Kubernetes 能解决微服务的运维问题?为什么服务网格出现了?
不知道「为什么」,就不知道什么时候该用、什么时候不该用。盲目追新,往往比用老技术更危险。
演进不是替换,是叠加
架构演进不是一代彻底替代上一代。每一代架构都会在它最适合的场景里继续存在。
理解这一点,就不会在 CTO 说「我们要上微服务」的时候,冲动地把团队仅有 5 个人、代码量 2 万行的小系统拆成 20 个微服务。
五个演进阶段
本节按时间线展开五个架构阶段:
- 单体架构时代 —— 理解为什么单体架构曾经是主流
- SOA 面向服务架构 —— 企业级架构的第一次尝试
- 微服务时代 —— 互联网公司的主流选择
- 服务网格(Service Mesh) —— 微服务治理的进阶形态
- 无服务器架构(Serverless) —— 云原生的极致形态
- 架构演进决策树 —— 如何判断你的系统应该演进到哪个阶段
核心判断标准
判断一个系统是否需要架构演进,有三个核心问题:
第一个问题:当前的瓶颈是什么?
架构演进的动力不是「我想用新技术」,而是「老技术解决不了当前的瓶颈」。瓶颈可能是开发效率(代码冲突多、发布周期长)、扩展性(单点数据库扛不住)、或者运维复杂度(故障定位困难)。
第二个问题:团队准备好了吗?
微服务需要 DevOps 能力、服务治理能力、分布式追踪能力。团队如果没有这些能力,贸然上微服务只会把问题从代码层转移到运维层。
第三个问题:收益是否大于成本?
架构演进是有成本的——基础设施改造成本、团队学习成本、业务风险成本。如果演进成本超过收益,就不应该演进。
架构演进的节奏
架构演进应该渐进式推进,而不是大跃进。每一次演进都应该有明确的业务价值和可衡量的收益。没有目标、没有衡量的架构演进,是技术债务的另一来源。