Files
getDomain/docs/ops_center_runtime/IMPLEMENTATION_STATUS.md
Your Name 7cbde2aa78 d
2026-04-22 14:13:21 +08:00

484 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IMPLEMENTATION_STATUS
更新时间2026-04-19 21:25 CST
## 当前真实状态
阶段判断:
- 海外单脑接管能力:约 `97%`
- 发布闭环真实可用度:约 `65%~70%`
- 分布式检测真实执行能力:约 `80%~85%`
- 距离“可稳定上线并放心用后台发起检测”:约 `78%~82%`
## 21:17 最新校正
刚完成的 `mainland-worker-01` 正式 rollout 已给出最终根因:
- `job 211 / rollout 6 / release 7`
- 发布包下载成功
- release 解压成功
- `current` 软链切换成功
- 最终失败在服务重启:
- `restart failed: domaincheck-worker`
- `Failed to restart domaincheck-worker.service: Interactive authentication required.`
这说明:
- 当前 ReleaseHub 主链路本身已可推进到“切换 current”
- 真正未闭环的是 mainland node-agent 的 systemd 权限
- 只要 node-agent 仍以 `www` 运行,后续 `deploy.release / service.restart` 都会在 systemd 这一跳失败
已完成的代码侧修正:
- `domain-api/deploy/systemd/domain-node-agent.service`
- 改为 `User=root`
- 改为 `Group=root`
- `domain-api/deploy/multi-region/fix_mainland_release_base.sh`
- 改为给 node-agent drop-in 写入 `User=root` / `Group=root`
因此当前真实上线完成度需要再补一句校正:
- 发布闭环真实可用度:
- 不是“发布包模型还没修”
- 而是“node-agent 权限模型还差最后一次现网切换”
## 21:25 最新进展
worker 侧的现网切换已经完成验证成功:
- `mainland-worker-01`
- 已把 `domaincheck-node-agent` 切为 `root`
- 随后重新发起:
- `rollout_id = 7`
- `job_id = 214`
- 最终结果:
- `job 214 = success`
- `rollout 7 = completed`
正式成功证据:
- `agent_completed`
- `summary_text = release deployed`
- `restart_results[domaincheck-worker].returncode = 0`
- `health_check.ok = true`
- `systemd ExecStart` 已对齐:
- `/opt/domaincheck/current/domainCheck/detect_worker.py`
因此当前关于发布闭环的真实判断应更新为:
- worker 发布闭环:
- 已从“卡在 systemd restart 权限”推进到“真实成功”
- 当前剩余风险不再在 worker
- 当前剩余预防项在 controller
- `domaincheck-node-agent` 也应同步切为 `root`
## 顶部校正
今天晚上的最新结论,需要覆盖前面一部分偏乐观判断:
- 最新发布包问题已经定位并修复:
- 之前发布包漏掉了 `domainCheck/`
- 现在最新签收包 `domaincheck_release_20260419_205437` 已经包含 `domainCheck/`
- 但对 `mainland-worker-01` 的正式发布验证证明:
- 线上 mainland 节点目前还不满足现有 ReleaseHub 发布模型
- 已确认的真实阻塞有两个:
- `deploy.release``mainland-worker-01` 上会因为
- `Permission denied: /opt/domaincheck/downloads`
- 而直接失败
- mainland 两台节点当前 `domaincheck-worker``ExecStart` 都直接指向:
- `/opt/domaincheck/domainCheck/detect_worker.py`
- 而不是 `/opt/domaincheck/current/domainCheck/detect_worker.py`
这两个事实组合起来说明:
- 当前发布链虽然在控制面上已经成型
- 但 mainland 线上节点的安装形态还是旧模式
- 所以当前不能再把“已能稳定 rollout 新版本”算进上线完成度
## 今晚新增硬证据
- `mainland-worker-01`
- `job 204 / rollout 5` 已正式失败回写
- 失败原因已收口为:
- `install_root not writable: /opt/domaincheck/downloads`
- 只读核验得到的实际服务状态仍是旧进程:
- `Active since Sun 2026-04-19 18:18:50 CST`
- `Main PID = 635924`
- `CPU = 18.994s`
- 说明 worker 当前并没有切到新包,也没有形成可信的新吞吐样本
- `mainland-controller-01`
- 当前 `domaincheck-worker` 虽然在高负载运行
- 但服务启动路径同样是:
- `/opt/domaincheck/domainCheck/detect_worker.py`
- 说明 controller 也没有对齐 `current` 软链发布模型
## 本轮代码侧新增收口
- 已补齐发布包构建:
- `package_domain_release.sh`
- `verify_domain_release.sh`
- `package_domain_release.ps1`
- `verify_domain_release.ps1`
- 现在发布包会包含 `domainCheck/`
- 已补齐发布执行器的失败可观测性:
- `domain-api/app/services/ops_release_executor_core.py`
- 现在会在发布目录不可写时显式返回失败结果
- 同时补充 `ExecStart``current` 软链的对齐观测
- 已补齐 node-agent 的兜底失败回写:
- `domain-api/app/node_agent.py`
- 避免以后再出现任务已经炸掉但控制面一直卡在 `running`
## 本轮最新结论
新增结论:
- 检测页观察面已完成一轮线上收口:
- `任务日志控制台` 已移到事件表上方
- `检测事件流` 已改成独立滚动区
- 已在真实线上静态目录重建生产包并通过本机 `3201` 端口验证
- 当前如果用户仍看到旧布局,优先判断为浏览器缓存而不是部署未生效
- 代理链已完成策略切换:
- worker 启动后会主动刷新代理池
- 配置更新后也会主动刷新代理池
- 后台已能区分:
- `等待首刷`
- `proxy_validation_zero`
- `直入池`
- 当前本机最新真实结果是:
- 原始代理 `270`
- 预验证 `0`
- 直入池 `270`
- 说明当前问题已经从“代理校验过严导致池为空”切换为“真实任务内动态淘汰失效代理”
- `mainland-controller-01`
- 已确认解除“代理不足即同步刷新、反向压死并发”的旧限制
- 海外后台当前已能看到:
- `active_threads = 99~100`
- `max_threads = 100`
- 说明 controller 的 `100` 并发已经真实生效
- `mainland-worker-01`
- 已重新部署最新版 `detect_worker.py`
- 已重新接收新的 `sync-pull` 批次并重进检测:
- `开始执行域名检测任务`
- `开始检测,刷新代理池`
- `代理池刷新完成,共 23 个可用代理`
- `开始创建线程,当前批次域名数: 400最大线程数: 50`
- 当前 worker 进程本机线程量已到:
- `152` 个 OS 线程
- 说明它并不是没启动,而是已经进入新批次执行
- 当前剩余偏差:
- overseas 后台对 `mainland-worker-01.active_threads/current_load` 的显示仍偏低
- 这已经从“真实执行问题”收敛为“运行态上报 / 显示口径问题”
这一轮不是只修了显示问题,而是把“大陆节点真实执行 + worker 日志回传”一起补齐了。
当前最新结论:
- controller 的 `pull_tasks -> 本地队列` 断点已经修通
- 两台大陆 worker 都已经进入真实镜像队列执行
- `mainland-worker-01``worker_log` 已开始直接回灌 overseas `detect_debug_events`
- `runtime_projection` 权限问题已经修复,后台运行态同步恢复
- `/api/v1/ops/nodes` 已能证明 controller 的高并发真实生效
- 当前剩余问题已经收敛为:
- `mainland-worker-01` 运行态显示口径仍需继续对齐
- 检测页主计数口径是否完全跟上
- 结果统计回推是否持续稳定
## 当前证据拆分
### 1. 代码闭环
已经完成:
- `sync_push_service.ingest_detect_task_projection`
- 不再只导入 `domains`
- 已改为同时创建本地 `detect_jobs`
- 已改为同时创建本地 `detect_job_items`
- 已把 `target_job_id / target_job_code / queued_count / worker_start_ok` 回写到同步结果
- `sync_agent`
- controller 现在会在每轮 `pull_tasks` 后自动唤起本地 worker
- `detect_worker._set_active_cycle_context`
- 已兼容 `sync-pull` 控制消息
- 不再只读取 `job_id / job_code`
- 现在会回退读取 `target_job_id / target_job_code`
- 运行态同步链
- controller `runtime/detect_runs.json` 权限已修正为 `www:www`
- `runtime_projection` 已恢复成功推送
本地代码验证已通过:
- `python -m py_compile domain-api/app/services/sync_push_service.py`
- `python -m py_compile domain-api/app/services/runtime_control_service.py`
- `python -m py_compile domain-api/app/sync_agent.py`
- `python -m py_compile domainCheck/detect_worker.py`
### 2. 接管 / 外部条件闭环
已经完成:
- `remote_access_ready = 3/3`
- `ssh_ready = 2`
- 大陆 controller / worker 都可远程运维
- controller `domaincheck-sync-agent` 在线
- mainland 两台 `domaincheck-node-agent` 在线
当前仍依赖你额外输入的部分:
- 暂无新的 SSH / 接管前置输入缺口
- 如果页面仍显示旧状态,最多只需要你浏览器强刷确认,不需要再补 SSH 信息
### 2.1 前端部署闭环
已经完成:
- 在线静态根目录确认:
- `/www/wwwroot/getDomain/domain-web/dist`
- 在线 Nginx 配置确认:
- `/www/server/panel/vhost/nginx/domaincheck_3201.conf`
- `/www/server/panel/vhost/nginx/domaincheck_152.53.37.118.conf`
- 生产包重建确认:
- `vite build` 成功
- 线上资源确认:
- `DetectView-B9S1WMRT.js`
- `DetectView-BFxMNRNR.css`
说明:
- 检测页布局调整不是只停留在源码
- 已经进入线上可访问静态产物
### 2.2 代理运行态闭环
已经完成:
- worker 启动即触发代理池首刷
- 配置变更后自动补刷
- API 状态页已能准确显示:
- `proxy_not_refreshed_yet`
- `proxy_validation_zero`
- `宽松入池`
当前最新证据:
- `proxy_last_refresh_status = 直入池 270 个(跳过预验证)`
- `proxy_last_refresh_total_items = 270`
- `proxy_last_validated_count = 0`
- `proxy_last_available_count = 270`
说明:
- 代理配置本身已成功下发
- 代理源接口本身也能返回大量原始代理
- 当前不再把“预验证是否通过”作为入池门槛
- 现在改为让真实检测来完成失效代理淘汰
### 3. 检测执行闭环
这一块现在已经从“怀疑恢复”进入“确认恢复”:
- `mainland-controller-01`
- 已出现:
- `从任务队列获取到 800 个需要检测的域名`
- `最大线程数: 100`
- `当前实际线程数量: 1/100 ... 6/100`
- `mainland-worker-01`
- 已出现:
- `从任务队列获取到 400 个需要检测的域名`
- `开始创建线程,当前批次域名数: 400最大线程数: 50`
- `当前实际线程数量: 1/50 ... 3/50`
- `开始检测域名: 0-demagogo.com`
- `开始检测域名: 00123321.com`
- `开始检测域名: 001dm.com`
这说明:
- `100/50` 已不是“配置已写入但没生效”
- 它已经进入真实任务消费
- worker 的远端日志也已经跟着真实执行一起回传
### 4. 海外后台可视证据
`/api/v1/ops/nodes` 当前已显示:
- `summary.remote_access_ready = 3`
- `summary.participating = 3`
- `summary.dispatch_active = 1`
并且大陆两台都已经被判定为真实参与者:
- `mainland-controller-01`
- `agent_state = online_busy`
- `participation_state = recent_throughput`
- `processed_recent = 115`
- `processed_per_minute = 7.67`
- `detect_runtime.max_threads = 100`
- `mainland-worker-01`
- `agent_state = online_busy`
- `participation_state = recent_throughput`
- `processed_recent = 632`
- `processed_per_minute = 42.13`
- `detect_runtime.max_threads = 50`
这说明:
- 海外后台已经不只是看到“在线”
- 现在已经能看到大陆节点的实际吞吐
## 本轮新增硬证据
### 证据 1controller 的镜像队列已经真正落库
`sync-agent` 现场日志已出现:
- `target_job_code = sync-overseas-7380`
- `queued_count = 200`
- `worker_start_ok = True`
并持续产生:
- `sync-overseas-7383`
- `sync-overseas-7386`
- `sync-overseas-7392`
- `sync-overseas-7417`
说明:
- 大陆 controller 现在不是只拉数据
- 而是在持续形成可执行批次
### 证据 2两台大陆 worker 都已转入真实队列
现场日志已明确出现:
- controller
- `从任务队列获取到 800 个需要检测的域名`
- worker
- `从任务队列获取到 400 个需要检测的域名`
说明:
- 当前不是兼容旧链路假运行
- 是镜像队列真运行
### 证据 3runtime_projection 已恢复成功
修复前:
- `refresh runtime_projection failed: [Errno 13] Permission denied`
修复后:
- 最新 `sync-agent` 日志已出现:
- `sync_state = success`
- `runtime_projection -> 投影推送成功`
说明:
- 后台运行态刷新和日志窗口不再被 controller 本地权限卡死
### 证据 4`mainland-worker-01` 的 `worker_log` 已进入 overseas
`/api/v1/runtime/debug-events` 当前已能看到:
- `mainland-worker-01 -> 开始执行检测任务,来源: redis-control`
- `mainland-worker-01 -> 开始执行域名检测任务,正在加载配置`
- `mainland-worker-01 -> 开始检测,正在刷新代理池`
- `mainland-worker-01 -> 代理池刷新完成,共 7 个可用代理,来源链接 6 个,原始 265 个,验证 150 个`
- `mainland-worker-01 -> 从任务队列获取到 400 个需要检测的域名`
- `mainland-worker-01 -> 开始创建线程,当前批次域名数: 400最大线程数: 50`
- `mainland-worker-01 -> 当前实际线程数量: 1/50`
- `mainland-worker-01 -> 当前实际线程数量: 2/50`
- `mainland-worker-01 -> 当前实际线程数量: 3/50`
说明:
- worker 的真实执行链已经进入 overseas 的日志视图
- “后台看不到大陆 worker 在干活”这一层已经闭合
## 当前口径说明
这里有一个非常关键的判断口径已经变化:
- 大陆节点当前执行的是“海外任务在大陆本地落镜像队列,再把运行态和结果同步回海外”
- 因此不能再只盯中央原生 `detect_job_items.claimed/running`
- 现在应该同时看:
- `/api/v1/ops/nodes`
- `processed_recent`
- `processed_per_minute`
- `detect_runtime.active_threads/max_threads`
- 大陆 controller 本地 `sync-overseas-*` 队列
如果只看中央原生队列,会误判“大陆没有参与”。
## 当前已闭合的问题
已闭合:
- controller `pull_tasks` 只导入 domain、不导入本地队列
- 大陆 worker 长时间卡在旧检测会话导致忽略新启动指令
- controller `runtime_projection` 因文件属主错误无法推送
- 大陆两台“在线但不确定是否真实执行”的状态模糊
## 当前剩余问题
当前剩余问题已经缩成两个最小项:
- Detect 页面主计数 `pending/completed/running` 是否继续推进
- 结果统计回推是否稳定,而不只是日志链路先恢复
换句话说:
- 现在不是接管问题
- 不是链路不通问题
- 不是日志完全回不来问题
- 而是最后一层“主计数推进 + 结果统计收口”问题
## 当前是否可以继续跑检测测试
当前结论:
- 可以继续跑检测测试
- 而且现在已经具备“后台可观测 + 大陆真实参与”的条件
## 当前是否建议直接上线
当前结论:
- 已接近可上线状态
- 但我仍建议把它视为“准上线收口态”,不是最终完全签收态
原因:
- 主执行链已经恢复
- 但还需要再确认 1 到 2 个同步周期内页面口径与吞吐稳定性
## 当前优先级判断
最高优先级:
- `J2-检测执行收口批`
当前不应继续推进:
- 新控制面功能
- 新模块
- 新页面
- 发布动作
- 与检测执行收口无关的工作
## 完成下一轮后的预期
如果下一轮确认:
- Detect 页面主计数已跟上
- 日志窗口持续刷新
- `detect_result_projection` 持续推进
- `processed_recent / processed_per_minute` 持续增长
则整体可上线程度预计可提升到:
- `96%~98%`
在那之前,当前口径应保持保守。