销项域系统重构方案 · v1.0
基于 ontoos-probe + ontoos-code-probe 实证

销项域系统重构方案

从 30 个微服务、7 套数据库、6 种消息中间件的扁平胶水系统,演进为领域内聚、数据收敛、消息可见、配置可管、部署可溯的现代化域系统。

调研时间 2026-09-11 调研范围 销项发票(seller / 销售方开票)全栈 数据源 研发本体湖仓 fat_ods_current / fat_dws / fat_dwd + 三服务源码检出 证据数 9 份 evidence/ 文件 + 三服务 worktree
01 · METHODOLOGY

调研方法学

所有结论附数据来源——SQL 查询、worktree file:line、证据文件可复核。

5+
GitLab Groups
phoenix-seller 36 / lmt-seller 9 / phoenix-seller-fe 9
245
K8s Workloads
17 个 namespace,含 108 个无 gitProjectId 标签
30
Apollo Apps
销项产品线 19 / 进项产品线 11(错位 6 个)
294
Portal Menus
77 微应用 × 24 system
3
源码检出的服务
bill-engine / phoenix-seller-invoice / athena-elastic-consumer
02 · INVENTORY

核心服务清单

按业务重要度排序,覆盖开单 → 开票 → 红字 → 配置 → 运维全链路。

服务代码仓当前生产 commit角色 / 备注
phoenix-seller-invoicephoenix-seller-invoicec4d0af8a销项发票主服务 · 2386 文件 / 57 Controller / 32 Feign
bill-enginebill-engine728caf19 (prod) / f73dd85 (fat)拆单/合并规则引擎 · 5 Controller / 0 Feign
source-bill-servicesource-bill-service70634d59源业务单数据
athena-elastic-consumerathena-elastic-consumer3e2df25f通用 Kafka 消费框架 · 1 码 9 用
phoenix-casm-servicephoenix-seller-fe客商服务 · 依赖度 #2(130 调用方)
phoenix-seller-configphoenix-seller-config配置中心 · 依赖度 #1(156 调用方)
phoenix-zhuque-servicephoenix-zhuque-service销项业务配置(奥特曼)· Apollo 唯一「销项产品线」
phoenix-red-notificationphoenix-red-notification红字信息服务 · 7 schema 跨 3 种 DB 引擎
phoenix-xrmq-routerphoenix-xrmq-routerRMQ 路由
phoenix-smart-match-invoicephoenix-smart-match-invoice智能匹配
phoenix-customer-self-opsphoenix-customer-self-ops自助运维
phoenix-script-invoicephoenix-script-invoice脚本开票
phoenix-dolphin-servicephoenix-dolphin-service运维提效
phoenix-bill (legacy)122-yango-local-prod老门户业务单 · 已废弃但未下线

⚠ 部署溯源关键告警

bill-engine 部署 release-20260818 分支,但构建 ref = release/20260915BRANCH-DIVERGED。fat 部署 commit f73dd85b 比 prod 728caf19e508 还老,但 HEAD 已到 7f7bd11 — fat 既不是 prod 的预演,也不跟随 prod 演进。108 个核心生产 workload 缺 gitProjectId 标签,match_quality='none',核心销项服务无法精准溯源。

03 · PAIN POINTS

13 大痛点分布

资产盘点 / 业务代码 / 可观测治理 三大象限,气泡大小代表影响范围。

代码异味(高) 代码异味(低) 影响面(小) 影响面(大) 资产盘点 业务代码 可观测 治理 DB / Apollo / 标签 单体 / Feign / 1码多用 MQ / 配置漂移 灾备 / Runbook A1 DB 7 套 A2 108 无标签 A3 A4 A5 B2 2386 文件 B1 规则爆炸 B3 B4 1 码 9 用 C1 2278 黑洞 C2 4921 空地址 C3 C4 214 未纳管 高严重(>1000 影响) 中严重 待评估
A1数据库过度分片

sellerinvoice schema 7 套 DB / 3 引擎;bill/rednotification 同样 3 引擎

evidence/06_dms_dbs.csv

A2108 workload 无 GitLab 标签

核心生产 pod 缺 gitProjectId,match_quality=none,溯源靠 tag 还原

dws.workload_active

A3fat / prod commit 分叉

fat 部署 commit 比 prod 还老,HEAD 进一步演进 — fat 不是预演环境

code-probe: 728caf19 vs f73dd85

A4Apollo / 仓 / workload 三错位

phoenix-bill-service Apollo 注册了但 K8s 找不到该 deployment

evidence/03 + workload_active

A5前端仓过渡期未完成

xf-v4-phoenix-web 与 phoenix-seller-fe 并存;product_line 全部 NULL

portal_micro_apps

B1bill-engine 规则爆炸

20+ commit 全是规则扩展,无架构级 refactor

code-probe: git log -20

B2phoenix-seller-invoice 单体

2386 文件 / 57 Controller(其中 3 个 mock 进生产)/ 32 Feign

code-probe: scan RestController

B3Feign 大小写混杂

PHOENIX-BILL-SERVICE vs phoenix-bill-service vs MsPhoenixBillApi 常量

code-probe: scan FeignClient

B4athena-elastic-consumer 1 码 9 用

