← 返回官网架构演进之路 · ARCHITECTURE EVOLUTION · 08/10
07 · 搜索引擎与 NoSQL09 · 微服务架构
阶段 08 · 分域

业务拆分分布式架构白皮书

按业务域切开单体:组织并行度的解放,从「一个仓库一个数据库」到边界清晰的分布式。

08 / 10阅读 ≈ 13 分钟适用:团队 > 10 人 · 多业务线 · 单体迭代互相卡脖子骏瑞轩集团 · 云与数字科技

§ 00概述

前七章都在扩「容量」,本章开始扩「组织」。当多个团队在同一个代码库、同一个数据库上开发,互相的合并冲突、发布排队、故障连带,会让迭代速度随团队人数反比例下降。解法是按业务域拆分:把单体切成边界清晰的服务群,每个域独立开发、独立部署、独立持有自己的数据。

业务拆分的本质不是技术重构而是组织与责任的重新划分——技术只是把组织边界固化下来。本章数据集给出领域划分方法、数据归属原则、服务间通信与最终一致性的完整工具箱,以及「什么时候不该拆」的清醒剂。

§ 01演进定位

拆分的时机信号从来不是性能,而是组织摩擦:两个团队因为同一张表的结构变更反复扯皮、发布排队排到下周、一次故障波及全部业务线。命中两条以上,拆分的组织收益已经覆盖技术成本。

拆分遵循「先垂直后水平」:第一刀按业务域垂直切(用户域、商品域、交易域),每个域内部仍是清晰的单体;先拥有独立数据库与独立部署能力,再谈域内继续细分。一上来就拆成几十个微服务是本章最大的反模式。

数据归属是拆分真正的难点:每个服务独占自己的数据库,别人只能通过接口或订阅事件拿数据。这一原则执行得越彻底,后续微服务化(09 章)越顺;执行不彻底,拆了也是「分布式单体」。

§ 02技术架构

领域划分:以业务能力为界(参考领域驱动设计的限界上下文),而非以技术分层为界。一个快速的验证法:如果某个功能变更总是同时牵动两个团队,它们大概率属于同一个域;如果某两张表总是被一起修改,它们不该被拆开。

服务通信:域间同步调用走 RPC/HTTP(查询类),域间状态传播走事件(Kafka),这是解耦的关键——下游订阅事件构建自己的读模型,而不是反过来调上游接口拼数据。

最终一致:跨域写场景放弃分布式事务,改用本地消息表 + 事件 + 幂等消费 + 对账补偿。为每个跨域流程写清楚「中间态对用户是什么样子」(如「订单已提交,库存确认中」),一致性不是黑与白,是用户体验设计。

§ 03实施路径

第一阶段(1-2 周)领域地图:梳理业务能力清单与数据表归属矩阵,圈出「变更共振」的功能簇,产出拆分方案并评审——这一步值 50% 的工作量。

第二阶段(2-4 周)第一刀:选择耦合最弱、团队最痛的域先行(通常从「营销/内容」这类边缘域开始,绝不从交易域开始),代码与数据一起走:库表随服务迁移,禁止跨域直连数据库。

第三阶段(持续)逐域推进:每个域一个节奏(迁移-稳定-复盘),配合 07 章的数据管道把跨域读模型建起来。整个拆分是季度级工程,按域滚动而非大爆炸。

§ 04客户价值与适用判断

该拆:多团队并行冲突常态化、发布互相排队、故障域互相牵连。三个信号齐了,拆分就是生产力投资。

不该拆:团队 < 10 人、业务边界还在剧烈变化(产品方向未定)。此时拆分锁死的边界很快会过时,维护成本反噬收益。

成本提醒:拆分后基础设施与服务治理成本显著上升(监控、链路、测试、运维面翻倍),这也是为什么治理体系(09 章)与容器化(10 章)通常紧随其后。

§ D01组件与选型清单

DATA业务拆分与服务化 · 标准组件栈垂直拆分起步
层级组件选型建议职责与要点
服务边界业务域(限界上下文)3-5 个域起步用户/商品/交易/营销/内容,按变更共振划界
服务持有数据每域独立数据库禁止跨域直连数据归属是拆分成败的第一判据
同步通信RPC / REST查询类调用超时、重试、熔断默认值全局统一
事件通道Kafka按域分 Topic状态变更事件化,下游自建读模型
最终一致本地消息表 + 对账幂等消费每个跨域流程定义中间态的用户体验
API 门面BFF / 聚合层面向端聚合前端一次请求拿齐,避免扇出放大
调用观测调用链标记traceId 贯穿为 09 章全链路追踪预埋规范

拆分顺序铁律:先拆边缘域(内容、营销、日志),最后拆交易域——交易域的正确拆法通常是 09 章微服务化。

§ D02成本测算数据集

