CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
构建可扩展系统/课时/分片策略
RawBlame
课时目录12 节

构建可扩展系统

  1. 01可扩展性是什么
  2. 02CAP 定理
  3. 03无状态服务
  4. 04缓存与读扩展
  5. 05分片策略
  6. 06数据复制
  7. 07N+1 查询问题
  8. 08负载均衡
  9. 09背压与限流
  10. 10负载转移
  11. 11读写分离
  12. 12综合练习

分片策略

范围/哈希分片、热点与再平衡。

35 分钟

分片策略

单库单表扛不住写入与存储时,需要 分片(Sharding):把数据按规则拆到多个物理节点。分片解决容量与写扩展,但带来跨片查询、热点与再平衡等新问题——building-for-scale 数据层的核心课题。

学习目标

  • 对比范围分片、哈希分片、目录分片的优缺点
  • 识别热点分片(Hot Shard)成因与缓解手段
  • 理解再平衡(Re-sharding)对业务的影响与迁移策略

核心概念

策略规则示例优点风险
范围分片user_id 1–1M → 片 A范围查询友好新用户挤在最后一片
哈希分片hash(user_id) % N分布均匀扩片需 rehash
目录分片映射表查片号灵活迁移映射表成单点
shard_key = user_id
shard_id  = hash(user_id) mod 16
          → 写入 db-shard-07

选片键(Shard Key)原则:

  1. 高基数、分布均匀(避免全站用户按 country=CN 一片)
  2. 与主要查询条件一致(按 user_id 查订单,片键含 user_id)
  3. 尽量避免跨片事务(用 Saga / 最终一致替代)

热点:大 V 用户、秒杀商品会让单片 QPS 爆表。缓解:片内再分、热点数据缓存、写队列串行化。

再平衡常用 双写 + 灰度切读 或 一致性哈希 减少迁移量。ORM 层分片见 orm-essentials;PostgreSQL 分区表见 postgresql-essentials。

练习

  • 为订单表选择 shard key,写出两条 SQL 是否需跨片
  • 估算从 8 片扩到 16 片时,至少多少数据行需要迁移
  • 讨论:全局自增 ID 在分片下如何生成(雪花算法 / DB 号段)

小结

分片让数据横向生长,但片键与再平衡设计错了,扩展会比不分片更痛。

加载本节练习…
← 上一课缓存与读扩展下一课 →
数据复制