执行器管理 API
本文引用的文件 - src/admin_server.v - src/admin_workers.v - src/admin/types.v - src/executor/types.v - src/admin/state.v - src/worker_backend_admin_runtime.v - src/worker_backend_lifecycle_runtime.v - src/worker_backend_drain_runtime.v - README.md
目录
简介
本文件面向运维与平台工程师,系统化梳理 vhttpd 的“执行器管理”相关管理平面 API,重点覆盖以下能力: - Worker 进程状态查询(Worker 池快照、单进程指标) - 执行器规格信息获取(逻辑执行器类型、模型、运行时配置等) - Worker 池管理操作(重启单个/全部 Worker、优雅排空 Drain) - 生命周期状态、执行器类型定义、资源使用情况统计 - 完整的响应数据结构说明与批量操作示例
项目结构
与执行器管理相关的代码主要分布在如下模块: - 管理平面 HTTP 路由与鉴权:admin_server.v - 数据平面 Worker 管理端点:admin_workers.v - 通用管理与认证类型:admin/types.v - 执行器模型与管理员可见的规格详情:executor/types.v - 运行时快照构建(包含执行器摘要、队列与活跃连接计数等):admin/state.v - Worker 后端管理(按 ID 重启、全量重启、Drain 状态计算):worker_backend_admin_runtime.v、worker_backend_lifecycle_runtime.v、worker_backend_drain_runtime.v
graph TB
Client["客户端"] --> AdminPlane["管理平面<br/>/admin/*"]
Client --> DataPlane["数据平面<br/>/admin/workers* (on_data_plane)"]
AdminPlane --> AdminServer["admin_server.v"]
DataPlane --> AdminWorkers["admin_workers.v"]
AdminServer --> SharedApp["共享 App 实例"]
AdminWorkers --> SharedApp
SharedApp --> WorkerAdminRuntime["worker_backend_admin_runtime.v"]
SharedApp --> Lifecycle["worker_backend_lifecycle_runtime.v"]
SharedApp --> Drain["worker_backend_drain_runtime.v"]
AdminServer --> ExecutorTypes["executor/types.v"]
AdminWorkers --> AdminTypes["admin/types.v"]
AdminServer --> AdminState["admin/state.v"]
图表来源 - src/admin_server.v:117-141 - src/admin_workers.v:8-25 - src/worker_backend_admin_runtime.v:42-82 - src/worker_backend_lifecycle_runtime.v:72-134 - src/worker_backend_drain_runtime.v:104-155 - src/executor/types.v:65-91 - src/admin/types.v:8-35 - src/admin/state.v:56-102
章节来源 - src/admin_server.v:117-141 - src/admin_workers.v:8-25 - src/admin/types.v:8-35 - src/executor/types.v:65-91 - src/admin/state.v:56-102
核心组件
- 管理平面路由与鉴权
- /health、/admin/workers、/admin/stats、/admin/executors 等由 admin_server.v 提供,统一鉴权与 JSON 响应封装。
- 数据平面 Worker 管理
- /admin/workers、/admin/workers/restart、/admin/workers/restart/all、/admin/workers/drain 在 on_data_plane=true 时可用,由 admin_workers.v 暴露。
- Worker 后端管理
- 按 ID 重启、全量重启、Drain 状态聚合由 worker_backend_admin_runtime.v 与 worker_backend_lifecycle_runtime.v、worker_backend_drain_runtime.v 实现。
- 执行器规格与运行时快照
- executor/types.v 定义执行器模型与管理员可见的详细信息;admin/state.v 汇总运行期统计与执行器摘要。
章节来源 - src/admin_server.v:117-141 - src/admin_workers.v:8-25 - src/worker_backend_admin_runtime.v:42-82 - src/worker_backend_lifecycle_runtime.v:72-134 - src/worker_backend_drain_runtime.v:104-155 - src/executor/types.v:65-91 - src/admin/state.v:56-102
架构总览
下图展示了管理平面与数据平面的职责划分以及关键调用链。
sequenceDiagram
participant C as "客户端"
participant AP as "管理平面(admin_server.v)"
participant DP as "数据平面(admin_workers.v)"
participant WA as "Worker 管理(backend)"
participant LC as "生命周期(lifecycle)"
participant DR as "排空(drain)"
Note over C,AP : 管理平面请求需鉴权
C->>AP : GET /admin/executors
AP->>AP : 鉴权通过
AP-->>C : 返回执行器规格列表(JSON)
Note over C,DP : 数据平面请求需 on_data_plane=true
C->>DP : POST /admin/workers/restart?id=2
DP->>WA : restart_worker_by_id(2)
WA->>LC : 触发立即重启流程
LC-->>WA : 返回新进程/重试计划
WA-->>DP : 返回 Worker 最新状态
DP-->>C : 200 + WorkerAdminRestartSingleResponse
C->>DP : POST /admin/workers/drain?engine=php
DP->>DR : drain_engine(engine)
DR-->>DP : EngineDrainStatus
DP-->>C : 200 + Drain 状态
图表来源 - src/admin_server.v:587-597 - src/admin_workers.v:46-94 - src/worker_backend_admin_runtime.v:42-82 - src/worker_backend_lifecycle_runtime.v:72-134 - src/worker_backend_drain_runtime.v:104-155
详细组件分析
管理平面:/admin/executors
- 功能:返回已注册逻辑执行器的规格清单,便于外部工具或控制台展示当前可用的执行器类型与能力。
- 鉴权:需要有效的 x-vhttpd-admin-token 或通过 query 参数 admin_token。
- 响应体:JSON,内容来自共享应用提供的执行器规格快照。
sequenceDiagram
participant C as "客户端"
participant S as "admin_server.v"
participant A as "共享 App"
C->>S : GET /admin/executors
S->>S : 鉴权检查
S->>A : admin_logic_executor_specs_snapshot()
A-->>S : 执行器规格列表
S-->>C : 200 + JSON
图表来源 - src/admin_server.v:587-597
章节来源 - src/admin_server.v:587-597
数据平面:/admin/workers(Worker 池快照)
- 功能:返回 Worker 池的运行时快照,包括每个 Worker 的存活状态、PID、内存占用、是否处于 draining、并发请求数、累计服务请求数、重启次数与下次重试时间等。
- 可用性:仅在控制平面标记 on_data_plane=true 时生效,否则返回 404。
- 响应体:JSON,字段来源于 WorkerPoolAdminStatus 与 WorkerAdminStatus。
flowchart TD
Start(["进入 /admin/workers"]) --> CheckPlane{"on_data_plane ?"}
CheckPlane --> |否| NotFound["返回 404 Not Found"]
CheckPlane --> |是| Snapshot["读取 worker_admin_snapshot()"]
Snapshot --> Encode["编码为 JSON"]
Encode --> Return["返回 200 + JSON"]
图表来源 - src/admin_workers.v:8-25 - src/admin/types.v:8-30
章节来源 - src/admin_workers.v:8-25 - src/admin/types.v:8-30
Worker 管理:重启单个 Worker
- 端点:POST /admin/workers/restart
- 参数:query id=
(必填) - 行为:
- 校验 on_data_plane 开关
- 解析并校验 worker_id
- 调用后端按 ID 重启,成功后返回该 Worker 的最新状态
- 错误处理:
- 缺少 id:返回 400 与错误码 missing_worker_id
- 未找到 worker_id:返回 404 与错误消息
- 未启用 worker pool:返回错误提示
sequenceDiagram
participant C as "客户端"
participant W as "admin_workers.v"
participant BA as "worker_backend_admin_runtime.v"
participant LC as "worker_backend_lifecycle_runtime.v"
C->>W : POST /admin/workers/restart?id=2
W->>W : 校验 on_data_plane 与 id
W->>BA : restart_worker_by_id(2)
BA->>LC : 触发立即重启
LC-->>BA : 返回新进程/重试计划
BA-->>W : 返回 WorkerAdminStatus
W-->>C : 200 + WorkerAdminRestartSingleResponse
图表来源 - src/admin_workers.v:46-94 - src/worker_backend_admin_runtime.v:42-65 - src/worker_backend_lifecycle_runtime.v:72-134
章节来源 - src/admin_workers.v:46-94 - src/worker_backend_admin_runtime.v:42-65 - src/worker_backend_lifecycle_runtime.v:72-134
Worker 管理:重启所有 Worker
- 端点:POST /admin/workers/restart/all
- 行为:遍历所有受管 Worker 并触发立即重启,返回重启数量。
- 注意:管理平面与数据平面均提供此端点,但数据平面要求 on_data_plane=true。
sequenceDiagram
participant C as "客户端"
participant W as "admin_workers.v"
participant BA as "worker_backend_admin_runtime.v"
participant LC as "worker_backend_lifecycle_runtime.v"
C->>W : POST /admin/workers/restart/all
W->>BA : restart_all_workers()
loop 遍历每个 Worker
BA->>LC : 触发立即重启
end
BA-->>W : 返回 restarted 计数
W-->>C : 200 + WorkerAdminRestartAllResponse
图表来源 - src/admin_workers.v:96-125 - src/worker_backend_admin_runtime.v:67-82 - src/worker_backend_lifecycle_runtime.v:72-134
章节来源 - src/admin_workers.v:96-125 - src/worker_backend_admin_runtime.v:67-82 - src/worker_backend_lifecycle_runtime.v:72-134
Worker 管理:优雅排空(Drain)
- 端点:POST /admin/workers/drain
- 参数:engine 或 kind(二选一),用于指定引擎/后端标识
- 行为:
- 将目标引擎下的 Worker 置为 draining
- 等待 inflight_requests 归零后视为 ready
- 返回 draining_count、inflight_requests、ready_count 等统计
- 错误处理:找不到引擎或内部错误返回 404 与错误消息
flowchart TD
Start(["进入 /admin/workers/drain"]) --> Parse["解析 engine/kind"]
Parse --> CallDrain["调用 drain_engine(engine)"]
CallDrain --> Status{"成功?"}
Status --> |否| Err["返回 404 + error"]
Status --> |是| Build["构造 EngineDrainStatus"]
Build --> Return["返回 200 + JSON"]
图表来源 - src/admin_workers.v:127-156 - src/worker_backend_drain_runtime.v:104-155
章节来源 - src/admin_workers.v:127-156 - src/worker_backend_drain_runtime.v:104-155
执行器类型与规格
- 执行器模型:LogicExecutorModel 支持 worker 与 embedded 两种模式。
- Worker 后端模式:WorkerBackendMode 支持 required 与 disabled。
- 管理员可见的执行器详情:LogicExecutorAdminDetails 包含 kind、provider、model、lane_count、max_requests、能力开关(文件系统、进程、网络)等。
- 运行时快照:admin/state.v 中的 runtime_snapshot 会汇总执行器摘要、队列容量、活跃连接数等。
classDiagram
class LogicExecutorModel {
+worker
+embedded
}
class WorkerBackendMode {
+required
+disabled
}
class LogicExecutorAdminDetails {
+string kind
+string provider
+string model
+int lane_count
+int max_requests
+bool enable_fs
+bool enable_process
+bool enable_network
}
class AdminRuntimeSummary {
+started_at_unix i64
+uptime_seconds i64
+worker_pool AdminWorkerPoolSummary
+logic_executor AdminLogicExecutorSummary
+pipelines AdminPipelineRuntimeSummary
+listeners []AdminListenerRuntimeSummary
+capabilities map[string]bool
+active AdminActiveCounts
+relay AdminRelayRuntimeSummary
+stats AdminRuntimeStats
}
LogicExecutorAdminDetails <.. AdminRuntimeSummary : "被引用"
图表来源 - src/executor/types.v:65-91 - src/executor/types.v:157-164 - src/executor/types.v:252-264 - src/admin/state.v:56-102
章节来源 - src/executor/types.v:65-91 - src/executor/types.v:157-164 - src/executor/types.v:252-264 - src/admin/state.v:56-102
依赖关系分析
- 管理平面与数据平面共享同一 App 实例,通过 shared 引用访问 Worker 管理、执行器规格与运行时快照。
- Worker 管理操作依赖生命周期与排空子模块,确保重启与排空的幂等性与可观测性。
- 执行器规格与运行时快照依赖 executor/types.v 中定义的模型与统计结构。
graph LR
AdminServer["admin_server.v"] --> Shared["共享 App"]
AdminWorkers["admin_workers.v"] --> Shared
Shared --> BackendAdmin["worker_backend_admin_runtime.v"]
Shared --> Lifecycle["worker_backend_lifecycle_runtime.v"]
Shared --> Drain["worker_backend_drain_runtime.v"]
AdminServer --> ExecutorTypes["executor/types.v"]
AdminWorkers --> AdminTypes["admin/types.v"]
AdminServer --> AdminState["admin/state.v"]
图表来源 - src/admin_server.v:117-141 - src/admin_workers.v:8-25 - src/worker_backend_admin_runtime.v:42-82 - src/worker_backend_lifecycle_runtime.v:72-134 - src/worker_backend_drain_runtime.v:104-155 - src/executor/types.v:65-91 - src/admin/types.v:8-35 - src/admin/state.v:56-102
章节来源 - src/admin_server.v:117-141 - src/admin_workers.v:8-25 - src/worker_backend_admin_runtime.v:42-82 - src/worker_backend_lifecycle_runtime.v:72-134 - src/worker_backend_drain_runtime.v:104-155 - src/executor/types.v:65-91 - src/admin/types.v:8-35 - src/admin/state.v:56-102
性能与资源统计
- Worker 资源使用:WorkerAdminStatus 包含 rss_kb(进程 RSS 内存)、inflight_requests(并发请求)、served_requests(累计服务请求)、restart_count(重启次数)、next_retry_ts(下次重试时间)。
- 队列与系统统计:admin/state.v 汇总 HTTP、Worker 队列、Upstream、MCP、Feishu 等计数器,便于监控与告警。
- 排空与就绪:EngineDrainStatus 提供 draining_count、inflight_requests、ready_count,帮助判断滚动升级或扩缩容窗口。
章节来源 - src/admin/types.v:8-30 - src/admin/state.v:12-54 - src/worker_backend_drain_runtime.v:130-155
故障排查指南
- 404 Not Found(数据平面):当 on_data_plane=false 时,/admin/workers 系列端点不可用,请确认控制平面配置。
- 400 Bad Request(缺少 id):POST /admin/workers/restart 必须携带 id 参数。
- 404 Not Found(worker id 不存在):指定的 worker_id 不在当前池中。
- 403 Forbidden(鉴权失败):管理平面端点需要正确的 x-vhttpd-admin-token 或 admin_token 查询参数。
- 重启失败与重试:生命周期模块会在启动失败时记录 next_retry_ts 并按退避策略重试,可通过 /admin/workers 观察 next_retry_ts 与 restart_count。
章节来源 - src/admin_workers.v:8-25 - src/admin_workers.v:46-94 - src/admin_server.v:93-104 - src/worker_backend_lifecycle_runtime.v:72-134
结论
vhttpd 的管理平面与数据平面共同提供了对 Worker 与执行器的完整管理能力: - 通过 /admin/executors 获取执行器规格,辅助自动化编排与可视化。 - 通过 /admin/workers 查看 Worker 池快照与资源使用,结合 /admin/stats 与 /admin/runtime 进行综合监控。 - 通过 /admin/workers/restart、/admin/workers/restart/all、/admin/workers/drain 完成滚动升级与弹性伸缩。 - 统一的鉴权机制与结构化 JSON 响应,便于集成到现有运维平台。
附录:API 参考与示例
端点一览
- GET /admin/executors
- 描述:返回逻辑执行器规格列表
- 鉴权:需要 x-vhttpd-admin-token 或 admin_token
- 响应:application/json; charset=utf-8
- GET /admin/workers
- 描述:返回 Worker 池快照(仅 on_data_plane=true)
- 鉴权:无(数据平面)
- 响应:application/json; charset=utf-8
- POST /admin/workers/restart
- 描述:重启指定 Worker(id 必填)
- 鉴权:无(数据平面)
- 响应:application/json; charset=utf-8
- POST /admin/workers/restart/all
- 描述:重启所有 Worker
- 鉴权:无(数据平面)
- 响应:application/json; charset=utf-8
- POST /admin/workers/drain
- 描述:对指定 engine/kind 执行优雅排空
- 鉴权:无(数据平面)
- 响应:application/json; charset=utf-8
章节来源 - src/admin_server.v:587-597 - src/admin_workers.v:8-25 - src/admin_workers.v:46-94 - src/admin_workers.v:96-125 - src/admin_workers.v:127-156
响应数据结构
- Worker 池快照(GET /admin/workers)
- 顶层对象:WorkerPoolAdminStatus
- worker_autostart: bool
- worker_pool_size: int
- worker_rr_index: int
- worker_max_requests: int
- worker_sockets: []string
- workers: []WorkerAdminStatus
-
Worker 项:WorkerAdminStatus
- id: int
- socket: string
- alive: bool
- pid: int
- rss_kb: i64
- draining: bool
- inflight_requests: i64
- served_requests: i64
- restart_count: int
- next_retry_ts: i64
-
重启单个 Worker(POST /admin/workers/restart)
- 成功:WorkerAdminRestartSingleResponse
- ok: bool
- mode: string
- worker: WorkerAdminStatus
-
失败:WorkerAdminErrorResponse
- error: string
-
重启所有 Worker(POST /admin/workers/restart/all)
-
成功:WorkerAdminRestartAllResponse
- ok: bool
- mode: string
- restarted: int
-
优雅排空(POST /admin/workers/drain)
- 成功:EngineDrainStatus(由后端返回)
- engine: string
- worker_count: int
- draining_count: int
- inflight_requests: i64
- ready_count: int
- changed: bool
-
失败:WorkerAdminErrorResponse
- error: string
-
执行器规格(GET /admin/executors)
- 返回执行器规格列表,具体结构与字段以共享应用提供的快照为准(参见 executor/types.v 中的管理员可见详情与摘要)。
章节来源 - src/admin/types.v:8-49 - src/executor/types.v:77-91 - src/executor/types.v:157-164 - src/worker_backend_drain_runtime.v:130-155
批量操作示例
- 重启所有 Worker
- curl --noproxy '*' -s -H 'x-vhttpd-admin-token: change-me' -X POST 'http://127.0.0.1:19981/admin/workers/restart/all' | jq .
- 优雅排空指定引擎
- curl --noproxy '*' -s -H 'x-vhttpd-admin-token: change-me' -X POST 'http://127.0.0.1:19981/admin/workers/drain?engine=php' | jq .
- 查询 Worker 池快照
- curl --noproxy '*' -s -H 'x-vhttpd-admin-token: change-me' http://127.0.0.1:19981/admin/workers | jq .
章节来源 - README.md:1147-1347