feat: add edu-industry platform demos

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
lofyer
2026-08-24 11:19:43 +08:00
co-authored by factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
commit 92515928d9
80 changed files with 29880 additions and 0 deletions
+266
View File
@@ -0,0 +1,266 @@
# 产教招聘数据中台生产架构建议
## 1. 目标架构
```text
商业招聘平台 / 公共就业平台 / 校内系统
│
▼
Connector Runtime 集群
┌──────────────┬──────────────┬──────────────┐
│ BOSS Adapter │ 智联 Adapter │ 公共源 Adapter│
└──────────────┴──────────────┴──────────────┘
│
任务、分片、租约、心跳、重试、限速
▼
原始数据层
页面 / JSON / 文件 / 元数据 / SHA-256
│
▼
解析、清洗与标准化流水线
去重 → 企业归一 → 岗位归一 → 技能抽取
│
▼
Schema Registry + Quality Engine
│
▼
版本化标准层与数据产品交付层
Manifest / Schema / Quality / Lineage / Hash
```
## 2. 推荐服务边界
| 服务 | 核心职责 | 推荐存储 |
|---|---|---|
| Source Registry | 数据源、连接器、责任人、目标契约、运行策略 | PostgreSQL |
| Scheduler | 调度计划、任务、分片、租约、心跳、暂停和恢复 | PostgreSQL + Redis |
| Connector Runtime | 源端访问、原始响应生成、增量水位 | Kubernetes Jobs/Workers |
| Raw Store | 原始页面、响应、文件、请求元数据和哈希 | S3/OSS 兼容对象存储 |
| Parser Service | 按来源解析原始快照,输出来源 Schema | 流式计算或批处理 |
| Normalization Service | 企业、岗位、技能、地区和薪资统一 | PostgreSQL + 检索引擎 |
| Schema Registry | JSON Schema、兼容性、版本和发布 | PostgreSQL + Git |
| Quality Engine | 结构、完整性、唯一性、时效和业务规则 | 分布式 SQL/计算引擎 |
| Data Product Service | 标准层版本、Manifest、租户范围和发布回滚 | Lakehouse + PostgreSQL |
| Data Query Service | 标准、源端、原始快照和隔离记录的分页检索、字段权限与证据追溯 | Lakehouse/OLAP + 检索引擎 |
| Audit Service | 统一 trace_id、事件签名、证据和留存 | WORM/Object Lock |
| Operations Service | 告警、问题、工单、SLA、指派、处置时间线和通知待办 | PostgreSQL + 事件总线 |
| Release Approval Service | 候选版本、质量门禁、职责分离审批、稳定别名发布与回滚 | PostgreSQL + 策略引擎 |
| Tenant Delivery Service | 逐租户发送状态、幂等重试、回执验签、记录数/SHA校验和单租户回滚 | PostgreSQL + 消息队列 |
## 3. 连接器 SPI
每个商业或公共平台实现同一接口:
```text
describe() 返回来源、能力、代码版本和目标 Schema
plan(scope, watermark) 根据地域、岗位族和水位生成分片
probe(shard) 小样本连接和结构预检
collect(shard, lease) 执行一个具备租约的采集分片
checkpoint(result) 提交幂等水位和运行摘要
snapshot(response) 生成原始对象、元数据和 SHA-256
parse(snapshot) 解析为来源 Schema
health() 返回入口可达性、延迟和错误分类
```
连接器发布物必须包含:
- 代码仓库、语义版本、提交摘要和构建镜像摘要;
- 支持的数据范围与来源 Schema;
- 小样本、结构回归和历史快照回放结果;
- 默认分片、并发、超时、重试和熔断策略;
- 变更日志、回滚版本和技术责任人。
## 4. 任务状态机
```text
DRAFT
→ PROBING
→ READY
→ QUEUED
→ RUNNING
→ RAW_COMMITTED
→ PARSING
→ NORMALIZING
→ QUALITY_CHECKING
→ AWAITING_APPROVAL
→ PUBLISHED
异常分支:
RUNNING → THROTTLED → RUNNING
任意执行态 → PARTIALLY_FAILED → RETRYING
任意执行态 → QUARANTINED
发布态 → ROLLED_BACK
```
任务必须持久化:
- `job_id`、`source_id`、`connector_version`、`target_contract`;
- 调度计划、业务范围、分片数量、租约和优先级;
- 上次成功水位、本次水位、开始/结束时间;
- 请求量、原始对象数、解析数、有效数、隔离数;
- 错误分类、重试次数、保护动作和 trace_id。
## 5. 数据分层
### Raw
只追加,不覆盖。保存源端响应、页面、文件、请求元数据、采集时间、任务、分片、连接器版本和哈希。
### Source
按来源解析,字段与源端页面或接口一一对应。来源 Schema 独立版本化,解析可通过 Raw 快照重放。
### Standard
映射到 `JOB-SIGNAL`、`SCHOOL-EMPLOYMENT` 等统一契约。企业、岗位、地区、薪资和技能完成归一。
### Product
按数据产品、业务截止日期和租户范围生成不可变版本。报告和分析只引用已发布产品版本。
### 查询与浏览
厂商控制台的“采集数据”页面统一访问 Data Query Service,不允许前端绕过服务直接连接存储:
- **标准岗位**:默认查询当前稳定 `JOB-SIGNAL` 版本,支持来源、地区、岗位、企业和记录编号分页检索;
- **源端记录**:保留来源业务字段、来源URL、采集任务、连接器和解析器版本;
- **原始快照**:先查询对象元数据、SHA-256和留存策略,再按权限获取短期只读访问地址;
- **隔离记录**:显示失败规则、任务、快照、处置状态和重放入口,不进入稳定数据版本;
- 每次查询和导出都执行 RBAC、租户范围、字段权限和审计记录,详情页通过 `record_id → task_id → snapshot_id → content_hash → data_version` 完成追溯。
## 6. 去重与版本
岗位信号建议同时维护:
- 来源幂等键:`source_platform + source_record_id`;
- 内容键:规范化企业、岗位、地区、职责摘要的哈希;
- `first_seen_at`、`last_seen_at`、`published_at`;
- 来源状态和平台状态;
- 原始版本、解析版本、标准版本和数据产品版本。
跨来源相似岗位不能直接删除,应形成岗位信号簇:
```text
JobSignalCluster
├─ BOSS source record
├─ 智联 source record
├─ 公共招聘 source record
└─ 企业正式确认需求
```
分析层可对信号簇去重计数,同时保留每个来源的独立证据。
## 7. 校内数据要求
- 每条记录必须携带 `tenant_id`;
- 学生使用不可逆 `student_token`,不接收姓名、身份证和明文学号;
- 学校专业代码映射到教育部专业目录;
- `source_record_id + source_updated_at` 支持增量和幂等;
- 业务状态必须携带确认时间、确认角色和来源系统;
- 文件导入、API 和数据库视图使用同一目标契约;
- 单租户失败隔离,不影响其他学校生产任务;
- 原始明细和租户交付均按数据范围策略隔离。
## 8. 导入与导出
### 导入
1. 病毒与文件类型检查;
2. 文件哈希、大小、编码和分片登记;
3. JSON Schema 结构检查;
4. 字段映射和代码字典验证;
5. 小样本质量干跑;
6. 全量暂存导入;
7. 质量报告、错误明细和业务复核;
8. 发布不可变版本。
### 导出
每个交付包包含:
- 业务数据文件;
- 精确版本 JSON Schema;
- 字段说明和代码字典;
- 质量报告与失败规则摘要;
- 来源与血缘清单;
- `PACKAGE-MANIFEST`;
- 每个文件的 SHA-256;
- 租户范围、截止日期和上一稳定版本。
### 候选、审批与租户交付闭环
Manifest 生成与发布必须是两个不同事务:
```text
ISSUE / WORK_ORDER
→ INVESTIGATING
→ QUALITY_DISPOSITION(不可变)
→ FIX_REPLAY_VERIFIED
→ RELEASE_CANDIDATE
→ CANDIDATE_MANIFEST_FROZEN
→ PENDING_APPROVAL
→ APPROVED(approver != applicant)
→ PUBLISHED
→ TENANT_DELIVERY
→ DELIVERED
→ ACKNOWLEDGED(record_count 与 SHA-256 同时通过)
```
- `FIX_REPLAY`、`WAIVE`、`DISCARD` 必须记录原因、复核人、操作者、时间、trace_id 和证据;动作只追加,不可覆盖。只有 `FIX_REPLAY` 同时满足重放记录数一致、质量规则全量通过和独立复核签名时,才可写入 `VERIFIED` 并解除候选版本质量门禁。
- `WAIVE` 不等于质量验证通过,若产品允许风险放行,必须进入单独的风险豁免审批状态、风险接受人和到期时间;`DISCARD` 必须先验证丢弃范围、完整性阈值和候选差异并重建候选。两者不得复用普通 `VERIFIED/PASS`。
- `PACKAGE-MANIFEST V1.2` 增加 `release_id` 与 `release_status`。每个租户数据文件必须携带自身记录数和 SHA-256,`tenant_scope`、文件路径和租户授权清单必须一致。
- 候选 Manifest 的 `release_status` 必须为 `DRAFT`,并在提交审批时冻结;驳回后旧候选失效。发布事务生成 `PUBLISHED` Manifest,`approval_reference` 固定引用真实 `APPROVED` 审批单。
- 候选 Manifest 生成接口必须接受幂等键或服务端输入指纹;相同产品、租户、截止日期、格式、质量处置和交付摘要不得重复产生候选或审计事件。
- 后端必须强制申请人与审批人不同,前端校验只能作为交互提示。批准后再以原子别名切换发布稳定版本。
- 每个学校是独立交付状态机:`PENDING → SENDING → DELIVERED → ACKNOWLEDGED`;异常使用 `FAILED → RETRYING`,并支持单租户 `ROLLED_BACK`。成功租户的幂等键阻止重复发送。
- 只有回执记录数等于包记录数、回执 SHA-256 等于 Manifest 文件摘要且回执签名有效时,服务端才能写入 `ACKNOWLEDGED`。
- 全局版本回滚和单租户回滚是不同操作。全局回滚必须先创建独立回滚审批,审批人与申请人分离,再执行稳定别名切换;两类回滚均需目标上一稳定版本、范围锁与不可变审计事件。
原型中的 `localStorage` 只用于静态演示刷新持久化,不能作为跨端协议或生产事实源。
## 9. 安全与运维
- 源端凭据使用 Vault/KMS 管理,配置和日志只保存密钥引用;
- 采集节点使用独立网络出口策略与最小权限;
- 控制台操作采用 RBAC,并区分运营、开发、发布审批和审计;
- 原始对象启用版本、对象锁和生命周期;
- 审计事件使用统一 trace_id,关键事件每日生成签名摘要;
- 指标覆盖采集成功率、源端延迟、解析成功率、队列延迟、质量和交付 SLA;
- 生产发布采用双版本别名,支持秒级回滚到上一稳定版本。
- 所有问题、工单、质量处置、审批、发布、交付和回执写入统一事件模型,至少携带 `id/status/actor/time/trace/evidence`;
- 状态迁移 API 使用乐观锁或版本号避免重复审批、重复发布与重复发送;租户交付以 `tenant_id + package_id + data_version` 作为幂等边界;
- 通知中心从服务端待办查询生成,不依赖前端硬编码。
## 10. 静态原型与正式 API 边界
厂商端和校园端静态页面没有直接连接。原型共享的 `TENANT-HZVTC`、`EDU-PKG-20260823-01`、`V2026.08.23` 仅用于人工对照,页面中的“发送”“回执”“重试”“回滚”不会访问学校。
正式环境至少提供:
- `POST /issues/{id}/acknowledge|assign|investigate|resolve|close` 与带版本条件的工单更新;
- `POST /quality-dispositions`、`POST /quality-dispositions/{id}/verify`,处置动作写不可变事件存储;
- `POST /releases/{id}/manifest|submit|approve|reject|publish|rollback`,服务端执行质量门禁和职责分离;
- `POST /deliveries/{tenant_id}/send|retry|acknowledge|rollback`,执行租户授权、幂等、签名和回执校验;
- `GET /notifications` 与统一审计事件查询/导出 API;
- OAuth/OIDC、RBAC/ABAC、审批人实时身份、请求签名、幂等键、乐观锁、限流和 WORM 审计。
## 11. 分阶段实施
### 第一阶段
- Source Registry、Scheduler、Raw Store;
- BOSS、智联、百日招聘、NCSS、中国公共招聘网五个连接器;
- `JOB-SIGNAL V3.0`;
- 基础质量、岗位归一和 Parquet 交付。
### 第二阶段
- 国聘、区域人才网、校内就业和实习连接器;
- 企业归一、技能词典和薪资标准化;
- 多租户发布、Manifest、审批和回滚。
### 第三阶段
- 全量连接器回归平台;
- 质量规则编排、自动血缘和版本影响分析;
- 供需报告、专业诊断和大屏使用统一数据产品版本。