Skip to content

集群与分布式

随着业务增长,单机系统迟早会遇到性能瓶颈。无论 CPU、内存还是数据库能力,都存在上限。因此,高并发系统最终一定会走向:

“多机器共同工作”。

而实现这一目标,通常会经历两个阶段:

  • 集群(Cluster)
  • 分布式(Distributed System)

一、什么是集群

集群最核心的特点是:

多台机器运行“同一种服务”,共同对外提供能力。

例如:

  • 多台 Web 服务器
  • 多台 Nginx
  • 多台 Redis
  • 多台 MySQL 从库

用户请求会被负载均衡分发到不同机器。

其目标主要有两个:

1. 提升并发能力

单机扛不住流量时:

  • 增加机器
  • 分摊请求压力

这叫横向扩展(Scale Out)。

2. 提升可用性

如果一台机器挂掉:

  • 其他机器继续提供服务

避免单点故障。

二、集群的核心特点

集群中的节点通常:

  • 功能相同
  • 地位平等
  • 部署同一套代码

比如:

5 台 Web Server:

  • 都能处理登录
  • 都能处理下单
  • 都能处理查询

因此:

集群解决的是“同一种能力不够”的问题。

三、什么是分布式

当系统继续发展,仅靠“复制机器”已经不够。

因为系统会出现:

  • 代码越来越大
  • 模块越来越多
  • 团队协作困难
  • 数据量暴涨
  • 单库单表瓶颈

这时系统开始拆分。

于是进入:

分布式系统阶段。

四、分布式的核心思想

分布式的核心不是“多台机器”。

而是:

“不同机器负责不同功能”。

例如:

  • 用户服务
  • 订单服务
  • 支付服务
  • 库存服务
  • 推荐服务

每个服务:

  • 独立部署
  • 独立扩容
  • 独立数据库
  • 独立开发

因此:

分布式解决的是“系统复杂度过高”的问题。

五、集群和分布式的本质区别

最核心区别:

集群分布式
多机器做同一件事多机器做不同的事
解决性能和高可用解决系统复杂度
节点功能相同节点功能不同
强调“复制”强调“拆分”

六、系统为什么必须分布式

文章强调:

大型系统最终一定会分布式化。

原因主要有四个。

1. 单体系统维护困难

系统越来越大后:

  • 代码耦合严重
  • 修改风险极高
  • 编译部署变慢

一个小改动可能影响整个系统。

2. 团队协作困难

几十人甚至上百人开发同一系统时:

  • 冲突严重
  • 发布困难
  • 职责不清晰

因此必须拆分。

3. 单机资源存在上限

数据库:

  • 单机 IO 有极限
  • 单表数据量有极限

服务:

  • CPU 有上限
  • 内存有上限

因此必须分布式扩展。

4. 不同业务增长速度不同

例如:

订单服务压力很大, 但用户服务压力不高。

如果是单体: 只能整体扩容。

如果分布式: 只扩容订单服务即可。

这叫:

按需扩容。

七、分布式系统带来的新问题

文章强调:

分布式不是银弹。

它解决了单体问题,但引入了更多复杂性。

1. 网络通信问题

单体系统:

  • 方法调用

分布式系统:

  • RPC
  • HTTP
  • 网络传输

于是会出现:

  • 超时
  • 丢包
  • 网络抖动

2. 分布式事务问题

单体系统:

  • 一个数据库事务即可

分布式系统:

  • 多服务
  • 多数据库

传统事务无法保证一致性。

因此必须:

  • 最终一致性
  • 消息补偿
  • Saga
  • TCC

3. 分布式锁问题

多个节点同时操作资源时:

需要协调并发。

因此会引入:

  • Redis 锁
  • ZooKeeper 锁

4. 数据一致性问题

多副本、多缓存情况下:

数据同步变复杂。

系统往往只能做到:

  • 最终一致性 而非:
  • 强一致性。

5. 运维复杂度提升

单体:

  • 一台机器

分布式:

  • 上百服务
  • 上千机器

因此需要:

  • 自动部署
  • 服务治理
  • 监控告警
  • 链路追踪

八、分布式系统的核心原则

文章里实际上强调了几个非常重要的工程思想。

1. 优先拆业务,而不是拆技术

正确拆分方式:

按业务边界拆:

  • 用户
  • 订单
  • 支付

而不是:

  • Controller
  • Service
  • DAO

2. 高内聚、低耦合

服务内部:

  • 功能集中

服务之间:

  • 尽量少依赖

否则会形成: “分布式单体”。

3. 不要过度分布式

小系统:

  • 单体反而更简单

只有复杂度真正上升后: 才需要分布式。

九、系统演进路径

第一阶段:单机系统

简单、开发快。

第二阶段:集群化

解决性能和高可用问题。

第三阶段:服务拆分

系统开始分布式。

第四阶段:微服务化

服务治理体系成熟:

  • 注册中心
  • 配置中心
  • 网关
  • 链路追踪

十、总结

集群解决的是“单机性能和可用性不足”的问题,而分布式解决的是“系统规模和复杂度过高”的问题。系统架构的演进,本质上是随着业务增长,不断通过“复制”和“拆分”来突破单机能力边界。

Released under the MIT License.