← 返回官网架构演进之路 · ARCHITECTURE EVOLUTION · 05/10
04 · 多级缓存06 · CDN 与反向代理
阶段 05 · 扩容

数据库读写分离分库分表架构白皮书

数据库的最后一搏到真正扩容:先读扩展,再写水平切分,分片键选对成功一半。

05 / 10阅读 ≈ 13 分钟适用:单表 > 2,000 万行 · 写 QPS > 200 · 数据量 > 200GB骏瑞轩集团 · 云与数字科技

§ 00概述

缓存挡住了读,数据库的下一个瓶颈必然是写与容量。解法分两步走:先用读写分离做读扩展(成本低、几乎无侵入),写压力或单表容量真正触顶时,再做分库分表(收益大、不可逆,必须想清楚再动手)。

本章的数据集围绕三个决策展开:什么时候只做读写分离就够、分片键怎么选、存量数据怎么迁。分库分表是全系列不可逆程度最高的动作,本章的价值在于让你只在真正必要时才做它,并且一次做对。

§ 01演进定位

读写分离是数据库的读扩展:一主多从,写走主库、读走从库,配合 04 章缓存几乎覆盖绝大多数读场景。成本只有主库的 50%-100%/实例,且云托管只读实例自动同步、故障自动摘除。

分库分表是写与容量的水平扩展:把单库单表按分片键拆到多个物理库表,写容量与数据容量随分片数线性增长。它同时带走三样东西:跨分片事务的复杂性、跨分片查询的代价、以及运维工具链的整体升级。

决策顺序因此是刚性很强的三段论:读问题 → 缓存 + 只读实例;容量预警但写未触顶 → 提前做分库(不动表结构);写真触顶 → 分库分表一次到位。跳步直接分表的项目,一半在一年内又重构了一次。

§ 02技术架构

读写分离:主库 + 1-2 只读实例,应用侧路由(中间件或数据源封装)按语句类型分流;复制延迟要求 < 500ms,对延迟敏感的「写后立读」走主库强制路由。

分库分表:分片键的选择是唯一重要的事——订单类用用户维度(同一用户数据落同片,买家查询免跨片),日志类用时间维度(冷热分离天然归档)。原则:让最高频的查询模式在单分片内闭合。

中间件选型:Java 生态优先 ShardingSphere(社区成熟、功能全),或使用云厂商分布式数据库(TDSQL 等)托管分片。跨分片事务默认最终一致:本地消息表或事务消息,慎用强一致分布式事务。存量迁移走「双写 + 全量校验 + 灰度切读 + 切写」,与 02 章迁移同构但多一个分片路由维度。

§ 03实施路径

第一阶段(1 周)读写分离:只读实例选购、复制延迟基线测量、读路由改造与「写后立读」主库强制路由清单、按接口灰度切读。

第二阶段(2-3 周)分片设计:分片键评审(用真实 Top 查询验证)、分片数预留(按 3 年数据量 × 2 余量)、路由中间件接入与影子库验证。

第三阶段(2-3 周)存量迁移:全量迁移 + 增量同步、行数与内容双校验、灰度切读 10%→50%→100%、切写与回退预案、旧库只读保留 4 周。总周期 5-7 周,是全系列最长的实施。

§ 04客户价值与适用判断

只做读写分离就够:单表千万级以内、写 QPS < 200。此时分库分表的复杂度远大于收益,不要动。

该分库分表:单表 > 2,000-5,000 万行且仍高速增长、写 QPS 持续 > 200-500、或单库容量/备份窗口已不可管理。

换道提醒:如果拆分动机来自「检索模式与关系模型不匹配」(复杂多维查询、全文检索),正确答案可能不是分表而是 07 章搜索引擎/NoSQL——先确认问题,再选工具。

§ D01组件与选型清单

DATA读写分离与分库分表 · 标准组件栈读扩展 → 写扩展
层级组件选型建议职责与要点
主库云数据库 CDB 高可用4C8G 起按写压力升配只承担写与强一致读,容量预留 50%
只读实例CDB 只读 × 1-2规格 = 主库 50-100%自动同步复制,延迟 < 500ms,故障摘除
读路由数据源中间件语句级读写分流写后立读白名单强制走主库
分片中间件ShardingSphere / 云分布式库按团队技术栈分片路由、读写分离、分布式 ID 一体化
分布式 ID雪花算法 / 号段模式趋势递增跨分片全局唯一,避免自增键冲突
数据同步DTS / binlog 订阅全量 + 增量迁移管道与校验报告,切换期间不中断
冷备归档COS 归档存储按月归档历史数据冷热分离,缩小在线库体量

分片数一次给足(如 8 或 16 片):扩分片需要二次迁移,缩分片几乎没人做——宁可初期略浪费。

§ D02成本测算数据集

