15 KiB
15 KiB
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-workerFailed 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 drop-in 写入
因此当前真实上线完成度需要再补一句校正:
- 发布闭环真实可用度:
- 不是“发布包模型还没修”
- 而是“node-agent 权限模型还差最后一次现网切换”
21:25 最新进展
worker 侧的现网切换已经完成验证成功:
mainland-worker-01- 已把
domaincheck-node-agent切为root - 随后重新发起:
rollout_id = 7job_id = 214
- 最终结果:
job 214 = successrollout 7 = completed
- 已把
正式成功证据:
agent_completedsummary_text = release deployed
restart_results[domaincheck-worker].returncode = 0health_check.ok = truesystemd 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-01job 204 / rollout 5已正式失败回写- 失败原因已收口为:
install_root not writable: /opt/domaincheck/downloads
- 只读核验得到的实际服务状态仍是旧进程:
Active since Sun 2026-04-19 18:18:50 CSTMain PID = 635924CPU = 18.994s
- 说明 worker 当前并没有切到新包,也没有形成可信的新吞吐样本
mainland-controller-01- 当前
domaincheck-worker虽然在高负载运行 - 但服务启动路径同样是:
/opt/domaincheck/domainCheck/detect_worker.py
- 说明 controller 也没有对齐
current软链发布模型
- 当前
本轮代码侧新增收口
- 已补齐发布包构建:
package_domain_release.shverify_domain_release.shpackage_domain_release.ps1verify_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~100max_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的显示仍偏低 - 这已经从“真实执行问题”收敛为“运行态上报 / 显示口径问题”
- overseas 后台对
这一轮不是只修了显示问题,而是把“大陆节点真实执行 + worker 日志回传”一起补齐了。
当前最新结论:
- controller 的
pull_tasks -> 本地队列断点已经修通 - 两台大陆 worker 都已经进入真实镜像队列执行
mainland-worker-01的worker_log已开始直接回灌 overseasdetect_debug_eventsruntime_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
- controller 现在会在每轮
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已恢复成功推送
- controller
本地代码验证已通过:
python -m py_compile domain-api/app/services/sync_push_service.pypython -m py_compile domain-api/app/services/runtime_control_service.pypython -m py_compile domain-api/app/sync_agent.pypython -m py_compile domainCheck/detect_worker.py
2. 接管 / 外部条件闭环
已经完成:
remote_access_ready = 3/3ssh_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.jsDetectView-BFxMNRNR.css
说明:
- 检测页布局调整不是只停留在源码
- 已经进入线上可访问静态产物
2.2 代理运行态闭环
已经完成:
- worker 启动即触发代理池首刷
- 配置变更后自动补刷
- API 状态页已能准确显示:
proxy_not_refreshed_yetproxy_validation_zero宽松入池
当前最新证据:
proxy_last_refresh_status = 直入池 270 个(跳过预验证)proxy_last_refresh_total_items = 270proxy_last_validated_count = 0proxy_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 = 3summary.participating = 3summary.dispatch_active = 1
并且大陆两台都已经被判定为真实参与者:
mainland-controller-01agent_state = online_busyparticipation_state = recent_throughputprocessed_recent = 115processed_per_minute = 7.67detect_runtime.max_threads = 100
mainland-worker-01agent_state = online_busyparticipation_state = recent_throughputprocessed_recent = 632processed_per_minute = 42.13detect_runtime.max_threads = 50
这说明:
- 海外后台已经不只是看到“在线”
- 现在已经能看到大陆节点的实际吞吐
本轮新增硬证据
证据 1:controller 的镜像队列已经真正落库
sync-agent 现场日志已出现:
target_job_code = sync-overseas-7380queued_count = 200worker_start_ok = True
并持续产生:
sync-overseas-7383sync-overseas-7386sync-overseas-7392sync-overseas-7417
说明:
- 大陆 controller 现在不是只拉数据
- 而是在持续形成可执行批次
证据 2:两台大陆 worker 都已转入真实队列
现场日志已明确出现:
- controller:
从任务队列获取到 800 个需要检测的域名
- worker:
从任务队列获取到 400 个需要检测的域名
说明:
- 当前不是兼容旧链路假运行
- 是镜像队列真运行
证据 3:runtime_projection 已恢复成功
修复前:
refresh runtime_projection failed: [Errno 13] Permission denied
修复后:
- 最新
sync-agent日志已出现:sync_state = successruntime_projection -> 投影推送成功
说明:
- 后台运行态刷新和日志窗口不再被 controller 本地权限卡死
证据 4:mainland-worker-01 的 worker_log 已进入 overseas
/api/v1/runtime/debug-events 当前已能看到:
mainland-worker-01 -> 开始执行检测任务,来源: redis-controlmainland-worker-01 -> 开始执行域名检测任务,正在加载配置mainland-worker-01 -> 开始检测,正在刷新代理池mainland-worker-01 -> 代理池刷新完成,共 7 个可用代理,来源链接 6 个,原始 265 个,验证 150 个mainland-worker-01 -> 从任务队列获取到 400 个需要检测的域名mainland-worker-01 -> 开始创建线程,当前批次域名数: 400,最大线程数: 50mainland-worker-01 -> 当前实际线程数量: 1/50mainland-worker-01 -> 当前实际线程数量: 2/50mainland-worker-01 -> 当前实际线程数量: 3/50
说明:
- worker 的真实执行链已经进入 overseas 的日志视图
- “后台看不到大陆 worker 在干活”这一层已经闭合
当前口径说明
这里有一个非常关键的判断口径已经变化:
- 大陆节点当前执行的是“海外任务在大陆本地落镜像队列,再把运行态和结果同步回海外”
- 因此不能再只盯中央原生
detect_job_items.claimed/running - 现在应该同时看:
/api/v1/ops/nodesprocessed_recentprocessed_per_minutedetect_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%
在那之前,当前口径应保持保守。