Files
Edu/services/data-ana/docs/nextstep.md

18 KiB
Raw Blame History

data-ana 模块上下游依赖与工作清单Next Steps

模块data-ana智能洞察域数据分析服务 负责人ai11 更新日期2026-07-13 关联文档:01-understanding.md02-architecture-design.mddata-ana_contract.mddata-ana_workline.md


1. 模块当前状态

data-ana 已完成 P2-P5 全部代码实现P6 硬化期未开始。当前服务包含:

  • HTTP 14 端点3 基础 + 11 业务),端口 3006
  • gRPC 12 RPC11 unary + 1 server-streaming端口 50055
  • CDC 消费者Debezium binlog → ClickHouse 5 宽表,手动 commit + Redis 去重
  • ClickHouse 宽表student_dashboard_view / student_errors / mastery_snapshot / ai_usage_log / attendance_logs
  • Kafka 生产者MasteryEvent + WarningTriggeredOutbox 豁免)
  • iam gRPC 集成GetEffectiveDataScope + Redis 缓存 + role 降级兜底
  • 降级模式ClickHouse/Kafka/Redis/iam 任一不可达时服务仍可启动

2. 上游依赖data-ana 依赖谁)

2.1 iam 服务ai06 负责)— P0

# 依赖项 用途 状态
1 gRPC GetEffectiveDataScope(userId) :50052 DataScope 6 级过滤SELF/CLASS/GRADE/SCHOOL/DISTRICT/ALL 已就绪iam.proto 已补全)
2 REST GET /healthz :3002 /readyz 下游健康检查 待 iam 容器启动
3 JWT RS256 公钥 data-ana 不直接验签,由 api-gateway 验签后注入 x-user-* header

环境变量DATA_ANA_IAM_GRPC_TARGET=iam:50052 降级策略iam 不可达时按 role 映射默认 DataScope + degraded: true

2.2 ClickHouse基础设施— P0

# 依赖项 用途 状态
1 ClickHouse :8123 5 宽表读写(分析查询核心存储) Docker 已启动
2 DDL 建表 5 宽表 schema 已创建 scripts/clickhouse_ddl.sql
3 种子数据 mock 数据集 已创建 scripts/seed_clickhouse.py

环境变量DATA_ANA_CLICKHOUSE_HOST=clickhouseDATA_ANA_CLICKHOUSE_PORT=8123DATA_ANA_CLICKHOUSE_DATABASE=edu_analytics 降级策略ClickHouse 不可达时服务启动跳过,查询返回 degraded 空数据

2.3 Kafka基础设施— P1

# 依赖项 用途 状态
1 Kafka :29092 消费 CDC topicedu-cdc.next_edu_cloud.* 等 7 topic Docker 已启动
2 Kafka :29092 生产 edu.insight.mastery.updated + edu.insight.warning.triggered Docker 已启动

环境变量DATA_ANA_KAFKA_BROKERS=kafka:29092 降级策略Kafka 不可达时 CDC 消费者不启动,事件发布静默失败

2.4 Redis基础设施— P1

# 依赖项 用途 状态
1 Redis :6379 DataScope 缓存5min TTL+ CDC event_id 去重 + Warning bitmap 去重 Docker 已启动

环境变量DATA_ANA_REDIS_URL=redis://redis:6379 降级策略Redis 不可达时跳过缓存,每次直查 iam gRPC

2.5 core-edu 服务ai07 负责)— P1CDC 依赖)

# 依赖项 用途 状态
1 MySQL binlogcore_edu 库) CDC 消费 grades/exams/homework/attendance/classes 变更 待 core-edu MySQL 就绪
2 Debezium Connect MySQL → Kafka CDC 管道 待 Debezium 部署

2.6 content 服务ai08 负责)— P2CDC 依赖)

# 依赖项 用途 状态
1 MySQL binlogcontent 库) CDC 消费 content_knowledge_points 变更 → Redis 知识点缓存 待 content MySQL 就绪

2.7 ai 服务ai12 负责)— P2事件消费

# 依赖项 用途 状态
1 Kafka topic edu.insight.ai.usage 消费 AIUsageEvent → ai_usage_log 宽表 events.proto 已补全 AIUsageEvent

3. 下游依赖(谁依赖 data-ana

3.1 teacher-bffai03 负责)— P0

# gRPC RPC 用途 状态
1 GetStudentWeakness(classId) :50055 studentWeakness 查询 已实现
2 GetLearningTrend(classId) :50055 learningTrend 查询 已实现
3 GetClassPerformance(classId) :50055 classPerformance 查询 已实现
4 GetAdminDashboard(input) :50055 adminDashboard AI 用量区块 已实现

