跳到主要内容

分布式系统设计

· 阅读需 5 分钟
ahKevinXy
作者

shardingSphere

  1. Cassandra

真正能落地、面试也能直接用的《分布式系统设计》完整指南,从原理到架构、到坑点,一次讲透。 全程通俗、不玄学、不堆砌名词


一、分布式系统到底是什么?

一句话: 把一个系统拆成多个服务/节点,部署在多台机器上,协同完成一件事。

目的:

  • 高并发扛得住
  • 高可用不挂掉
  • 好扩展、好升级
  • 不被单点故障搞崩

代价:

  • 复杂度爆炸
  • 网络不可靠
  • 数据不一致
  • 排错极难

二、分布式系统的 5 大核心问题(必须解决)

1. 节点之间怎么通信?

  • HTTP/REST(简单)
  • gRPC(高性能、强类型)
  • MQ 消息队列(异步解耦)

原则: 能异步就不同步,能消息就不调用。


2. 怎么保证高可用?

核心手段:

  • 集群:同一个服务部署多份
  • 负载均衡:Nginx/LVS/K8s Service
  • 熔断:调用失败自动停掉(Sentinel/Hystrix)
  • 降级:核心功能保留,非核心砍掉
  • 限流:不让流量冲垮系统

口诀: 集群 + 负载 + 熔断 + 降级 + 限流 = 高可用


3. 怎么保证数据一致性?

分布式最难点:网络不可靠 → 数据可能不一致

常用方案:

  1. CAP 理论

    • C 一致性
    • A 可用性
    • P 分区容错 → 分布式必须选 P,只能在 CP 或 AP 之间取舍
  2. BASE 理论

    • 基本可用
    • 软状态
    • 最终一致性 → 互联网系统绝大多数用 最终一致
  3. 分布式事务

    • 2PC / 3PC
    • TCC
    • SAGA 长事务
    • 本地消息表 / 可靠消息最终一致

实际工作: 90% 场景用消息队列 + 最终一致就够了。


4. 怎么保证全局唯一 ID?

不能用自增 ID,必须分布式 ID。

方案:

  • UUID(简单但无序、太长)
  • Snowflake 雪花算法(最常用)
  • 号段模式(数据库批量分配)

企业标准:雪花算法。


5. 怎么解决分布式锁?

多个节点同时操作一份资源,必须锁。

方案:

  • Redis 分布式锁(最常用)
  • Zookeeper 分布式锁(强一致)
  • etcd

要点: 防死锁、防超时、防误删、可重入。


三、分布式系统标准分层架构(背会就能设计任何系统)

接入层
└─ 网关、限流、黑白名单、路由
应用层(微服务)
└─ 用户服务、订单服务、支付服务、商品服务
领域层
└─ 核心业务逻辑、状态机、流程引擎
数据层
└─ 分库分表、主从、缓存、搜索引擎
中间件层
└─ MQ、分布式锁、配置中心、注册中心
基础设施
└─ 日志、监控、链路追踪、告警

四、分布式系统关键技术(高频重点)

1. 服务治理

  • 注册发现:Nacos / Eureka / Consul
  • 配置中心:Nacos / Apollo
  • 链路追踪:SkyWalking / Pinpoint / Jaeger
  • 服务监控:Prometheus + Grafana

2. 流量控制

  • 限流:令牌桶/漏桶
  • 熔断:失败率达到阈值直接切断
  • 隔离:线程池隔离、舱壁模式

3. 缓存架构

  • L1:本地缓存 Caffeine
  • L2:Redis 分布式缓存
  • 解决三大问题:
    • 缓存穿透
    • 缓存击穿
    • 缓存雪崩

4. 数据库扩展

  • 主从分离:读多写少
  • 分库分表:
    • 水平分表(按 user_id 拆分)
    • 垂直分库(订单库、用户库分开)

5. 异步解耦(MQ)

作用:

  • 削峰
  • 异步
  • 解耦
  • 最终一致性

保证:

  • 消息不丢
  • 消息不重复
  • 消息有序(需要的话)

五、分布式系统设计 8 步万能模板(面试/工作通用)

你以后设计任何分布式系统,都按这个来:

  1. 明确业务流程
  2. 拆分领域/微服务
  3. 定义接口与数据模型
  4. 选存储(MySQL/Redis/MQ/ES)
  5. 处理并发:分布式锁、限流、幂等
  6. 保证一致性:最终一致/分布式事务
  7. 保证高可用:集群、熔断、降级
  8. 监控、日志、告警

六、最经典的 4 个问题(面试必考)

1. 分布式锁怎么实现?

Redis + SETNX + 过期时间 + 防误删 + 可重入。

2. 分布式 ID 怎么生成?

雪花算法:时间戳 + 机器ID + 序列号。

3. 分布式事务怎么解决?

可靠消息最终一致性 / SAGA / TCC。

4. 缓存三大问题怎么解决?

  • 穿透:布隆过滤器 / 缓存空值
  • 击穿:互斥锁 / 热点数据永不过期
  • 雪崩:过期时间随机 + 集群 + 熔断

七、极简总结(最核心)

分布式系统设计 = 高可用 + 高并发 + 数据一致 + 可扩展 + 可运维

手段就是: 集群、负载、缓存、分库分表、消息队列、分布式锁、熔断限流、最终一致


如果你愿意,我可以现场带你从零设计一个真实分布式系统,比如:

  • 秒杀系统
  • 订单支付系统
  • IM 聊天系统
  • 网盘系统
  • 微服务架构