mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-21 00:17:47 +08:00
feat(ql3): expose bounded worker session observation
This commit is contained in:
@@ -11,6 +11,26 @@
|
||||
|
||||
最新增量证据(2026-08-20):
|
||||
|
||||
- D-373/ADR-0466(已接受):完成 D-372 的首个 caller-driven Worker 管理只读面。在既有 Worker management
|
||||
service/transport/client 内增加 `worker-session.inspect|list`,继续复用同一个 TLS 1.3/mTLS/OIDC listener、强 User
|
||||
`worker.manage` 与耐久 `worker-session.observe` quota,不新增 package、服务、端口、连接池、timer、watcher、queue、
|
||||
cache 或 Deployment。`pg-0069-worker-session-management-observation` 把 `control-core` 升至 v68,只给
|
||||
`ql3_worker_credential_manager` 增加 `SELECT worker_sessions`;point 只读一个 canonical Worker,list 固定查询 17 行并
|
||||
最多返回 16 行 `workerId` keyset。响应只投影 Session/generation/version、`online|draining|offline|lease_expired`、
|
||||
`default_placement|explicit_placement_required|protocol_incompatible`、architecture/Tier/protocol、OS、并发与有界
|
||||
runtime/capacity,不返回 raw capability、label、GPU model、credential、Secret 或 lease capability。alpha 继续复用历史
|
||||
`/api/v3/worker-credentials/management` 是明确的命名债务,Beta 前须决定通用 Worker management alias/CLI 迁移,不能
|
||||
复制第二个 listener。PostgreSQL 聚焦 migration/readiness `76/76`,Cluster PostgreSQL 全量
|
||||
`351 total / 348 pass / 3 conditional skip / 0 fail`,Cluster Admin 全量
|
||||
`421 total / 418 pass / 3 conditional skip / 0 fail`;package boundary、Cluster dependency、Edge import、Cluster
|
||||
deployment 与 Worker deployment 全部 compatible,18 packages 仍无 single/shallow package且没有新增外部 dependency。
|
||||
完整 backend 为 `1,503 total / 1,501 pass / 2 conditional skip / 0 fail`(包含一条不进入本阶段提交的既有用户测试)。
|
||||
14 档 Local artifact audit 全部 compatible;基础 Edge/Standalone 为 `2,598,669 / 2,598,747` bytes、57 loaded modules,
|
||||
Application+AI 为 `4,501,822 / 4,501,954` bytes,MCP 为 `7,324,601 / 7,324,709` bytes。
|
||||
PostgreSQL 18.6 arm64 HA `146/146`、timeline `1→2`,报告 SHA-256 为
|
||||
`c4cf0189b68d7af18169cd8f8de726e26a970af703f28d4ffe0ad3ace96fa596`,真实 Worker manager role readiness、promotion、
|
||||
fencing、`pg_rewind` 与只读 rejoin 全绿。Edge/Standalone 和禁用 Worker manager 的 Cluster 路径保持零新增常驻成本。
|
||||
|
||||
- D-372/ADR-0465(已接受):把 D-371 的发布架构分层推进到 Remote Worker 的实际注册与调度边界。Worker canonical
|
||||
capability 现在必须声明 `protocolVersion` 与 `supportTier`,架构/Tier 必须与根 release identity v2 一致,Node
|
||||
`x64/ppc64/ia32/arm` 会归一化到发布词汇并与实际 Worker 进程复验。普通 Task 即使未声明 Placement 也只匹配 Tier 1
|
||||
@@ -6457,6 +6477,12 @@ ARMv6/386 的 2.x 进程已经能直接连接 3.0,也不授予 Plugin Host、
|
||||
Maintainers 要求 ARMv6、ARMv7 或 386 成为 3.0 正式支持项,必须先修改 D-16 或长期维护对应 Node 24 构建链,
|
||||
升级 release identity schema,并通过与现有 Tier 1 同等级的发布门禁。
|
||||
|
||||
D-373/ADR-0466 已把该分层投影到 caller-driven Worker 管理只读面:operator 可以 point inspect 或显式读取固定 16 项
|
||||
keyset page,区分 Session lifecycle 与 Placement compatibility,并查看有界 runtime/capacity;不能请求任意 filter、
|
||||
limit、自动翻页或轮询。该能力复用现有 Worker manager 进程和 `worker.manage`/耐久 quota,PostgreSQL role 只新增
|
||||
`SELECT worker_sessions`,所以不会进入 Edge/Standalone 常驻闭包。alpha 的 credential-named URI/CLI 是待 Beta 迁移的
|
||||
命名债务,不得用新建第二套 listener、Deployment 或 package 的方式修复。
|
||||
|
||||
### 7.10 资源基准与发布门禁
|
||||
|
||||
每个 3.x 版本至少记录以下基准:
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
# ADR-0466:有界 Worker Session 兼容性观察
|
||||
|
||||
- 状态:Accepted
|
||||
- 日期:2026-08-20
|
||||
- 关联 RFC:QL-RFC-0001 D-373、D-14、D-16、D-107
|
||||
- 关联 ADR:ADR-0012、ADR-0146、ADR-0464、ADR-0465
|
||||
- Amends:ADR-0465 的 Worker 管理只读面后续边界
|
||||
|
||||
## 上下文
|
||||
|
||||
ADR-0465 已让 Worker Session 持久化 canonical architecture、support Tier 与 protocol version,并让 Scheduler
|
||||
按 Tier 1 默认和显式 Placement 执行准入。但 operator 仍只能从数据库或日志拼接状态,无法通过受认证管理面回答:
|
||||
|
||||
- 当前 Session 是在线、draining、offline,还是 lease 已过期;
|
||||
- Worker 是否可进入默认 Placement、必须显式选择,还是协议不兼容;
|
||||
- 运行时、并发和声明容量是否足以解释“注册成功但没有领取任务”;
|
||||
- 一个指定 Worker 的 generation/session version,或按稳定顺序查看下一小页 Worker。
|
||||
|
||||
另建 package、服务或轮询器会扩大低配部署和 Cluster 运维成本;直接返回 `capabilities_json`、labels、GPU model、
|
||||
credential 或 lease token 又会把不必要的调度与 Secret 事实暴露到管理客户端。现有 Worker credential manager 已拥有
|
||||
独立 TLS 1.3/mTLS/OIDC、强 User、`worker.manage`、耐久 quota、单独 PostgreSQL role 与固定 HTTP 路径,可以承载
|
||||
同一 Worker 管理域的按需只读观察,但它的历史命名仍偏向 credential。
|
||||
|
||||
## 决策
|
||||
|
||||
1. 在既有三个职责边界内实现,不新增 workspace package:
|
||||
- `@qinglong/runtime-core/worker-session-observation` 拥有低敏投影和状态推导;
|
||||
- `@qinglong/cluster-postgres` 的 `remote-execution` 领域拥有只读 repository;
|
||||
- `@qinglong/cluster-admin` 的既有 Worker management service/transport/client 暴露管理操作。
|
||||
2. 增加两个精确 operation:`worker-session.inspect` 与 `worker-session.list`。alpha 阶段继续复用固定
|
||||
`/api/v3/worker-credentials/management` listener、进程、连接池和客户端协议,不创建第二个 Worker 管理进程。
|
||||
该 URI 与 binary 的 credential 命名是明确的产品债务;Beta 前必须决定兼容 alias/通用 Worker management 路径,
|
||||
不能长期让通用 Worker 观察依附于误导性名称。
|
||||
3. 两个操作都要求 fresh 强认证 User、authority Project 上的 `worker.manage`,并使用单一耐久 quota operation
|
||||
`worker-session.observe`。默认窗口上限为 600;inspect/list 以各自 `inspectionId` 派生幂等 receipt,caller 不能
|
||||
选择 quota operation、窗口或 limit。
|
||||
4. PostgreSQL `pg-0069-worker-session-management-observation` 把 `control-core` 升至 capability v68,并只给
|
||||
`ql3_worker_credential_manager` 增加 `SELECT` on `ql3.worker_sessions`。迁移先 `REVOKE ALL` 再精确 `GRANT SELECT`;
|
||||
manager 不取得 INSERT/UPDATE/DELETE/TRUNCATE,executor、runtime 及其它管理角色不因本能力扩权。
|
||||
5. point inspect 只按 canonical `workerId` 查询,最多接受一条 Session;list 固定读取 17 行、最多返回 16 行,按
|
||||
`workerId` 升序 keyset 分页。caller 只能提供 nullable `afterWorkerId`,不能提供 limit、排序、过滤表达式、自动翻页
|
||||
或任意 SQL 字段。
|
||||
6. 每次 repository 调用用 PostgreSQL `statement_timestamp()` 取得一个数据库观察时间。生命周期与兼容性是投影,
|
||||
不是新的持久状态机:
|
||||
- lifecycle 为 `online|draining|offline|lease_expired`;
|
||||
- compatibility 为 `default_placement|explicit_placement_required|protocol_incompatible`;
|
||||
- protocol v1 且 Tier 1 才是 default placement;其它受支持 Tier 必须显式 Placement;不满足全局协议范围则不兼容。
|
||||
7. list 只返回 Worker/Session/generation/version、lifecycle/compatibility、architecture/Tier/protocol、OS、并发与时间;
|
||||
point inspect 额外返回最多 32 个 runtime 及 `{cpuCores,memoryBytes,diskBytes,gpuCount}`。任何响应都不得返回 raw
|
||||
capability JSON/hash、labels、features、GPU model、credential、Secret、authentication identity 或 lease capability。
|
||||
8. PostgreSQL row、runtime-core projection 和远程 client 分别执行严格校验。客户端拒绝未知字段、负数/越界容量、
|
||||
时间关系漂移、无序 page、cursor 漂移、observedAt 不一致和 secret-bearing widening,不能把受攻击的管理响应作为
|
||||
可信事实呈现。
|
||||
9. 本能力是 caller-driven one-shot read:不新增 listener、Deployment、Service、连接池、timer、watcher、queue、cache
|
||||
或后台扫描。Edge/Standalone 与未启用 Worker manager 的 Cluster 路径不加载这些入口,也不创建 PostgreSQL authority。
|
||||
|
||||
## 升级与回滚
|
||||
|
||||
- 先用 migration role 执行 `pg-0069`,再滚动升级 Worker manager;旧 manager 不使用新增 SELECT,混合窗口安全。
|
||||
- 回滚应用时可以保留 v68 schema 与只读 GRANT;旧应用 readiness 不接受 ahead-of-code schema,因此完整回滚必须使用
|
||||
对应数据库备份/受审降级流程,不能手工改写 migration history 或 capability JSON。
|
||||
- 两个 operation 不修改 Session,也不影响 Worker heartbeat、Scheduler placement 或 execution revision digest;关闭
|
||||
Worker manager 即可撤销网络可达性。
|
||||
|
||||
## 被拒绝的替代方案
|
||||
|
||||
### 新建 `worker-observability` package 和常驻服务
|
||||
|
||||
拒绝。这里只有一个投影契约、一个 repository 与两个管理操作,没有独立部署、扩缩容或权限生命周期;拆包会重新
|
||||
制造用户已指出的单文件/浅层 package,并让路由设备与供应链承担无收益边界。
|
||||
|
||||
### 直接返回 capability JSON 或 labels
|
||||
|
||||
拒绝。它会扩大响应、把未来字段默认公开,并泄露调度标签、硬件型号或可用于定向攻击的细节。管理面只返回明确评审的
|
||||
固定投影。
|
||||
|
||||
### list 接受 caller limit、任意 filter 和自动轮询
|
||||
|
||||
拒绝。caller-controlled query 会使低配管理节点承担不可预测扫描,自动轮询会引入空闲网络、数据库和 CPU 成本。固定
|
||||
16 项 keyset 页面需要 operator 显式发起下一次读取。
|
||||
|
||||
### 为观察结果新建数据库表
|
||||
|
||||
拒绝。lifecycle 与 compatibility 都能由 immutable capability、Session 状态、lease 和数据库时钟确定;复制一份状态会
|
||||
产生跨副本漂移和额外写放大。
|
||||
|
||||
## 验证与证据
|
||||
|
||||
- runtime-core 聚焦测试覆盖四种 lifecycle、三种 compatibility、Tier/协议、详细/摘要投影和非法数据库时间。
|
||||
- Cluster PostgreSQL repository 测试覆盖 point、masked absence、固定 16+1 keyset、同一数据库时钟、身份/排序/行上限
|
||||
与 canonical capability fail-closed。
|
||||
- Cluster Admin service/transport/client 测试覆盖强 User + `worker.manage`、耐久 quota、六种现有 Worker management
|
||||
operation、严格响应交叉不变量与 secret-bearing widening 拒绝。
|
||||
- PostgreSQL migration/readiness 聚焦门 `76/76`;Cluster PostgreSQL 全量 `351 total / 348 pass / 3 conditional skip /
|
||||
0 fail`;Cluster Admin 全量 `421 total / 418 pass / 3 conditional skip / 0 fail`。
|
||||
- 完整 backend 工作区为 `1,503 total / 1,501 pass / 2 conditional skip / 0 fail`;总数包含工作树中既有且不进入
|
||||
本阶段提交的用户测试,本提交没有修改或暂存该文件。
|
||||
- PostgreSQL 18.6 arm64 physical HA 门 `146/146`、timeline `1→2`,报告 SHA-256 为
|
||||
`c4cf0189b68d7af18169cd8f8de726e26a970af703f28d4ffe0ad3ace96fa596`。主库 readiness 使用真实
|
||||
`ql3_worker_credential_manager` 连接复验 v68 migration 与精确 Worker manager ACL;promotion、旧主 fencing、
|
||||
`pg_rewind` 和只读 rejoin 全绿。
|
||||
- package boundary、Cluster dependency、Edge import、Cluster deployment 与 Worker deployment 审计全部 compatible;
|
||||
workspace 保持 18 packages,`singleSourcePackages=[]`、`shallowSourcePackages=[]`。runtime-core 为 `171 source / 170
|
||||
nested`,Cluster PostgreSQL 为 `175 source / 174 nested`,没有新增外部 dependency。
|
||||
- 14 档 Local artifact audit 全部 compatible;基础 Edge/Standalone 为 `2,598,669 / 2,598,747` bytes 且都只加载
|
||||
57 modules,Application+AI 为 `4,501,822 / 4,501,954` bytes,MCP 为 `7,324,601 / 7,324,709` bytes。新增子路径被
|
||||
artifact projection 裁剪,没有进入低配 Profile 启动闭包。
|
||||
|
||||
## 后续边界
|
||||
|
||||
- Beta 前提供不误导的通用 Worker management 路径/CLI 命名及兼容迁移,不复制 listener 或 authority。
|
||||
- Console/UI 若接入,必须保持显式点击、固定 16 项、无轮询/自动翻页,并隔离短期 assertion;不能把管理 capability
|
||||
放入普通 Project API credential。
|
||||
- 如需按 Project、label、资源池或健康历史查询,必须先定义 ownership、索引、保留期、响应预算与隐私边界;不得把
|
||||
本次 cluster-wide 当前 Session 读取悄悄扩成无界 inventory/metrics 系统。
|
||||
- 当前沿用既有 Worker credential management 的 quota/认证模型;若统一管理面引入持久化 read-access audit,应对
|
||||
credential inspect 与 Session observe 一并设计事务和 retention,不能只给其中一个操作制造不一致的审计语义。
|
||||
@@ -469,6 +469,7 @@
|
||||
| [ADR-0463](./ADR-0463-native-console-capacity-and-assertion-lifecycle-evidence.md) | 原生双架构 Console 容量与 Assertion 生命周期证据 | Accepted(首份原生 CI 双架构报告待实际运行) |
|
||||
| [ADR-0464](./ADR-0464-machine-enforced-node24-architecture-support-tiers.md) | 机器化 Node 24 架构支持分层 | Accepted |
|
||||
| [ADR-0465](./ADR-0465-versioned-worker-support-tier-admission.md) | 版本化 Worker 支持等级准入 | Accepted |
|
||||
| [ADR-0466](./ADR-0466-bounded-worker-session-compatibility-observation.md) | 有界 Worker Session 兼容性观察 | Accepted |
|
||||
|
||||
## 规则
|
||||
|
||||
|
||||
Reference in New Issue
Block a user