需求来源teacher-bff nextstep.md §2.4 环境变量teacher-bff 侧):DATA_ANA_GRPC_TARGET=data-ana:50055

3.2 student-bffai04 负责)— P0

# gRPC RPC 用途 状态
1 GetStudentWeakness(studentId) :50055 myWeakness 查询 已实现
2 GetLearningTrend(studentId) :50055 myTrend 查询 已实现
3 GetStudentMastery(studentId) :50055 myMasterySummary 查询 已实现
4 GetStudentDashboard(studentId) :50055 studentDashboard 查询 已实现
5 GetMasteryDistribution(classId) :50055 班级掌握度分布 已实现
6 HTTP GET /analytics/student/{id}/errorbook :3006 myErrorBook 查询 已实现

需求来源student-bff nextstep.md §3.4 说明student-bff nextstep.md 中列出的 GetStudentGrowth/GetAssignmentAnalysis/ListDiagnosticReports/ListErrorBookItems/ListPracticeSessionsByStudent/StartPracticeSession/SubmitPracticeAnswer 等 RPC 在 analytics.proto 中未定义data-ana 通过现有 12 RPC + HTTP 端点覆盖这些需求。

3.3 parent-bffai05 负责)— P1

# gRPC RPC 用途 状态
1 GetStudentWeakness(studentId) :50055 childWeakness 查询 已实现
2 GetLearningTrend(studentId) :50055 childTrend 查询 已实现
3 GetClassPerformance(classId) :50055 classRank/classAverage 计算 已实现

需求来源parent-bff nextstep.md §4.3 说明parent-bff nextstep.md 中列出的 childGrowthArchive/childLearningPath/childErrorBookStats/childTopWrongQuestions/childWeakKps/childMasterySummary/childDiagnosticReports/childPracticeStats/childPracticeSessions 等查询在当前 RPC 中未直接覆盖parent-bff 通过降级模式返回空数据。data-ana 可通过 HTTP 端点 /analytics/student/{id}/errorbook 等补充覆盖。

3.4 api-gatewayai01 负责)— P0

