Files
Edu/docs/architecture/issues/worklines/data-ana_workline.md
SpecialX 9e4d442c0e chore(data-ana): 更新工作进度跟踪与ISSUE状态,补建基础设施脚本,清理遗留代码
- workline: 追加 §6 实现进度跟踪(P2-P5 已完成,P6 未开始)

- issue: 更新 §0.2/§0.3 核查表,proto 文件已全部补全

- 新增 scripts/clickhouse_ddl.sql(5 宽表建表脚本)

- 新增 scripts/seed_clickhouse.py(mock 种子数据脚本)

- 删除遗留代码 clickhouse_client.py 和 health.py
2026-07-13 11:12:26 +08:00

22 KiB
Raw Blame History

data-ana 工作排期

负责人ai11 关联:workline.mdcoord.mdcontracts/data-ana_contract.mdobjections/data-ana_issue.md 模式:全并行(各 AI 一口气完成 P2-P6 全部代码,开发期间用 mock最后统一集成测试 基线日期:批次 0 已完成2026-07-09批次 1P22026-07-10 启动


§1 总览

data-ana 是 D6 智能洞察领域的纯读模型服务Python/FastAPI基于 ClickHouse ReplacingMergeTree 宽表 + Debezium CDC 消费实现实时学情分析。

核心交付物

  • gRPC server :50055 + AnalyticsService 12 RPC含 1 个 Server Streaming
  • HTTP :3006 14 端点3 基础 + 11 业务,保留作 Gateway 直连降级)
  • ClickHouse 5 宽表student_dashboard_view / student_errors / mastery_snapshot / attendance_logs / ai_usage_log
  • CDC 消费者core-edu MySQL binlog → Kafka → ClickHouse 宽表投影)
  • 掌握度计算(加权滑动平均 + 遗忘曲线)+ 预警评估
  • 派生数据事件发布edu.insight.mastery.updated / edu.insight.warning.triggered豁免 Outbox

阶段里程碑

  • P2 预备ClickHouse 接入 + CDC 骨架 + ActionState 信封重构 + mock 数据集
  • P3 预备CDC 通道接入 + 掌握度算法 v1 + Repository 封装
  • P4 主战场gRPC 50055 启用 + 12 RPC + 4 端 Dashboard + Warning + DataScope + 事件发布
  • P5 扩展SubscribeMasteryUpdate stream + AI 用量消费 + 手动 commit
  • P6 硬化CDC 水平扩展 + 容量规划 + 数据治理 + 监控告警

§2 全阶段甘特图P2-P6

gantt
    title ai11 data-ana 全阶段排期
    dateFormat YYYY-MM-DD
    axisFormat %m-%d

    section P2 预备与批次1并行
    2.1 ClickHouse DDL 5宽表建表 :a11a, 2026-07-10, 2d
    2.2 CDC消费骨架(aiokafka) :a11b, after a11a, 2d
    2.3 mock数据集(30学生×5考试×10作业) :a11c, after a11a, 1d
    2.4 ActionState信封重构(P0整改) :crit, a11d, 2026-07-10, 2d
    2.5 config.py修正(env/Redis/gRPC) :a11e, after a11d, 1d

    section P3 预备与批次2并行
    3.1 gRPC server骨架(3 RPC,不启用) :a11f, after a11b, 2d
    3.2 core-edu CDC通道接入(grades/exams/homework) :a11g, after a11b, 3d
    3.3 ExamCache内存LRU :a11h, after a11g, 1d
    3.4 掌握度算法v1(weighted_moving_avg) :a11i, after a11g, 2d
    3.5 ClickHouseRepository(FINAL/argMax) :a11j, after a11i, 2d

    section P4 主战场批次3, 11d
    4.1 gRPC 50055正式启用 :crit, a11k, after a11j, 1d
    4.2 analytics.proto扩展12 RPC :crit, a11l, after a11k, 2d
    4.3 4端Dashboard RPC实现 :a11m, after a11l, 3d
    4.4 WarningService+TriggerWarning :a11n, after a11l, 2d
    4.5 GetMasteryDistribution+GetStudentMastery :a11o, after a11m, 1d
    4.6 iam.GetEffectiveDataScope集成(降级兜底) :crit, a11p, after a11k, 2d
    4.7 DataScope 6级WHERE注入 :a11q, after a11p, 1d
    4.8 attendance+content CDC消费 :a11r, after a11g, 2d
    4.9 MasteryEvent+WarningTriggered发布 :a11s, after a11n, 1d
    4.10 HTTP 14端点+readyz硬化 :a11t, after a11m, 2d

    section P5 扩展批次4并行
    5.1 SubscribeMasteryUpdate stream RPC :a11u, after a11t, 3d
    5.2 AIUsageEvent消费→ai_usage_log :a11v, after a11u, 2d
    5.3 手动commit替换auto_commit :a11w, after a11v, 1d
    5.4 Admin Dashboard AI用量区块 :a11x, after a11v, 2d

    section P6 硬化批次5并行
    6.1 CDC多实例水平扩展 :a11y, after a11x, 3d
    6.2 ExamCache Redis化 :a11z, after a11y, 2d
    6.3 容量规划+TTL归档策略 :a11aa, after a11z, 2d
    6.4 监控告警(consumer lag HPA) :a11ab, after a11aa, 2d
    6.5 readyz深度硬化 :a11ac, after a11ab, 1d

