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

15 KiB
Raw Blame History

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.releasemainland-worker-01 上会因为
      • Permission denied: /opt/domaincheck/downloads
      • 而直接失败
    • mainland 两台节点当前 domaincheck-workerExecStart 都直接指向:
      • /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
    • 现在会在发布目录不可写时显式返回失败结果
    • 同时补充 ExecStartcurrent 软链的对齐观测
  • 已补齐 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-01worker_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 本地权限卡死

证据 4mainland-worker-01worker_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%

在那之前,当前口径应保持保守。