DATA成本测算示例(三域拆分增量 · 月度)月度 · CNY
项目规格月成本说明
新域实例4C8G × 3(每域 1-2 节点)≈ ¥780从共享集群独立出来
新域数据库2C4G × 3≈ ¥990数据归属独立化的直接成本
Kafka3 分区 → 6 分区≈ ¥100事件通道扩容
BFF 聚合层2C4G × 2≈ ¥260面向端的聚合门面
监控增强按服务维度≈ ¥50服务级看板与告警
增量合计 ≈ ¥2,180/月 · 换取多团队发布互不排队

拆分的最大成本其实在人力:迁移期的双倍维护与回归测试。组织收益若不能覆盖,宁缓勿急。

§ D03关键指标基准

DATA可用性与体验基线SLO 参考
指标单体基线本阶段目标行业良好
跨团队发布冲突每周 2-3 次≈ 0(域内自治)0 + 独立流水线
单域故障爆炸半径全站限制在单域熔断隔离自动生效
域内数据库独立率0%100%100% + 事件化读模型
跨域调用 P99—< 300ms< 100ms
对账差异修复时长—< 1 工作日自动补偿 < 10 分钟

§ D04演进触发信号

DATA什么时候必须走向下一阶段任一命中即评估
触发信号判定阈值演进方向
服务数量治理失序手工管理 > 10 个服务微服务治理(09)
部署脚本互异每个服务一套部署法容器化统一交付(10)
链路排障靠猜跨域问题定位 > 2 小时链路追踪体系(09)
配置散落配置文件散在各服务器配置中心(09)
环境漂移测试与生产行为不一致容器化环境一致(10)

§ D05上线检查清单

领域地图评审业务能力清单 + 数据归属矩阵 + 变更共振分析,三方评审签字
第一刀选边缘域迁移对象是耦合最弱、痛感最强的域,不是最核心的域
数据随服务走库表归属与代码同步迁移,跨域直连数据库从第一天就禁止
事件契约成文Topic、Schema、幂等语义、保留期写入文档并版本化
中间态体验设计每个跨域流程明确定义「确认中/部分成功」的用户呈现
对账任务上线跨域数据的对账与自动补偿先于切流部署

§ D06高频翻车点

按技术分层拆拆成「接口服务/逻辑服务/数据服务」,每次需求穿三层,等于没拆
分布式单体服务拆了、数据库共享、发布还要一起排——拆分的成本全付,收益全无
大爆炸迁移一次性切换全部业务域,故障时无从回退;必须按域滚动
事件无契约Topic 结构随意变更,下游消费批量崩溃,事件 Schema 必须版本化
忽略组织配套拆了服务没拆责任,出故障还在「拉群等定位」,边界形同虚设

§ D07常见问答

DATA业务拆分与服务化 · 问答数据集4 组
问题答案
微服务和业务拆分什么关系?业务拆分是「按域垂直切开」(本章),微服务是「域内服务治理的完备体系」(09 章)。顺序通常是先垂直拆出 3-5 个域,再在域内微服务化。
拆分后数据不一致怎么办?接受最终一致并设计中间态:本地消息表保证事件不丢、幂等消费保证不重、对账补偿兜底。把「确认中」的体验设计好,用户对秒级延迟毫无感知。
从哪个域开始拆?变更共振高 + 耦合度低 + 非交易链路的域。营销、内容、日志类是经典首选;交易域留到最后,且往往以 09 章的方式处理。
拆多少个域合适?初期 3-5 个。域的数量应该约等于能独立负责它的团队数量——一个团队维护三个域会疲于奔命,三个团队共享一个域会打架。

§ D8角色分工数据集

DATA角色分工数据集本阶段人员配置
角色核心职责投入度备注
架构师领域地图 · 边界裁决 · 拆分方案60%组织级决策参与者
各域负责人域内交付 · 数据归属 · 契约维护100%责任到域
平台组事件通道 · 对账任务 · 调用规范50%跨域基础设施
PMO拆分节奏 · 回归协调 · 复盘30%滚动式推进

§ D9风险登记册

DATA风险登记册概率 × 影响
风险概率影响缓解措施
拆成分布式单体中致命数据归属独立一票否决,跨域直连库即违规
事件契约被上游随意变更中严重Schema 版本化 + 兼容期 + 契约测试
最终一致的中间态伤害体验中中中间态体验设计前置到方案评审
大爆炸式切换中致命按域滚动,单域可独立回退

§ D10监控告警清单

DATA监控告警清单阈值即责任
监控对象指标告警阈值响应动作
跨域调用P99 延迟> 500ms工单 · 慢调用链分析
事件通道消费积压> 阈值短信 · 消费扩容
数据一致性对账差异> 0电话 · 补偿任务
发布秩序跨域发布冲突≥ 2 次/月复盘 · 边界再裁决
域内错误率> 1%短信域负责人响应

§ D11工具链选型