DATA成本测算示例(读写分离起步 + 分片预留 · 月度)月度 · CNY
项目规格月成本说明
主库高可用 4C8G≈ ¥660写主库,升配是常态路径
只读实例 × 14C4G≈ ¥300读扩展第一步
分片中间件ShardingSphere 自托管≈ ¥80随应用部署,无独立实例
DTS 同步迁移期增量同步≈ ¥150迁移窗口 4-6 周,按量计费
归档存储COS 归档 200GB≈ ¥15冷数据月度归档
月均合计 ≈ ¥1,205 · 较 04 章 +≈ ¥400

全量分库分表(如 8 分片)数据库成本通常再翻 2-3 倍——这正是「能不做就不做」的经济理由。

§ D03关键指标基准

DATA可用性与体验基线SLO 参考
指标04 章基线本阶段目标行业良好
主从复制延迟—< 500ms< 100ms
单表容量> 2,000 万行增长中每片 < 1,000 万行每片 < 500 万行
写 QPS 承载≈ 200≈ 200 × 分片数弹性扩展
慢查询占比未系统治理< 0.5%< 0.1%
迁移数据不一致率—0(校验通过为准)0

复制延迟监控必须建大盘:延迟突增往往先于主库故障出现。

§ D04演进触发信号

DATA什么时候必须走向下一阶段任一命中即评估
触发信号判定阈值演进方向
复制延迟常态超标只读实例延迟 > 2s 频发读写分离架构升级或分片(本章)
备份窗口失控全量备份 > 4 小时分库分表 + 冷热归档(本章)
DDL 变更锁表加字段分钟级且影响业务分表缩小单表体量(本章)
服务边界混乱一个库被 5+ 应用直连业务拆分与数据归属(08)
检索模式错位多维组合查询大量出现搜索引擎与 NoSQL(07)

§ D05上线检查清单

分片键评审用生产 Top 20 真实查询验证,高频查询必须在单分片闭合
分布式 ID 就位全局唯一且趋势递增,替换全部自增主键依赖
跨分片事务清单列出所有跨片写场景,逐一给出最终一致方案
双校验通过行数校验 + 抽样内容校验 + 业务对账,三方一致才切流
灰度切流读 10%→50%→100% 观察 ≥ 3 天,写切换安排低峰并冻结发布
回退预案旧库只读保留 4 周,回切演练至少一次

§ D06高频翻车点

分片键选错按订单 ID 而非用户 ID 分片,买家查询全表扇出,性能反而劣化
自增主键直迁多分片自增冲突,迁移到一半返工
跨分片 JOIN 成灾把单库 JOIN 习惯带进分片世界,查询扇出拖垮全部节点
只读实例当灾备只读实例不承担高可用切换职责,主库故障要靠主备热备
一次分片太保守4 片起步一年后重建路由,分片数宁多勿少

§ D07常见问答

DATA读写分离与分库分表 · 问答数据集4 组
问题答案
什么时候必须分库分表?三个硬信号:单表 > 2,000-5,000 万行仍高速增长、写 QPS 持续超过主库上限、备份/DDL 窗口不可管理。满足其一先做预研,满足两条再动手。
分片键选用户 ID 还是订单 ID?跟随最高频查询:C 端业务用户维度查询占绝对多数,选用户 ID;平台侧运营查询走异构索引(07 章)解决,不要为了少数查询牺牲多数查询。
分库分表后还能改回去吗?几乎不能。路由中间件、分布式 ID、跨片查询改造会渗透全部数据访问代码。这也是我们坚持「三段论决策顺序」的原因——先确认写真触顶。
和云分布式数据库怎么选?团队有中间件运维能力且需要灵活选型,用 ShardingSphere 自托管;希望分片能力托管化、免运维路由层,直接用云分布式数据库(TDSQL 类)。后者成本高但踩坑少。

§ D8角色分工数据集

DATA角色分工数据集本阶段人员配置
角色核心职责投入度备注
DBA(主导)分片设计 · 迁移 · 校验 · 回退100%本项目唯一主角
后端 × 2中间件接入 · SQL 治理 · 分布式 ID80%数据访问层改造
测试双校验 · 回归 · 影子库验证60%迁移期全职
业务切流窗口与观察确认10%观察期反馈通道

§ D9风险登记册

DATA风险登记册概率 × 影响
风险概率影响缓解措施
分片键选错导致查询扇出中致命生产 Top20 查询评审先行,一票否决
自增主键冲突高严重分布式 ID 全量替换后再迁移
跨分片事务失控中严重跨片写场景清单化,逐条最终一致方案
迁移期长事务/DDL 干扰中中迁移窗口冻结 DDL 与批处理

§ D10监控告警清单

DATA监控告警清单阈值即责任
监控对象指标告警阈值响应动作
主从复制延迟> 2 秒电话 · 大事务与规格排查
分片均衡最大-最小行数差> 30%工单 · 分片键复查
单表行数逼近分片阈值> 80% 阈值工单 · 扩容预研
慢查询占比> 1%工单 · SQL 治理专项
数据对账差异数> 0电话 · 定向回补

§ D11工具链选型