关键路径critActionState 信封重构 → gRPC 50055 启用 → analytics.proto 扩展 → iam GetEffectiveDataScope 集成 总工期:约 51 天2026-07-10 ~ 2026-08-30其中 P4 主战场 11 天为关键交付期


§3 详细任务

3.1 P2 预备期2026-07-10 ~ 2026-07-188d

任务 2.1ClickHouse DDL 5 宽表建表

  • 负责人ai11
  • 依赖ClickHouse 实例就绪,由 infra 提供)
  • 交付物infra/clickhouse/ddl/data_ana.sql5 宽表 DDLstudent_dashboard_view / student_errors / mastery_snapshot / attendance_logs / ai_usage_log
  • 验收标准5 表在 ClickHouse 中创建成功ReplacingMergeTree 引擎 + ORDER BY + PARTITION BY 符合 02 §3 DDL 设计

任务 2.2CDC 消费骨架

  • 负责人ai11
  • 依赖Kafka 就绪
  • 交付物src/data_ana/cdc_consumer.py 重构aiokafka AIOKafkaConsumer + EventHandler 路由框架)
  • 验收标准:能消费 mock CDC 事件并打印路由日志consumer group = data-ana-cdc

任务 2.3mock 数据集

  • 负责人ai11
  • 依赖:任务 2.1
  • 交付物scripts/seed_clickhouse.py(批量导入 30 学生 × 5 考试 × 10 作业 × 30 天出勤模拟数据)
  • 验收标准ClickHouse 5 表有数据,可查询返回非空结果

任务 2.4ActionState 信封重构P0 整改coord-cross-review §5.3

  • 负责人ai11
  • 依赖:无
  • 交付物src/data_ana/shared/action_state.pyActionState[T] 泛型 + ActionStateError + ok()/fail() 类方法)
  • 验收标准main.py 所有端点返回 ActionState[T]degraded 标记在顶层 details.degraded(非 error.detailsruff 零错误

任务 2.5config.py 修正

  • 负责人ai11
  • 依赖:无
  • 交付物src/data_ana/config.py 修正env_prefix 补 Redis / gRPC / ClickHouse 配置项pydantic-settings 校验)
  • 验收标准:配置项覆盖 02 §13 配置清单,环境变量缺失时 pydantic-settings 报错

3.2 P3 预备期2026-07-18 ~ 2026-07-268d

任务 3.1gRPC server 骨架3 RPC不正式启用

  • 负责人ai11
  • 依赖analytics.proto 当前 3 RPC无需 coord 补全)
  • 交付物src/data_ana/grpc_server.pygrpc.aio Server 骨架 + 3 RPC 实现,绑定 :50055 但不启动对外)
  • 验收标准:本地可启动 gRPC server3 RPC 可调用返回 mock 数据

任务 3.2core-edu CDC 通道接入

  • 负责人ai11
  • 依赖core-edu MySQL 就绪 + Debezium CDC 配置core-edu 就绪前用 mock binlog 事件)
  • 交付物src/data_ana/cdc_consumer.py 完善EventHandler 处理 grades/exams/homework/classes 表 CDC 事件)
  • 验收标准:消费 CDC 事件 → 解析 Debezium JSON → 查 ExamCache 填 class_id → upsert ClickHouse 宽表

