首页/开发/系统分析与架构设计速查/无共享架构(Shared-Nothing)
架构风格与模式58 条

无共享架构(Shared-Nothing)

节点之间不共享内存与磁盘,各自处理一部分数据与请求;是水平扩展与故障隔离的基础假设,数据分片与再平衡是其核心配套。

无共享架构是什么

无共享(Shared-Nothing)指节点之间不共享内存与磁盘,每个节点各自完成计算并只访问本地资源,数据按规则分片分布在不同节点上。它是水平扩展与故障隔离的基础假设:节点之间没有争用同一份状态,容量可以靠加机器近似线性提升,单节点故障也只影响它负责的那部分数据与请求。代价是复杂度转移到分片、副本、请求路由与再平衡这些配套机制上,而这些机制的实现质量决定架构的实际可用性。

基本信息

前提每个节点独立完成计算,不访问其他节点的本地资源
配套机制数据分片、副本、请求路由与再平衡
收益扩展性接近线性,单节点故障影响可控
分片键决定数据分布与查询路由,一旦确定难改,需要提前设计
例外情况共享的配置中心、对象存储等外部服务可以有,但不能成为吞吐瓶颈

典型使用场景

  • 海量数据存储:单机容量不足时按分片键水平切分到多节点
  • 高并发写入:写入压力按分片分散,避免单点成为瓶颈
  • 分布式缓存:集群按槽位分布键值,节点增减时迁移槽位
  • 搜索引擎:索引进分片,查询并行下发后归并结果
  • 消息平台:分区作为扩展单位,消费并行度与分区数绑定
  • 多租户系统:按租户分片,天然隔离且便于按租户扩容

配套机制职责

机制职责常见问题
分片按业务键切分数据并路由请求分片键选择不当造成倾斜与热点
副本故障接管与读扩展副本与主分片落在同一故障域,隔离失效
再平衡节点增减时迁移分片并控制迁移速度迁移过快抢占在线流量
路由层把请求定向到分片所在节点路由表更新滞后,请求打到错误节点
跨片查询聚合多个分片的结果无索引支撑时退化为全分片扫描

分片设计要点

分片设计要点
# 1 分片键要覆盖绝大多数查询:按用户分片时,按用户查询最高效
# 2 避免单调递增键直接取模:写入集中在尾部,形成结构性热点
# 3 分片数预留增长:从 8 扩到 16 时若不能平滑迁移,需停写窗口
# 4 副本反亲和:同一分片的副本分布到不同节点与不同可用区
# 5 迁移限速:再平衡期间限制带宽与数据量,避免影响在线请求
# 6 观测:分片数据量均衡度、热点分片 QPS 与跨片查询占比
无共享并不排斥共享的外部服务:配置中心、对象存储、注册中心可以共用,但要评估它们的容量与故障影响,避免它们成为新的单点瓶颈。
分片键一旦上线就很难更改:它同时决定数据分布、查询路由与扩容方式,选型阶段应把未来三年的主要查询模式一起考虑进去。

易错点

  • 节点间偷偷共享数据库或文件系统:扩展性被单点卡住,故障域也没有隔离
  • 分片规则不随节点数变化:扩容时触发大规模数据迁移,窗口不可控
  • 分片键分布倾斜:部分节点长期过载,扩容无法缓解
  • 副本与主分片同节点同机架:节点故障时数据同时不可用
  • 跨片查询没有限制:大范围聚合把全部节点拖慢

数据来源与参考

  • 《数据密集型应用系统设计》(Kleppmann,O'Reilly)
  • Michael Stonebraker 关于 Shared-Nothing 的论文(1986)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