# 路由 用途 状态
1 /api/v1/analytics/* → data-ana:3006 data-ana HTTP 端点代理 api-gateway 已配置
2 /api/v1/dashboard/* → data-ana:3006 仪表盘代理 api-gateway 已配置

需求来源api-gateway nextstep.md §5.2


4. Docker 本地测试

4.1 镜像构建

# 在仓库根目录执行Docker Hub 不可达时先 docker pull + docker tag python:3.12-slim
docker build -t edu/data-ana:test -f services/data-ana/Dockerfile services/data-ana/

4.2 容器启动(接入 edu-full_default 网络)

docker run -d \
  --name edu-data-ana-test \
  --network edu-full_default \
  -p 3006:3006 -p 50055:50055 \
  -e DATA_ANA_CLICKHOUSE_HOST=clickhouse \
  -e DATA_ANA_CLICKHOUSE_PORT=8123 \
  -e DATA_ANA_CLICKHOUSE_DATABASE=edu_analytics \
  -e DATA_ANA_KAFKA_BROKERS=kafka:29092 \
  -e DATA_ANA_REDIS_URL=redis://redis:6379 \
  -e DATA_ANA_DEV_MODE=true \
  -e OTEL_TRACES_EXPORTER=none \
  -e OTEL_METRICS_EXPORTER=none \
  -e OTEL_LOGS_EXPORTER=none \
  edu/data-ana:test

4.3 健康检查验证

# liveness
curl http://localhost:3006/healthz

# readiness下游不可达时返回 degraded
curl http://localhost:3006/readyz

4.4 ClickHouse DDL + 种子数据

# 建表
docker exec edu-clickhouse clickhouse-client --password clickhouse --multiquery < services/data-ana/scripts/clickhouse_ddl.sql

# 种子数据(需安装 clickhouse-connect
cd services/data-ana && python scripts/seed_clickhouse.py

4.5 测试结果2026-07-13 已通过)

# 测试项 结果 说明
1 Docker 镜像构建 edu/data-ana:test 构建成功
2 容器启动 + 健康检查 /healthz 200 OK, /readyz ready=true
3 ClickHouse 5 表 DDL 4 ReplacingMergeTree + 1 MergeTree
4 种子数据写入 student_dashboard_view(8) + student_errors(3) + mastery_snapshot(6)
5 HTTP /analytics/student/stu-001/weakness 返回 2 个薄弱知识点kp-math-002 mastery=0.35/0.45
6 HTTP /analytics/student/dashboard 返回 8 条学情记录 + 薄弱点 + 趋势 + 掌握度
7 HTTP /analytics/student/stu-001/trend 返回 8 个趋势点
8 HTTP /analytics/student/stu-001/errorbook 返回 3 条错题记录
9 HTTP /analytics/student/stu-001/mastery 返回 4 个知识点掌握度overallMastery=0.6875
10 gRPC GetStudentWeakness :50055 返回 2 个 weak_points
11 gRPC GetStudentMastery :50055 返回 4 个 knowledge_pointsoverall_mastery=0.6875
12 gRPC GetLearningTrend :50055 返回 8 个 trend points
13 ruff lint 零错误

降级说明iam gRPC 未配置(not_configuredHTTP 响应标记 degraded: true + degraded_reason: iam_grpc_unavailable_fallback,但 ClickHouse 真实数据正常返回。班级级查询(class/performanceclass/mastery-distribution)因 DataScope 校验降级返回空数据iam 就绪后自动恢复。


5. 环境变量清单Docker 部署)

变量 必填 示例值 说明
DATA_ANA_HTTP_PORT 3006 HTTP 监听端口
DATA_ANA_GRPC_PORT 50055 gRPC 监听端口
DATA_ANA_DEV_MODE true/false 开发模式(跳过部分校验)
DATA_ANA_CLICKHOUSE_HOST clickhouse ClickHouse 主机
DATA_ANA_CLICKHOUSE_PORT 8123 ClickHouse HTTP 端口
DATA_ANA_CLICKHOUSE_DATABASE edu_analytics ClickHouse 数据库
DATA_ANA_KAFKA_BROKERS kafka:29092 Kafka broker 地址
DATA_ANA_REDIS_URL redis://redis:6379 Redis 连接地址
DATA_ANA_IAM_GRPC_TARGET iam:50052 iam gRPC 目标
OTEL_TRACES_EXPORTER none 禁用 OTel tracescollector 不可达时)

6. 剩余工作

6.1 Docker 本地测试(已完成 2026-07-13

# 工作项 状态
1 Docker 镜像构建 已通过
2 ClickHouse 容器启动 + DDL 建表 已通过
3 种子数据写入 已通过
4 data-ana 容器启动 + 健康检查 已通过
5 HTTP 端点测试(无 mock 数据) 已通过
6 gRPC 端点测试 已通过

6.2 P6 硬化任务

# 工作项 状态
1 CDC 多实例水平扩展 未开始
2 ExamCache Redis 化 未开始
3 容量规划 + TTL 归档策略 未开始
4 监控告警完善Prometheus + Grafana 未开始
5 readyz 深度硬化(超时控制) 未开始

6.3 端到端联调

# 工作项 阻塞条件 状态
1 teacher-bff gRPC 联调 teacher-bff 配置 DATA_ANA_GRPC_TARGET
2 student-bff gRPC 联调 student-bff 配置 DATA_ANA_GRPC_TARGET
3 parent-bff gRPC 联调 parent-bff 配置 DATA_ANA_GRPC_TARGET
4 CDC 通道联调 core-edu MySQL + Debezium 就绪
5 AIUsageEvent 消费联调 ai 服务发布事件

7. 关键文件路径

文件 用途
services/data-ana/src/data_ana/main.py HTTP 14 端点 + lifespangRPC + CDC 启动)
services/data-ana/src/data_ana/grpc_server.py gRPC 12 RPC含 server-streaming
services/data-ana/src/data_ana/cdc_consumer.py CDC 消费者5 表 + AIUsageEvent
services/data-ana/src/data_ana/analytics_service.py 4 端 Dashboard + DataScope 注入
services/data-ana/src/data_ana/mastery_service.py 掌握度算法(加权滑动平均 + 遗忘曲线)
services/data-ana/src/data_ana/warning_service.py 5 类预警 + Redis 去重
services/data-ana/src/data_ana/config.py 全配置项DATA_ANA_ 前缀)
services/data-ana/src/data_ana/repository/clickhouse_repository.py ClickHouse 查询FINAL/argMax 去重)
services/data-ana/src/data_ana/repository/iam_client.py iam gRPC + Redis 缓存 + 降级
services/data-ana/src/data_ana/repository/kafka_producer.py Kafka 事件发布idempotent
services/data-ana/src/generated_proto/ Python protobuf 生成代码analytics/iam/events
services/data-ana/scripts/clickhouse_ddl.sql 5 宽表建表脚本
services/data-ana/scripts/seed_clickhouse.py 种子数据脚本
services/data-ana/Dockerfile 多阶段构建python:3.12-slim
packages/shared-proto/proto/analytics.proto gRPC 12 RPC 契约

本文件由 ai11 维护。data-ana 已完成 P2-P5 全部代码实现 + Docker 本地测试通过(无 mock 数据,真实 ClickHouse 查询)。等待 iam 容器就绪后即可端到端联调。