任务 3.3ExamCache 内存 LRU

  • 负责人ai11
  • 依赖:任务 3.2
  • 交付物src/data_ana/exam_cache.py(内存 LRU dictmax 10000 条exam_id → {class_id, subject_id}
  • 验收标准CDC exams 事件触发 ExamCache 更新grades 事件查 ExamCache 获取 class_id

任务 3.4:掌握度算法 v1

  • 负责人ai11
  • 依赖:任务 3.2
  • 交付物src/data_ana/mastery_service.py(加权滑动平均算法,权重 w_i = 0.6^i归一化
  • 验收标准:输入学生近期 N 次成绩 → 输出 mastery_level (0.0-1.0) → 写 mastery_snapshot 表

任务 3.5ClickHouseRepository 封装

  • 负责人ai11
  • 依赖:任务 2.1
  • 交付物src/data_ana/clickhouse_client.py 重构(查询封装 + FINAL/argMax 去重 + DataScope WHERE 注入接口)
  • 验收标准:查询 student_dashboard_view 返回去重后最新版本数据

3.3 P4 主战场期2026-07-26 ~ 2026-08-0611d批次 3

任务 4.1gRPC 50055 正式启用

  • 负责人ai11
  • 依赖:任务 3.1
  • 交付物main.py lifespan 启动 gRPC server :50055HealthService.Check 返回 SERVING
  • 验收标准gRPC server 对外可访问HealthService.Check = SERVING

任务 4.2analytics.proto 扩展 12 RPC

  • 负责人ai11本分支内补全 proto提请 coord 合并)
  • 依赖ISSUE-003 解决coord 确认或 ai11 自行补全)
  • 交付物packages/shared-proto/proto/analytics.proto 扩展至 12 RPC3 现有 + 9 新增 message 定义)
  • 验收标准buf lint 零错误,buf generate 生成 Python stub 成功12 RPC 全部可调用

任务 4.34 端 Dashboard RPC 实现

  • 负责人ai11
  • 依赖:任务 4.2
  • 交付物GetTeacherDashboard / GetStudentDashboard / GetParentDashboard / GetAdminDashboard 4 RPC 实现
  • 验收标准4 RPC 返回 ActionState[DashboardData]DataScope 过滤生效,降级时返回骨架数据 + degraded: true

任务 4.4WarningService + TriggerWarning

  • 负责人ai11
  • 依赖:任务 3.4(掌握度算法)
  • 交付物src/data_ana/warning_service.py(预警阈值评估 + TriggerWarning RPC + GetWarnings RPC
  • 验收标准:掌握度 < 0.4 触发 LOW_MASTERY 预警,成绩环比下降 20% 触发 SCORE_DROP缺勤 ≥ 3 次/周触发 ABSENT_FREQUENT

任务 4.5GetMasteryDistribution + GetStudentMastery

  • 负责人ai11
  • 依赖:任务 3.4 + 任务 4.2
  • 交付物2 RPC 实现(班级掌握度分布 + 学生知识点掌握度明细)
  • 验收标准:返回 mastered/progressing/weak 三档分布数据

任务 4.6iam.GetEffectiveDataScope 集成(降级兜底)

  • 负责人ai11
  • 依赖ISSUE-001 解决iam.proto 补全 GetEffectiveDataScope。若 P4 时 iam 未就绪,使用降级兜底
  • 交付物src/data_ana/iam_client.pygRPC 调 iam.GetEffectiveDataScope + Redis 缓存 5min + 降级兜底)
  • 验收标准iam 可用时调 gRPC 获取 DataScopeiam 不可用时按 role 映射默认 DataScope + degraded: true

任务 4.7DataScope 6 级 WHERE 注入

  • 负责人ai11
  • 依赖:任务 4.6 + 任务 3.5
  • 交付物ClickHouseRepository 查询方法注入 DataScope WHERE 子句SELF/CLASS/GRADE/SCHOOL/DISTRICT/ALL
  • 验收标准:教师只能查自己班级数据,学生只能查自己数据,管理员可查全校数据

