无共享架构是什么
无共享(Shared-Nothing)指节点之间不共享内存与磁盘,每个节点各自完成计算并只访问本地资源,数据按规则分片分布在不同节点上。它是水平扩展与故障隔离的基础假设:节点之间没有争用同一份状态,容量可以靠加机器近似线性提升,单节点故障也只影响它负责的那部分数据与请求。代价是复杂度转移到分片、副本、请求路由与再平衡这些配套机制上,而这些机制的实现质量决定架构的实际可用性。
基本信息
| 前提 | 每个节点独立完成计算,不访问其他节点的本地资源 |
|---|---|
| 配套机制 | 数据分片、副本、请求路由与再平衡 |
| 收益 | 扩展性接近线性,单节点故障影响可控 |
| 分片键 | 决定数据分布与查询路由,一旦确定难改,需要提前设计 |
| 例外情况 | 共享的配置中心、对象存储等外部服务可以有,但不能成为吞吐瓶颈 |
典型使用场景
- 海量数据存储:单机容量不足时按分片键水平切分到多节点
- 高并发写入:写入压力按分片分散,避免单点成为瓶颈
- 分布式缓存:集群按槽位分布键值,节点增减时迁移槽位
- 搜索引擎:索引进分片,查询并行下发后归并结果
- 消息平台:分区作为扩展单位,消费并行度与分区数绑定
- 多租户系统:按租户分片,天然隔离且便于按租户扩容
配套机制职责
| 机制 | 职责 | 常见问题 |
|---|---|---|
| 分片 | 按业务键切分数据并路由请求 | 分片键选择不当造成倾斜与热点 |
| 副本 | 故障接管与读扩展 | 副本与主分片落在同一故障域,隔离失效 |
| 再平衡 | 节点增减时迁移分片并控制迁移速度 | 迁移过快抢占在线流量 |
| 路由层 | 把请求定向到分片所在节点 | 路由表更新滞后,请求打到错误节点 |
| 跨片查询 | 聚合多个分片的结果 | 无索引支撑时退化为全分片扫描 |
分片设计要点
分片设计要点
# 1 分片键要覆盖绝大多数查询:按用户分片时,按用户查询最高效
# 2 避免单调递增键直接取模:写入集中在尾部,形成结构性热点
# 3 分片数预留增长:从 8 扩到 16 时若不能平滑迁移,需停写窗口
# 4 副本反亲和:同一分片的副本分布到不同节点与不同可用区
# 5 迁移限速:再平衡期间限制带宽与数据量,避免影响在线请求
# 6 观测:分片数据量均衡度、热点分片 QPS 与跨片查询占比无共享并不排斥共享的外部服务:配置中心、对象存储、注册中心可以共用,但要评估它们的容量与故障影响,避免它们成为新的单点瓶颈。
分片键一旦上线就很难更改:它同时决定数据分布、查询路由与扩容方式,选型阶段应把未来三年的主要查询模式一起考虑进去。