XMBSMDSJ

2026

< Back to index

拆分

拆分的目的是为了将单体架构服务拆分为分布式架构,例如服务化架构,或者微服务架构。通常,如果要拆分为微服务,会先过渡到服务化架构。

拆分有两种思路:基于组件(Component Based)或基于战术分叉(Tactical Forking)。

基于组件的拆分

基于组件的拆分把系统拆成高内聚、松耦合的组件。

它有多种模式,分别应对拆分中的不同问题。选定某种模式后,可用对应的 fitness function 约束后续实现,使之符合该模式。

模式 一句话概括 适应度函数
Identify and Size Components 识别现有组件并度量其规模(如代码行/类/函数数),计算标准差;对明显高于标准差的组件做进一步拆分 以(代码行/类/函数数量)的标准差为度量
Gather Common Domain Components 提炼公共域 1. 项目树叶子节点中的重复名称 2. 跨组件的重复代码量
Flatten Components 仅用叶子目录表示一个组件,使组件平铺、无嵌套。若组件内有嵌套目录:1)将子目录合并到父目录成一个大组件;2)在父目录下新建 shared 目录作为新组件,存放原共享代码 域的根目录只含子目录,不含代码
Determine Component Dependencies 分析组件依赖、评估拆分难度;shared 组件作为公共库而非服务时可排除 约束依赖方向,如禁止某包依赖某包
Create Component Domains 按域组织功能相关组件,为单体到服务化过渡做准备 业务代码须落在现有域内;新建域时告警
Create Domain Services 组件按上述模式组织后,可拆出领域服务,完成单体到服务化 领域服务的 namespace/package 须以该域名为前缀,如 ..ss.ticket..

战术分叉

战术分叉将源码 Fork 出多份,分给多个团队,根据各自业务对单体服务进行裁剪,最终得到特定领域的服务。