# 架构设计演进
作者:Ethan.Yang
博客:https://blog.ethanyang.cn (opens new window)
# 一、从单体到集群:从能跑到能抗
所有项目的演进,都是从 “先能用,再好用” 开始的。
在初创阶段,企业更关注 业务能快速上线,于是通常采用 单体架构,
将所有模块打包在一个 Maven 聚合工程 中,部署在一台服务器上:

但随着业务增长、用户增多,单台机器的性能逐渐成为瓶颈。 此时,为了抗压,就需要对服务进行 集群化部署, 由多台服务器共同处理请求——系统正式迈入 集群架构阶段。
# 二、引入 SLB:流量分发与高可用
为了解决集群中请求分发的问题,我们引入 SLB(Service Load Balancer,服务负载均衡)。
SLB 会根据策略(如轮询、权重、最少连接数)将请求分配到后端多台 Nginx 或应用服务器上。
SLB (云层)
↓
Nginx (应用层)
├── 服务1
├── 服务2
└── 服务3
2
3
4
5
6
7

SLB 负责分流与容灾,Nginx 负责请求路由与代理。 两者配合,实现高可用、高性能的分布式服务架构。
# 三、系统复杂化:从团队到系统的拆分
当公司继续扩大后,团队也会细分成多个职能部门:
- 运维部
- 研发部
- 产品部
每个部门又会根据业务划分为 交易组、商品组、物流组 等。 对应到系统架构上,也必须进一步服务化拆分,做到职责清晰、边界明确。

当系统拆分成多个服务后,我们必须回答以下几个核心问题
如何找到需要调用的服务地址?
引入 注册中心(Service Registry),所有服务启动后自动注册到注册中心,调用方从注册中心动态获取服务地址。
服务之间如何调用?
使用 RPC 框架(如 Dubbo、gRPC) 实现高性能远程调用。
如何实现负载均衡与高可用?
通过 服务选择算法 + 服务集群(随机、轮询、一致性哈希)实现。
外部系统如何进行服务调用?
通过 网关(Gateway / 接入层) 提供统一的接入入口与安全控制。
服务越来越多,问题怎么排查?
依靠 监控系统、日志中心、链路追踪(SkyWalking / Zipkin) 进行全链路观测。
服务间调用阻塞、雪崩怎么防?
引入 熔断降级机制(Sentinel / Resilience4j),防止级联故障。
服务越来越多,如何高效发版?
借助 CI/CD 工具(Jenkins、GitLab CI、ArgoCD) 实现自动构建与持续部署。

这时的系统架构已经具备:
- 动态发现(注册中心)
- 远程调用(RPC)
- 流量调度(SLB + Nginx)
- 高可用集群
- 链路追踪与监控
- 自动化发布与运维
项目也正式从单体可用演进到高并发、高可用、高可维护, 这便是“三高架构”的雏形。
负载均衡 →