9 个 deployment 同一镜像;topic 全部 Apollo 注入

code-probe: KafkaListener topics

C1MQ 发送可见性黑洞

2278 个发送点 invisible-dynamic,6 种 MQ 并存

evidence/08_mq_send_visibility.csv

C2MQ 通道地址空

channel_address NULL 数:xplat-sqs 2941 / rabbitmq 2495 / send 1981+859

v_all_mq_operations

C3依赖闭包扁平深度大

4 个枢纽服务被 50+ 调用方依赖;存在双向循环

evidence/04_feign_calls.csv

C4214 app_id 未纳管

代码声明的 app_id 未在 Apollo 注册

wt_code_appid_not_in_apollo

04 · BEFORE & AFTER

重构前后对比

4 个核心维度,每条都是「3 阶段 9 个月」可量化的目标。

BEFORE · 当前

2026-09-11 调研快照
DB 实例数(sellerinvoice)
7
MQ 种类
6 种
phoenix-seller-invoice 文件数
2,386
invisible-dynamic 黑洞
2,278
无 gitProjectId 标签 workload
108
Apollo app_id ↔ workload 失配
6 孤儿

AFTER · 目标

Phase 3 验收 (Month 9)
DB 实例数(生产 + 灾备)
2
MQ 种类(rocketmq + kafka)
2 种
单服务最大文件数
≤ 500
invisible-dynamic 黑洞
0
无 gitProjectId 标签 workload
≤ 5%
Apollo app_id ↔ workload 命中率
≥ 95%
05 · ROADMAP

10 大工程任务 · 3 阶段 9 个月

按 ROI 排序:T1 标签补全(1 周)→ T3 数据分片收敛(6 周,最大)→ T5 单体拆分(8 周,最大)→ T6 MQ 收敛(4 周)。

PHASE 1 · 治理地基 (M1-3) PHASE 2 · 领域拆分 (M4-6) PHASE 3 · 可观测 + 灾备 (M7-9) M1 M2 M3 M4 M5 M6 M7 M8 M9 M10+ T1 · K8s 标签补全 1W T2 · Apollo 对齐 2W T3 · 数据分片收敛 6W · 最大 T4 · bill-engine 拆分 4W T5 · invoice 4 bounded context 8W · 最大 T6 · MQ 6→2 收敛 4W T7 · athena-elastic 服务化 3W T8 · Feign 命名规范化 2W T9 · insitu 全覆盖 M6-9 持续 T10 · 灾备 + Runbook M7-9 持续 M3 · 地基完工 M6 · 拆分完工 M9 · 验收 今日 M0
06 · ACCEPTANCE

验收标准

10 个量化指标 + 数据来源;任何一项不达标即 Phase 3 不收尾。

#维度验收指标数据来源当前目标
1资产盘点K8s workload gitlab_matched=true 命中率dws.workload_active~50%≥ 95%
2Apollo 对齐Apollo app_id ↔ K8s workload 命中率自建 ETL~73%≥ 95%
3数据分片sellerinvoice 跨引擎数ods_current.dms_databases3≤ 2
4领域拆分单服务文件数 / 单服务 Controller 数code-extract2386 / 57≤ 500 / ≤ 15
5MQ 收敛MQ 种类 / invisible-dynamicv_mq_send_visibility6 / 22782 / 0
6命名规范Feign 客户端 Apollo 引用率新视图 v_feign_name_consistency~60%≥ 95%
7可观测in-situ 覆盖率dws.v_insitu_*65%≥ 85%
8部署可溯BRANCH-DIVERGED workload 数dws.workload_active≥ 10
9配置纳管214 个未注册 app_idwt_code_appid_not_in_apollo2140
10灾备7 类治理问题(影子库/血缘/MQ 等)治理周报7 类全有全部 ≤ 阈值
07 · RISK

关键风险与缓解

风险缓解措施
数据迁移期间双写不一致T3 用 v_insitu_verified_diff 视图 7×24 比对,差异 > 0.1% 自动告警
invoice 拆库拆服务时回归测试不全T5 灰度发布(先拆 1 个 context 试运行 4 周)
消息中间件迁移期间消息丢失/重复T6 用 RocketMQ 事务消息 + 幂等表 + 数据校验任务三重保险
旧库下线被业务遗忘T3 给每个旧库建下线 checklist + 6 个月观察期
团队学习曲线每个任务开 1 周培训 + 配 on-call
08 · EVIDENCE

证据索引

所有结论可在 evidence/ 目录用对应 SQL 重跑复核。

文件行数内容
evidence/01_gitlab_groups.csv16销项相关 GitLab group 汇总
evidence/02_workloads.csv245K8s 部署(namespace/workload/gitlab_project_path/sha)
evidence/03_apollo_apps.csv3230 个 Apollo app_id 含 org 归属
evidence/04_feign_calls.csv60+Feign 调用方 → 被调方关系
evidence/05_mybatis_tables.csv80+mybatis 表引用频次
evidence/06_dms_dbs.csv30销项相关 DB 实例分布
evidence/07_mq_channels.csv40+销项 MQ 通道
evidence/08_mq_send_visibility.csv15六态发送可见性
evidence/09_source_facts.md三服务源码事实(worktree file:line)
refactor-plan.md完整方案文档(Markdown)