DATA工具链选型拆分专项
环节推荐备选选择理由
事件通道Kafka 按域 TopicRocketMQ事务消息与回放双需求
域间调用RPC 框架(团队栈)REST强契约 + 低开销
契约管理Schema 仓库 + 兼容检查口口相传(禁止)契约测试入 CI
对账补偿本地消息表 + 定时对账纯重试消息不丢是底线

§ D12实施时间线

DATA实施时间线域为节奏
阶段里程碑责任角色出口物
P1领域地图与方案评审架构师 + 各域归属矩阵 + 拆分方案签认
P2首个边缘域迁移该域团队数据随服务走 · 独立部署生效
P3事件化读模型平台组跨域读不再扇出调用
P4逐域滚动全员每域一份迁移复盘

§ D13SLA 与容灾基线

DATASLA 与容灾基线对内承诺
指标基线承诺度量方式未达标处置
域内可用性99.9%域看板域内冗余补齐
跨域调用成功率> 99.5%调用链统计超时重试与熔断核查
事件送达最终一致 < 5 分钟事件延迟监控消费能力扩容
域数据独立率100%架构巡检违规直连即整改

§ D14应急预案

DATA应急预案一页纸预案
故障场景典型现象处置步骤升级路径
上游域故障传导多域连环报错① 熔断隔离 ② 下游降级读模型 ③ 根因域修复全站传导 → 架构师介入
事件丢失对账差异持续① 重放 Topic ② 补偿任务 ③ 幂等复核资损 → 业务 + 架构双升级
域数据库故障单域不可用① 域内主备切换 ② 上游熔断降级 ③ 数据核对交易域 → 最高级响应
契约破坏上线下游批量解析失败① 回滚发布 ② 兼容层热修 ③ 契约测试补齐跨域事故 → 双域负责人联席

§ D15首年成本明细

DATA首年成本明细CNY
项目月成本年成本备注
新域实例 4C8G × 3≈ ¥780≈ ¥9,360三域起步
新域数据库 2C4G × 3≈ ¥990≈ ¥11,880数据归属独立
Kafka 扩容≈ ¥100≈ ¥1,2006 分区
BFF 聚合层 × 2≈ ¥260≈ ¥3,120面向端聚合

首年增量 ≈ ¥25,560。最大成本其实在人力:迁移期双倍维护——组织收益必须算得过来。

§ D16团队能力要求

DATA团队能力要求按需补齐
能力项要求级别如何补齐
领域驱动设计必须领域地图工作坊 + 外部评审
事件驱动架构必须契约测试入 CI
最终一致设计必须对账补偿实战一次
跨团队协同建议PMO 节奏机制

§ D17关键决策速查(ADR)

DATA关键决策速查(ADR)本阶段 4 个决策
决策备选方案结论理由
第一刀选域核心交易域 vs 边缘域边缘域先行:耦合弱痛感强
拆分粒度微服务 vs 域内单体域内单体:先垂直后水平
数据归属共享库 vs 域独立库独立库:一票否决项
跨域通信直连 API vs 事件查询 RPC + 状态事件双轨

§ D18高频面试题

DATA高频面试题本阶段 4 题
问题考察点优秀回答特征
怎么判断两个功能属于同一域?领域建模变更共振/数据共振的判据
拆分后数据不一致怎么办?一致性设计中间态体验 + 对账补偿双管
为什么不从交易域开始拆?演进策略风险排序:先边缘后核心
分布式单体怎么识别?反模式意识数据库共享/发布互锁两个信号

§ D19命令与操作速查

DATA命令与操作速查协同专项
场景命令/操作说明
事件积压Kafka lag 监控消费能力预警
对账任务定时任务 + 差异工单挂起-补偿-复核
调用拓扑traceId 检索跨域问题定位
契约验证契约测试入 CI破坏性变更被拦截

§ D20采购与商务要点

DATA采购与商务要点本阶段采购项
采购项询价要点商务注意
新域资源独立实例 vs 共享集群切分共享组件避免重复采购
Kafka 扩容分区扩容对客户端影响滚动扩容方案
BFF 资源按端独立还是合一先合后拆,避免过早分化

§ D21阶段 KPI 卡

DATA阶段 KPI 卡验收口径
KPI口径目标
数据独立率架构巡检100%
跨域调用 P99链路统计< 300ms
发布冲突跨域冲突计数≈ 0
对账闭环差异处置时长< 1 工作日

§ D22交接清单

DATA交接清单换人不换知识
交接项载体验收
领域地图Wiki归属矩阵经三方评审
事件契约仓库GitSchema 版本化
对账任务清单调度系统差异处置有 SLA
拆分复盘记录归档每域一份

§ D23演进检查点评审

DATA演进检查点评审走向 09 章前
检查项达标标准结果
数据归属独立跨域直连数据库清零通过/不通过
事件契约版本化Schema 仓库 + 兼容测试通过/不通过
对账补偿上线差异自动挂起与处置通过/不通过
首域稳定运行首拆域稳定运行 ≥ 4 周通过/不通过

§ →继续演进