4.3 KiB
4.3 KiB
ADR-006:候选持久化采用可替换 SQLite Snapshot
- 状态:已采纳
- 日期:2026-07-20
- 影响范围:Control Plane、Persistence、Deployment、Backup、Recovery、HA 演进
1. 背景
AIOS V2 候选版本需要在服务重启后恢复 Tenant、Agent、Task、Audit 和 Idempotency 状态,同时又必须尽快进入预发布部署与 Bug 修复阶段。
候选阶段如果立即引入完整分布式数据库、消息系统和 HA,会显著扩大开发范围,推迟控制面、Runtime Boundary 和多租户模型的验证。
2. 决策
候选版本使用可替换的 SQLite WAL 原子 Snapshot:
SQLiteSnapshotRepository保存版本化 Control Plane Snapshot;DurableControlPlaneService在成功变更后持久化;- 使用 WAL、
synchronous=FULL和BEGIN IMMEDIATE; - 状态目录独立于代码版本;
- 上层 Domain、API、Orchestrator 和 Runtime Contract 不依赖 SQLite 实现。
执行证据使用租户分区 JSON 文件,由 ExecutionTracker 原子写入。
3. 持久化范围
候选 Snapshot 包含:
- Tenant;
- Agent;
- Task;
- Audit;
- Idempotency。
独立 Evidence 目录包含:
- claim;
- heartbeat;
- progress;
- blocker;
- commit;
- test_status;
- result。
4. 选择理由
- 无额外外部依赖;
- 易于快速部署和回滚;
- 支持事务、WAL 和完整性检查;
- 可以验证上层控制面和 Runtime Contract;
- 便于在预发布阶段复现和修复 Bug;
- 可通过 Repository 边界替换为生产数据库。
5. 备选方案
方案 A:候选阶段直接使用 PostgreSQL 集群
暂不采用原因:会增加部署、迁移、HA、Secret、网络和容量范围,延迟核心架构验证。
方案 B:继续使用纯内存状态
拒绝原因:服务重启会丢失权威状态,无法进入预发布。
方案 C:每个模块各自使用 SQLite
拒绝原因:会形成多个事实源和跨模块事务问题。
方案 D:将完整状态写入 Git
拒绝原因:运行状态不应成为 Git 内容,可能暴露敏感业务数据并造成提交风暴。
6. 正面影响
- 候选版具备重启恢复能力;
- 状态与代码版本解耦;
- 回滚默认只切换代码,不覆盖新状态;
- 可快速进入预发布测试;
- 生产后端替换不改变上层 Contract。
7. 负面影响与风险
- SQLite 主要适用于单进程候选部署;
- 尚未提供多实例写入和分布式锁;
- 租户隔离是逻辑隔离,不是 RLS 或物理隔离;
- 大规模任务、审计和并发容量尚未验证;
- Evidence 文件数量增长需要归档策略;
- Snapshot 粒度可能导致状态增长后的写放大。
8. 生产迁移要求
生产数据层替换必须满足:
- 保持 Control Plane Domain/API Contract 不变;
- 提供 schema migration;
- 提供租户 RLS 或物理隔离;
- 提供备份、恢复、PITR 和灾难恢复;
- 提供 HA、多实例并发和故障转移;
- 提供容量、延迟和锁等待测试;
- 保持 Audit 与 Evidence 可追踪;
- 提供从 SQLite Candidate 到生产后端的数据迁移工具;
- 通过新的 ADR 说明生产持久化决策。
9. 回滚策略
- 回滚前备份
/var/lib/aios-v2; - 默认只回滚代码;
- 状态恢复必须由 Owner 显式授权;
- 恢复前必须验证 Snapshot schema 兼容性;
- 回滚后执行 SQLite
PRAGMA quick_check和 AIOS Healthcheck。
10. 验收要求
候选版至少通过:
- 创建 Tenant、Agent、Task;
- 服务重启;
- 读取恢复后的 Task;
- Idempotency 仍有效;
- Audit 仍存在;
- SQLite
quick_check=ok; - 状态目录权限正确;
- 回滚演练不丢失新增状态。
11. 实现与测试映射
- Repository:
active-runtime/app/aios_v2/persistence.py - 应用入口:
active-runtime/app/aios_v2/app.py - Evidence:
active-runtime/app/aios_v2/execution_tracking.py - 测试:
tests/aios_v2_candidate/test_candidate_flow.py - 健康检查:
deploy/aios-v2/healthcheck/check.sh - 回滚:
deploy/aios-v2/rollback/rollback.sh
12. 更新触发条件
以下变化必须更新或替代本 ADR:
- 引入生产数据库;
- 支持多实例写入;
- 修改 Snapshot 格式;
- 改变 Evidence 存储;
- 增加 RLS、HA、分片或事件溯源;
- 修改状态回滚策略。