Skip to content

Commit 0f58784

Browse files
author
lmj
committed
Add MVP criteria docs, operations guide and E2E test skeleton
1 parent bd30f89 commit 0f58784

7 files changed

Lines changed: 1014 additions & 4 deletions

File tree

docs/MVP_CRITERIA.md

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# DB-Syncer-Debezium MVP 标准(草稿)
2+
3+
> 目标:定义“首个可在受控生产环境中使用”的最小可行能力(MVP),用于评估当前实现是否具备上线条件,并指导后续迭代优先级。
4+
5+
最后更新:2025-11-18
6+
适用范围:本仓库(`cli/``metadata-service/``connectors/``transformations/``monitoring/``docker/` 等模块。
7+
8+
---
9+
10+
## 1. 功能闭环(Functionality)
11+
12+
**目标**:完整打通从源库到目标库的 CDC 迁移链路,在明确边界内稳定工作。
13+
14+
- [ ] **单向迁移链路打通**
15+
- CLI → Metadata Service → Kafka Connect → Debezium Source → Kafka → Transform → JDBC Sink → 目标数据库。
16+
- 验收:在本地 docker 环境中,完成一次 MySQL → PostgreSQL 的端到端同步(含初始快照 + 实时增量)。
17+
18+
- [ ] **支持场景明确且收敛**
19+
- 首个生产 MVP 仅支持:MySQL → PostgreSQL 单向迁移(单库/有限表数量),Oracle 标记为“未支持/实验性”。
20+
- 验收:README / 文档中清晰列出“支持/不支持/实验性”场景。
21+
22+
- [ ] **基础 Schema / 类型转换可用**
23+
- transformations 模块提供默认类型映射(包含常见整数、浮点、字符串、时间、JSON、Decimal 等)。
24+
- ApplyTypeMapping SMT 在生产链路中可选启用,行为稳定。
25+
- 验收:对常见类型组合(参见 `docs/MAPPING_REFERENCE.md`)的回归测试通过。
26+
27+
- [ ] **DDL 兼容与演进的基础策略**
28+
- 目标表不存在时能自动创建(或生成 DDL 供 DBA 审核执行)。
29+
- 目标表已存在时,支持“列新增/类型放宽”的基本演进(至少不因新增可空列导致任务整体失败)。
30+
- 验收:通过 CLI `transform ddl/schema` 命令 + 端到端测试覆盖典型 DDL 场景。
31+
32+
---
33+
34+
## 2. 一致性与容错(Reliability & Consistency)
35+
36+
**目标**:在受控故障与业务变动下,任务能合理处理错误、支持断点续传,确保数据在预期语义下最终一致。
37+
38+
- [ ] **任务生命周期管理健壮**
39+
- 支持 `start / pause / resume / stop`,并校验非法状态转换(例如重复 start)。
40+
- 状态变更在元数据库中持久化(如:PENDING、STARTING、RUNNING、PAUSED、STOPPED、FAILED 等)。
41+
- 验收:TaskExecutionService 单元/集成测试覆盖正常与异常状态流转。
42+
43+
- [ ] **进度跟踪与断点续传**
44+
- 任务级、表级进度持久化:当前 offset、已迁移行数、最近事件时间戳等(如 `migration_tasks` / `table_progress`)。
45+
- 在任务/服务重启后,可从最近一致位置恢复,不发生不可接受的数据丢失或重复。
46+
- 验收:端到端测试覆盖“进程重启后继续同步”的场景。
47+
48+
- [ ] **错误分类与重试策略**
49+
- 对典型错误进行分类:网络抖动、数据库暂时性不可用、权限问题、目标库约束冲突、Schema 不兼容等。
50+
- 对暂时性错误采用有限次数 + 指数退避重试,对永久性错误快速失败并标记任务为 FAILED。
51+
- 验收:针对不同错误类型的模拟测试(可使用 Testcontainers 或手工编排)行为符合预期。
52+
53+
- [ ] **大表 / 多表场景的基础策略**
54+
- 支持对大表的增量快照(Chunking)与限流,避免对源/目标库造成过大压力。
55+
- 支持多表迁移的并行度配置(任务级/连接器级),并在文档中给出推荐值。
56+
- 验收:在测试环境中,对包含大表和多表的库进行迁移演练,确认资源占用可控。
57+
58+
---
59+
60+
## 3. 可观测性(Observability)
61+
62+
**目标**:运维和开发人员能够实时了解任务状态、发现异常并定位问题。
63+
64+
- [ ] **Metrics 指标暴露**
65+
- 至少暴露以下 Prometheus 指标(按任务维度):
66+
- `dbsyncer_task_state`(任务状态)
67+
- `dbsyncer_task_processed_records_total`(已处理记录数)
68+
- `dbsyncer_task_failed_records_total`(失败记录数)
69+
- `dbsyncer_task_lag_seconds`(延迟)
70+
- `dbsyncer_task_last_event_timestamp`(最后事件时间)
71+
- 验收:在本地 docker 环境中,Prometheus 能抓取上述指标,Grafana 有基础看板。
72+
73+
- [ ] **日志与追踪信息完整**
74+
- 所有关键操作(Connector 创建/更新/删除、任务状态变化、严重错误)都有结构化日志。
75+
- 日志中统一包含 `taskId``connectorName`、source/target 标识,便于关联排查。
76+
- 验收:日志能够完整还原一次任务从创建到停止的生命周期。
77+
78+
- [ ] **告警机制(最小版本)**
79+
- 至少支持基于 Prometheus 规则或简单 Webhook 的告警机制:
80+
- 任务长时间处于 FAILED/ERROR 状态;
81+
- 任务 lag 超过阈值;
82+
- 关键服务(metadata-service、Kafka Connect)不可用。
83+
- 验收:在测试环境中模拟异常,能触发告警并被运维/开发接收。
84+
85+
---
86+
87+
## 4. 运维与操作性(Operability)
88+
89+
**目标**:生产环境下,迁移任务可被方便地配置、运行、停机和排障。
90+
91+
- [ ] **CLI 操作闭环**
92+
- CLI 支持完整的任务管理命令:`task create/list/show/start/stop/pause/resume/delete`
93+
- 提供 `status``monitor` 命令,用于查看任务状态和基础进度。
94+
- 验收:运维人员可以仅通过 CLI 完成一次任务的完整管理流程。
95+
96+
- [ ] **配置管理与环境隔离**
97+
- 支持 `.dbsyncer.yml` 配置文件 + 环境变量覆盖,便于 dev/stage/prod 环境切换。
98+
- 提供生产环境推荐配置示例(包括超时、重试、并行度、连接池大小等)。
99+
- 验收:使用不同配置文件能在多套环境中稳定运行同一版本二进制。
100+
101+
- [ ] **失败与回滚策略**
102+
- 明确一次迁移失败后的处理方式:
103+
- 是通过 truncate 目标表重新执行;
104+
- 还是手工清理不一致数据后重试。
105+
- 在文档中列出典型故障场景及推荐处理步骤。
106+
- 验收:故障演练中,运维人员可以按照文档完成安全回滚或恢复。
107+
108+
- [ ] **升级策略与兼容性说明**
109+
- 明确工具版本升级时,对现有任务、offset、schema history 的影响。
110+
- 需要时提供简单的数据迁移/升级脚本或操作指引。
111+
- 验收:从一个小版本升级到下一个小版本时,现有任务在可接受的中断/切换策略下保持可用。
112+
113+
---
114+
115+
## 5. 安全性(Security)
116+
117+
**目标**:在生产环境使用时,避免明显的安全风险。
118+
119+
- [ ] **凭证管理与敏感信息保护**
120+
- 数据库密码、Kafka 凭证等敏感信息不出现在日志和默认配置示例中。
121+
- 推荐使用环境变量、Secret 管理(如 K8s Secret、Vault 等)来存储敏感信息。
122+
- 验收:在正常运行和故障排查日志中看不到明文密码。
123+
124+
- [ ] **权限最小化**
125+
- 文档中列出源库/目标库所需的最小权限集合(如 MySQL REPLICATION、PostgreSQL INSERT/UPDATE/DELETE 等)。
126+
- 建议避免使用超级用户账号。
127+
- 验收:在只授予最小权限的账号下,E2E 测试能够通过。
128+
129+
---
130+
131+
## 6. 测试与文档(Testing & Documentation)
132+
133+
**目标**:通过自动化测试和清晰文档,降低上线和日常运维风险。
134+
135+
- [ ] **自动化端到端测试**
136+
- 至少提供一套基于 Testcontainers 或 docker-compose 的 E2E 测试:
137+
- MySQL → PostgreSQL 完整链路(包含初始快照 + 增量);
138+
- 覆盖 restart、pause/resume、部分故障场景。
139+
- 验收:在 CI 或指定环境中,可以一键运行 E2E 测试并查看结果。
140+
141+
- [ ] **关键模块单元/集成测试**
142+
- 以下模块有覆盖率可接受的测试:
143+
- 连接器配置生成(MySql/Oracle/Postgres Source/Sink);
144+
- TaskExecutionService / TaskService;
145+
- ApplyTypeMapping SMT 及类型映射规则;
146+
- 元数据持久化(Repository 层)。
147+
- 验收:整体测试覆盖率达到预设目标(例如 60%+),并在 PR 检查中强制执行。
148+
149+
- [ ] **运行与运维文档**
150+
- README 中给出快速开始 + 本地 E2E 示例。
151+
- docs 下提供生产运维手册(建议新建 `docs/OPERATIONS.md`),包含:
152+
- 支持场景与边界;
153+
- 配置说明;
154+
- 监控指标说明;
155+
- 常见故障与排查流程。
156+
- 验收:新接触项目的工程师/运维能在一两天内依据文档独立完成一次迁移演练。
157+
158+
---
159+
160+
## 使用方式建议
161+
162+
- 在每个里程碑前后更新本文件的勾选状态,形成“当前能力快照”;
163+
-`docs/PROJECT_STATUS.md` 中引用本文件,将 Issue/模块与上述条目进行映射,帮助确定优先级;
164+
- 在规划首个生产环境试点前,至少保证本文件中标记为“必选”的条目全部打勾,其余条目根据业务风险和资源评估决定是否纳入首批范围。
165+

0 commit comments

Comments
 (0)