从“单机”到“分布式”到“集群”,服务经历了什么?

【万字长文·图解】

从"单机"到"分布式"到"集群"------一次讲透两者的区别、联系、落地场景与常见架构


一、先放一张脑图

markdown 复制代码
单机(one box)────┬──> 集群(Cluster):多台机器干**同一件事**(横向复制)
                └──> 分布式(Distributed):多台机器干**不同的事**(横向拆分)

关键词

  • 集群 = 人多力量大(量)
  • 分布式 = 专人干专事(分工)
  • 现实中往往"分布式 + 集群"混合出现(既拆分又复制)

二、集群(Cluster)详解

1. 定义

多台物理/虚拟节点组成一个逻辑整体 ,对外提供同一种服务 ,通过复制提高并发量可用性

2. 核心目标

  • Scale-Out(横向扩展)
  • High-Availability(故障转移)
  • Load-Sharing(负载均衡)

3. 分类速记

类型 说明 产品案例
高可用集群 HA 主备切换,A 挂了 B 立刻顶 MySQL MGR、Redis Sentinel、Keepalived
负载均衡集群 LB 多台同时在线,流量分摊 Nginx、LVS、HAProxy、AWS ELB
计算集群 HPC 并行计算,CPU 加一起算 Slurm、Kubernetes Job
存储集群 多磁盘拼成统一存储 Ceph、GlusterFS、HDFS

4. 经典架构图(以 Web 层为例)

markdown 复制代码
        ┌───> 节点 1(Nginx)
LB──┤   ├───> 节点 2(Nginx)   对外 VIP 统一入口
        └───> 节点 3(Nginx)
  • 所有节点跑同一套代码
  • 会话同步(粘性会话或 Redis);
  • 健康检查失败即剔除。

5. 优缺点

✅ 简单:代码零改造

✅ 线性扩容:加机器就提升 QPS

❌ 单点数据仍在单机(例如 MySQL 主库),集群 ≠ 数据分布式


三、分布式(Distributed)详解

1. 定义

原本单机内不同功能同一功能的不同数据 拆到多台节点,节点之间通过网络协作 ,对外表现为一个系统

2. 核心目标

  • 拆分(数据/功能/计算)
  • 自治(局部故障不影响全局)
  • 最终一致性(CAP 权衡)

3. 拆分维度

维度 案例 产品
业务功能 订单服务、用户服务、库存服务独立进程 微服务
数据 按用户 ID 取模拆成 32 库 1024 表 分库分表、ShardingSphere
计算 Map 节点 + Reduce 节点各干各的 Hadoop MapReduce
时空 同一任务流水线 Stage1→Stage2 Flink 流处理

4. 经典架构图(微服务 + 分库分表)

markdown 复制代码
API 网关 ─┬─> 订单服务 ──> 订单库(分片 0-31)
          ├─> 用户服务 ──> 用户库
          └─> 库存服务 ──> 库存库(分片 0-15)
  • 每个服务代码不同数据不同
  • 节点失败只影响局部;
  • 需要分布式事务/消息最终一致性。

5. 优缺点

✅ 突破单机容量上限(数据、计算)

✅ 独立发布、弹性伸缩

❌ 复杂:远程调用、幂等、分布式事务、脑裂、网络分区

❌ 延迟比本地高 1~2 个数量级


四、集群 vs 分布式------一句话对比

维度 集群 分布式
单元关系 同构节点(镜像) 异构节点(分工)
透明性 对客户端几乎透明 需要服务发现、网关
扩展目标 提升吞吐量 &可用性 提升容量 &可维护性
故障范围 节点级冗余,数据仍可能单点 局部故障,数据/计算已拆分
代码改造 零/少量 必须(接口、数据路由、容错)
CAP 侧重 侧重 AP(高可用) 必须面对 CP/AP 选择

五、为什么总把两者混用?

"分布式"里每个子服务本身又可以是"集群"------既分工又复制

电商订单架构示例

复制代码
订单服务(集群 3 副本)──> 订单表(分片 0-15,每片 2 副本)
  • 分布式 :订单表按用户 ID 拆成 16 个分片 → 数据分布式
  • 集群 :每个分片有 2 副本 → 高可用集群

六、演进路线(老板最爱问的"三步走")

  1. 单机集群(先解决并发&可用,不动代码)
  2. 集群分布式(数据量/研发规模变大,开始拆分)
  3. 分布式混合云/多活(地域容灾、弹性、成本)

七、常见产品对照表

场景 集群产品 分布式产品
数据存储 MySQL MGR、Redis Sentinel MySQL Sharding、TiDB、CockroachDB
计算 Kubernetes ReplicaSet Hadoop MapReduce、Spark、Flink
消息 ------ Kafka、Pulsar(分区+副本)
协调 ------ ZooKeeper、etcd、Consul

八、一张图总结(保存即可)

markdown 复制代码
               单机
                │
        ┌───────┴───────┐
        │               │
     集群(复制)    分布式(拆分)
        │               │
        └───────┬───────┘
                ▼
         现代互联网架构
      (微服务 + 分片 + 副本)

九、一句话背下来

集群同一台服务好多台
分布式一台机器的任务 拆成好多台机器的任务

真正的大型系统 = 分布式 + 集群 ------既分工又人多

相关推荐
金銀銅鐵16 小时前
From Nand to Tetris 里的 Project 3
设计
得物技术2 天前
PAG在得物社区S级活动的落地
设计
xrczsjq3 天前
2025北京深圳河北数字科技展厅设计推荐哪家展览展馆设计公司
科技·设计·艺术·展厅设计·展馆设计·科技展厅设计·数字展厅设计
soda_yo5 天前
React哲学:保持组件纯粹 哈气就要哈得纯粹
前端·react.js·设计
xfchsjh12 天前
展厅展馆如何超越陈列?2025探寻深圳河北上海科技创意设计公司的不同逻辑
科技·设计·艺术·展厅设计·展馆设计·科技展厅设计·数字展厅设计
金銀銅鐵14 天前
From Nand to Tetris 里的 Project 2
设计
Somehow00714 天前
Spring Boot 集成 ElasticSearch 的简单示例
spring boot·设计
踏浪无痕17 天前
每天上亿条日志,Elasticsearch 是怎么扛住的?
后端·架构·设计
JohnYan18 天前
工作笔记-文件夹批量改名
操作系统·设计