# 架构设计演进

作者:Ethan.Yang
博客:https://blog.ethanyang.cn (opens new window)


# 一、从单体到集群:从能跑到能抗

所有项目的演进,都是从 “先能用,再好用” 开始的。
在初创阶段,企业更关注 业务能快速上线,于是通常采用 单体架构
将所有模块打包在一个 Maven 聚合工程 中,部署在一台服务器上:

但随着业务增长、用户增多,单台机器的性能逐渐成为瓶颈。 此时,为了抗压,就需要对服务进行 集群化部署, 由多台服务器共同处理请求——系统正式迈入 集群架构阶段

# 二、引入 SLB:流量分发与高可用

为了解决集群中请求分发的问题,我们引入 SLB(Service Load Balancer,服务负载均衡)
SLB 会根据策略(如轮询、权重、最少连接数)将请求分配到后端多台 Nginx 或应用服务器上。

SLB (云层)
   ↓
Nginx (应用层)
   ├── 服务1
   ├── 服务2
   └── 服务3

1
2
3
4
5
6
7

SLB 负责分流与容灾,Nginx 负责请求路由与代理。 两者配合,实现高可用、高性能的分布式服务架构。

# 三、系统复杂化:从团队到系统的拆分

当公司继续扩大后,团队也会细分成多个职能部门:

  • 运维部
  • 研发部
  • 产品部

每个部门又会根据业务划分为 交易组、商品组、物流组 等。 对应到系统架构上,也必须进一步服务化拆分,做到职责清晰、边界明确。

当系统拆分成多个服务后,我们必须回答以下几个核心问题

  1. 如何找到需要调用的服务地址?

    引入 注册中心(Service Registry),所有服务启动后自动注册到注册中心,调用方从注册中心动态获取服务地址。

  2. 服务之间如何调用?

    使用 RPC 框架(如 Dubbo、gRPC) 实现高性能远程调用。

  3. 如何实现负载均衡与高可用?

    通过 服务选择算法 + 服务集群(随机、轮询、一致性哈希)实现。

  4. 外部系统如何进行服务调用?

    通过 网关(Gateway / 接入层) 提供统一的接入入口与安全控制。

  5. 服务越来越多,问题怎么排查?

    依靠 监控系统、日志中心、链路追踪(SkyWalking / Zipkin) 进行全链路观测。

  6. 服务间调用阻塞、雪崩怎么防?

    引入 熔断降级机制(Sentinel / Resilience4j),防止级联故障。

  7. 服务越来越多,如何高效发版?

    借助 CI/CD 工具(Jenkins、GitLab CI、ArgoCD) 实现自动构建与持续部署。

这时的系统架构已经具备:

  • 动态发现(注册中心)
  • 远程调用(RPC)
  • 流量调度(SLB + Nginx)
  • 高可用集群
  • 链路追踪与监控
  • 自动化发布与运维

项目也正式从单体可用演进到高并发、高可用、高可维护, 这便是“三高架构”的雏形。