DATA工具链选型分片专项
环节推荐备选选择理由
分片路由ShardingSphere云分布式数据库技术栈匹配优先,托管换省心
分布式 ID雪花算法封装号段模式趋势递增 + 无中心依赖
数据同步DTS + 校验脚本Canal 自建管道托管管道少踩坑
影子验证影子库 + 流量回放双写比对切流前真实流量预演

§ D12实施时间线

DATA实施时间线周为单位
周次里程碑责任角色出口物
W1读写分离上线DBA + 后端只读实例切读 · 写后立读清单
W2-3分片设计与中间件DBA + 后端分片键评审签认 · 影子库验证
W4-5存量迁移DBA + 测试全量+增量 · 双校验通过
W6-7灰度切流全员读 10/50/100% · 写切换完成

§ D13SLA 与容灾基线

DATASLA 与容灾基线对内承诺
指标基线承诺度量方式未达标处置
复制延迟< 500ms延迟监控大盘只读实例规格升级
写 QPS 承载线性于分片数压测报告扩分片预研启动
迁移一致性0 差异双校验报告未通过不切流
回退能力< 1 小时可回切回退演练旧库保留期延长

§ D14应急预案

DATA应急预案一页纸预案
故障场景典型现象处置步骤升级路径
主库故障写入中断① 主备切换确认 ② 复制拓扑修复 ③ 写入验证10 分钟未恢复 → 云工单 P1
只读实例延迟放大读到旧数据① 读路由降级主库 ② 修复延迟 ③ 追平恢复核心接口受累 → 立即处置
分片路由故障部分数据不可访问① 中间件降级直连 ② 修复路由 ③ 数据完整性核对疑似数据错位 → 停写排查
切流后发现不一致对账报警① 冻结增量 ② 定向回补 ③ 根因修复后再放量资损类 → 立即回切旧库

§ D15首年成本明细

DATA首年成本明细CNY
项目月成本年成本备注
主库升配 4C8G 高可用≈ ¥660≈ ¥7,920写主库
只读实例 4C4G≈ ¥300≈ ¥3,600读扩展
DTS 迁移窗口≈ ¥150≈ ¥900按 6 周窗口折算
归档存储≈ ¥15≈ ¥180冷数据月归

首年增量 ≈ ¥12,600。全量分片(8 片)成本再翻 2-3 倍——按触发信号决策,不为架构美感买单。

§ D16团队能力要求

DATA团队能力要求按需补齐
能力项要求级别如何补齐
分库分表设计必须分片键评审实战 + 外部评审一次
数据迁移工程必须双校验迁移完整跟做一次
SQL 治理必须慢查询治理专项
分布式 ID 与事务建议跨片写场景清单演练

§ D17关键决策速查(ADR)

DATA关键决策速查(ADR)本阶段 4 个决策
决策备选方案结论理由
第一步直接分表 vs 先读写分离先分离:读扩展性价比优先
分片中间件ShardingSphere vs 云分布式库按团队运维能力定
分片键订单 ID vs 用户 ID用户维度:最高频查询闭合
分片数4 片 vs 8 片8 片:宁可初期浪费不二次迁移

§ D18高频面试题

DATA高频面试题本阶段 4 题
问题考察点优秀回答特征
分片键怎么选?数据架构Top 查询分布论证 + 反例说明
跨分片事务怎么办?一致性设计清单化 + 最终一致 + 对账补偿
分布式 ID 为什么必须?基础功底自增冲突 + 趋势递增两个理由
什么时候不做分库分表?演进判断三段论:读写分离→分库→分表

§ D19命令与操作速查

DATA命令与操作速查分片专项
场景命令/操作说明
路由验证中间件 explain SQL确认 SQL 落在预期分片
延迟监控SHOW SLAVE STATUS双实例分别看
行数分布各分片 count 汇总均衡度周检
对账差异差异工单系统挂起-回补-复核闭环

§ D20采购与商务要点

DATA采购与商务要点本阶段采购项
采购项询价要点商务注意
只读实例复制方式与延迟 SLA规格 = 主库 50-100%
DTS 长周期任务按量上限与断点续传迁移完成及时释放
归档存储取回价格与时长仲裁数据取回频率评估

§ D21阶段 KPI 卡

DATA阶段 KPI 卡验收口径
KPI口径目标
复制延迟大盘监控< 500ms
单表容量每片行数< 1,000 万
迁移差异对账结果0
慢查询占比慢日志统计< 0.5%

§ D22交接清单

DATA交接清单换人不换知识
交接项载体验收
分片路由配置配置中心explain 验证文档
跨片事务清单Wiki每条有补偿方案
迁移校验报告归档双校验证据可查
回切手册Wiki旧库保留期与步骤明确

§ D23演进检查点评审

DATA演进检查点评审走向 06 章前
检查项达标标准结果
分片键评审生产 Top 查询验证签认通过/不通过
迁移双校验行数+抽样差异为 0通过/不通过
跨片事务清单每条有最终一致方案通过/不通过
回切演练旧库回切演练成功通过/不通过

§ →继续演进