任务 4.8attendance + content CDC 消费

  • 负责人ai11
  • 依赖:任务 3.2CDC 框架)
  • 交付物EventHandler 扩展 attendance_logs 表 CDC + content_knowledge_points 表 CDC
  • 验收标准:考勤事件落 attendance_logs 表,知识点事件更新 mastery_snapshot 元数据

任务 4.9MasteryEvent + WarningTriggered 事件发布

  • 负责人ai11
  • 依赖:任务 3.4 + 任务 4.4
  • 交付物src/data_ana/kafka_producer.pyaiokafka AIOKafkaProducer + idempotent + transactional_id
  • 验收标准:掌握度计算完成发布 edu.insight.mastery.updated,预警触发发布 edu.insight.warning.triggered,豁免 Outbox

任务 4.10HTTP 14 端点 + readyz 硬化

  • 负责人ai11
  • 依赖:任务 4.3 + 任务 4.4 + 任务 4.5
  • 交付物main.py 14 个 HTTP 端点全部实现3 基础 + 11 业务)+ /readyz 检查 4 依赖clickhouse/cdc_consumer/redis/iam_grpc
  • 验收标准14 端点返回 ActionState[T]/readyz 依赖检查正确反映服务状态

3.4 P5 扩展期2026-08-06 ~ 2026-08-1913d批次 4 并行)

任务 5.1SubscribeMasteryUpdate Server Streaming RPC

  • 负责人ai11
  • 依赖:任务 4.2 + 任务 4.9
  • 交付物SubscribeMasteryUpdate RPC 实现server-streaming客户端订阅 student_id/class_id掌握度更新时推送
  • 验收标准:客户端订阅后,掌握度计算完成时收到 MasteryUpdateEvent 流

任务 5.2AIUsageEvent 消费 → ai_usage_log

  • 负责人ai11
  • 依赖ISSUE-002 解决events.proto 补 AIUsageEvent+ ai 服务发布 edu.insight.ai.usage topic
  • 交付物EventHandler 扩展 AIUsageEvent 消费 → 落 ai_usage_log 表
  • 验收标准ai 服务发布用量事件后ai_usage_log 表有数据Admin Dashboard AI 用量区块可展示

任务 5.3:手动 commit 替换 auto_commit

  • 负责人ai11
  • 依赖:任务 3.2
  • 交付物cdc_consumer.py 改为 enable_auto_commit=False + 手动 commitat-least-once
  • 验收标准ClickHouse 写入成功后才 commit offset重启后无重复消费依赖 ReplacingMergeTree 去重)

任务 5.4Admin Dashboard AI 用量区块

  • 负责人ai11
  • 依赖:任务 5.2
  • 交付物GetAdminDashboard RPC 补全 AI 用量统计区块(按 provider/model/时间窗聚合)
  • 验收标准Admin Dashboard 返回 AI 用量数据,无数据时显示"暂无数据"

3.5 P6 硬化期2026-08-19 ~ 2026-08-3011d批次 5 并行)

任务 6.1CDC 多实例水平扩展

  • 负责人ai11
  • 依赖:任务 5.3(手动 commit
  • 交付物CdcConsumer 支持多实例分摊 partitionconsumer group 不变)
  • 验收标准2+ 实例消费同一 topic 无重复无遗漏

任务 6.2ExamCache Redis 化

  • 负责人ai11
  • 依赖:任务 6.1
  • 交付物exam_cache.py 改为 Redis 实现key: data_ana:exam:{exam_id} TTL 30 天)
  • 验收标准:多实例共享 ExamCache重启后缓存不丢失

任务 6.3:容量规划 + TTL 归档策略

  • 负责人ai11
  • 依赖:无
  • 交付物ClickHouse TTL 策略student_dashboard_view 保留 2 年ai_usage_log 保留 1 年)+ 冷热数据分离方案
  • 验收标准TTL 配置生效,过期数据自动清理

任务 6.4:监控告警完善

  • 负责人ai11
  • 依赖:任务 6.1
  • 交付物Prometheus 指标补全consumer lag histogram + 慢查询 counter + ClickHouse 连接池 gauge+ Grafana dashboard
  • 验收标准consumer lag 超阈值触发 HPA慢查询超阈值告警

任务 6.5readyz 深度硬化

  • 负责人ai11
  • 依赖:任务 4.10
  • 交付物/readyz 检查项完善ClickHouse 查询超时 1s + Redis ping + iam gRPC 超时 2s + CDC consumer lag < 1000
  • 验收标准:任一依赖不健康时 /readyz 返回 503K8s 摘流量

§4 依赖与就绪信号

4.1 我依赖的上游就绪标志

  • core-edu gRPC 50053 启用ai08批次 2—— CDC 数据源grades/exams/homework/attendance 表 binlog
  • core-edu MySQL Debezium CDC 配置ai08 + SRE—— CDC 通道前提
  • content gRPC 50054 启用ai09批次 3—— 知识点维度 CDC
  • iam.proto 补全 GetEffectiveDataScope RPCai06/coordISSUE-001—— DataScope 解析
  • analytics.proto 扩展至 12 RPCcoord/ai11ISSUE-003—— gRPC stub 生成前提
  • events.proto 补全 AIUsageEvent messagecoordISSUE-002—— AI 用量消费P5
  • ai 服务发布 edu.insight.ai.usage topicai12批次 4—— AI 用量统计P5

降级兜底core-edu / content / iam 未就绪时,使用 ClickHouse 内置 mock 数据集 + 硬编码 DataScope 降级,标注 details.degraded: true

4.2 我的就绪信号(供下游消费)

  • P4 就绪data-ana gRPC 50055 启用HealthService.Check = SERVING+ AnalyticsService 12 RPC 可调用 + 4 端 Dashboard 返回结构化数据
  • P4 就绪edu.insight.mastery.updated topic 可发布mastery.updated / warning.triggered
  • P5 就绪SubscribeMasteryUpdate server-streaming RPC 可订阅
  • P6 就绪CDC 多实例水平扩展 + ExamCache Redis 化完成

4.3 下游消费方

下游 消费接口 就绪依赖阶段
teacher-bffai03 gRPC 50055 GetTeacherDashboard / GetClassPerformance 等 P4
student-bffai04 gRPC 50055 GetStudentDashboard / GetStudentWeakness 等 P4
parent-bffai05 gRPC 50055 GetParentDashboard P4
ai 服务ai12 gRPC 50055 反向调用查学情GetStudentMastery / GetLearningTrend P5
core-eduai08 Kafka edu.insight.mastery.updated(推荐个性化练习) P4
msgai10 Kafka edu.insight.warning.triggered(推送通知) P4

§5 风险与缓解

风险 影响 缓解措施
iam.proto 未补全 GetEffectiveDataScope P4 降级兜底:按 role 映射默认 DataScope + degraded: trueISSUE-001
analytics.proto 未扩展 12 RPC P4 ai11 本分支自行补全 proto提请 coord 合并ISSUE-003
core-edu CDC 通道未就绪 P3-P4 mock 数据集降级 + 本地 stub CDC 事件
ClickHouse ReplacingMergeTree 去重延迟 P4 查询加 FINAL / argMax 强制去重02 §3.6 已设计)
单实例 CDC 消费者单点故障 P4 P6 演进为多实例 + Redis ExamCacheP4 阶段监控 consumer lag 告警
掌握度算法精度不足 P4 v1 用加权滑动平均P5+ 评估引入遗忘曲线 max 叠加02 §9 已设计 MasteryMethod 枚举预留)

§6 实现进度跟踪2026-07-13 更新)

基于代码审查与 proto 文件核查,更新各阶段实际完成状态。

6.1 P2 预备期 — 完成

任务 状态 说明
2.1 ClickHouse DDL 5 宽表建表 已完成 DDL 脚本已创建在 scripts/clickhouse_ddl.sqlDDL 设计见 02 §3
2.2 CDC 消费骨架 已完成 cdc_consumer.py 完整实现,支持 5 表 + AIUsageEvent手动 commit + Redis 去重
2.3 mock 数据集 已完成 scripts/seed_clickhouse.py 种子数据脚本已创建30 学生 × 5 考试 × 10 作业 × 30 天出勤)
2.4 ActionState 信封重构 已完成 shared/action_state.py 实现 ActionState[T] 泛型degraded 在顶层 details
2.5 config.py 修正 已完成 config.py 完整覆盖 ClickHouse/Kafka/iam/Redis/OTel/掌握度/预警配置

6.2 P3 预备期 — 完成

任务 状态 说明
3.1 gRPC server 骨架 已完成 grpc_server.py 实现全部 12 RPC含 server-streamingHealthService.Check
3.2 core-edu CDC 通道接入 已完成 cdc_consumer 处理 grades/exams/homework/attendance/classes CDC 事件
3.3 ExamCache 内存 LRU 已完成 exam_cache.py OrderedDict LRU max 10000CDC exams 触发更新
3.4 掌握度算法 v1 已完成 mastery_service.py 加权滑动平均 + 遗忘曲线衰减
3.5 ClickHouseRepository 已完成 repository/clickhouse_repository.py P0 整改版FINAL/argMax 去重

6.3 P4 主战场期 — 完成

任务 状态 说明
4.1 gRPC 50055 正式启用 已完成 main.py lifespan 启动 gRPC server :50055
4.2 analytics.proto 扩展 12 RPC 已完成 analytics.proto 已扩展至 12 RPCISSUE-003 已裁决)
4.3 4 端 Dashboard RPC 实现 已完成 grpc_server.py + analytics_service.py 4 端 Dashboard
4.4 WarningService + TriggerWarning 已完成 warning_service.py 5 类预警 + Redis 去重 + 手动触发
4.5 GetMasteryDistribution + GetStudentMastery 已完成 analytics_service.py 实现
4.6 iam.GetEffectiveDataScope 集成 已完成 repository/iam_client.py gRPC + Redis 缓存 + role 降级兜底ISSUE-001 已裁决)
4.7 DataScope 6 级 WHERE 注入 已完成 shared/permissions.py build_datascope_where + 6 级枚举
4.8 attendance + content CDC 消费 已完成 cdc_consumer.py 处理 attendance_logs + content_knowledge_points
4.9 MasteryEvent + WarningTriggered 发布 已完成 repository/kafka_producer.py idempotent + transactional_id
4.10 HTTP 14 端点 + readyz 硬化 已完成 main.py 14 端点 + /readyz 检查 4 依赖

6.4 P5 扩展期 — 基本完成

任务 状态 说明
5.1 SubscribeMasteryUpdate stream RPC 已完成 grpc_server.py 实现 asyncio.Queue 分发 + 30s 心跳
5.2 AIUsageEvent 消费 → ai_usage_log 已完成 cdc_consumer.py 处理 edu.insight.ai.usageISSUE-002 已裁决)
5.3 手动 commit 替换 auto_commit 已完成 cdc_consumer.py enable_auto_commit=False + 手动 commit
5.4 Admin Dashboard AI 用量区块 已完成 analytics_service.py + grpc_server.py AdminDashboard 含 AI 用量

6.5 P6 硬化期 — 未开始

任务 状态 说明
6.1 CDC 多实例水平扩展 未开始 cdc_consumer.py get_lag() 返回 0占位
6.2 ExamCache Redis 化 未开始 exam_cache.py 仍为内存 LRU
6.3 容量规划 + TTL 归档策略 未开始 需创建 ClickHouse TTL 配置
6.4 监控告警完善 未开始 需补 Prometheus 指标 + Grafana dashboard
6.5 readyz 深度硬化 未开始 当前 /readyz 基本功能已实现,需补超时控制

6.6 ISSUE 落实状态

ISSUE 状态 说明
ISSUE-001 已裁决 iam.proto 已补全 GetEffectiveDataScope RPC现为 6 RPC
ISSUE-002 已裁决 events.proto 已补全 AIUsageEvent message现为 15 message
ISSUE-003 已裁决 analytics.proto 已扩展至 12 RPC
ISSUE-004 已裁决 coord 已仲裁004 引用断裂临时改引 coord-cross-review.md
ISSUE-005 已裁决 topic 命名统一为 edu.insight.mastery.updated
ISSUE-006 已裁决 proto 文件已补全,声明与实际一致

6.7 代码清理

文件 处理
src/data_ana/clickhouse_client.py 已删除(与 repository/clickhouse_repository.py 重叠,缺少 FINAL/argMax
src/health/health.py 已删除(未接入 main.pymain.py 有完整内联实现)