Files
2026-06-01 13:54:52 +08:00

305 lines
14 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.
# 健康检查接口
<cite>
**本文引用的文件列表**
- [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs)
- [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs)
- [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs)
- [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs)
- [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs)
- [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs)
- [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs)
- [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs)
- [README.md](file://README.md)
- [docker/Dockerfile](file://docker/Dockerfile)
- [crates/rcoder/src/rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向RCoder项目的健康检查API聚焦GET /health端点的HTTP方法、URL模式、响应格式与行为语义。文档解释该接口如何用于系统状态监控与负载均衡器健康探测给出成功与失败场景的JSON结构说明阐述服务启动时的验证作用并提供在Kubernetes等容器编排系统中的集成方式、curl示例与客户端实现要点以及性能监控与超时处理的最佳实践。
## 项目结构
- 健康检查端点在两个主要服务中均可用:
- rcoder主服务提供HTTP API与健康检查
- agent_runner服务同样提供健康检查端点
- 路由注册与OpenAPI文档由各服务的router模块负责
- 服务启动时绑定端口并启动HTTP服务器健康检查端点即随服务启动而可用
```mermaid
graph TB
subgraph "rcoder主服务"
RMain["main.rs<br/>启动HTTP服务器"]
RRouter["router.rs<br/>路由注册 /health"]
RHandler["health_handler.rs<br/>健康检查处理器"]
end
subgraph "agent_runner服务"
AMain["main.rs<br/>启动HTTP服务器"]
ARouter["router.rs<br/>路由注册 /health"]
AHandler["health_handler.rs<br/>健康检查处理器"]
end
RMain --> RRouter --> RHandler
AMain --> ARouter --> AHandler
```
图表来源
- [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265)
- [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66)
- [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171)
- [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52)
- [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36)
章节来源
- [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265)
- [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171)
- [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66)
- [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52)
## 核心组件
- 健康检查处理器
- 路径:/health
- 方法GET
- 响应JSON对象包含status、timestamp、service字段
- 路由注册
- rcoder在router.rs中将GET /health绑定到处理器
- agent_runner同理
- 服务启动
- main.rs中创建Axum Router并绑定TCP监听健康检查端点随服务启动而可用
章节来源
- [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36)
- [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66)
- [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52)
- [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265)
- [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171)
## 架构总览
健康检查端点作为系统健康状态的快速探测入口,既可用于内部监控,也可供外部负载均衡器/编排系统进行存活探针。在rcoder中健康检查端点位于HTTP API层不依赖业务逻辑因此其可用性直接反映服务进程的启动与HTTP服务器的就绪状态。
```mermaid
sequenceDiagram
participant LB as "负载均衡器/探针"
participant HTTP as "HTTP服务器(Axum)"
participant Router as "路由(/health)"
participant Handler as "健康检查处理器"
LB->>HTTP : GET /health
HTTP->>Router : 分发请求
Router->>Handler : 调用处理器
Handler-->>HTTP : 返回JSON响应
HTTP-->>LB : 200 OK 或错误码
```
图表来源
- [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66)
- [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52)
- [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36)
## 详细组件分析
### 健康检查端点定义与响应
- HTTP方法与URL模式
- 方法GET
- 路径:/health
- 响应结构
- status字符串表示服务健康状态
- timestampUTC时间戳
- service服务标识
- 成功响应
- HTTP状态码200 OK
- 响应体包含上述字段的JSON对象
- 失败响应
- 当HTTP服务器未启动或路由未注册时可能出现非200的状态码例如5xx
- 由于健康检查处理器不进行数据库或其他外部依赖的深度校验一般不会出现500错误若出现通常表示服务启动异常或中间件/路由配置问题
```mermaid
flowchart TD
Start(["请求进入 /health"]) --> Route["匹配路由 /health"]
Route --> HandlerCall["调用健康检查处理器"]
HandlerCall --> BuildResp["构造响应对象(status, timestamp, service)"]
BuildResp --> ReturnOK["返回 200 OK + JSON"]
ReturnOK --> End(["结束"])
```
图表来源
- [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36)
章节来源
- [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36)
### 服务启动与健康检查可用性
- rcoder主服务
- main.rs中创建Axum Router并绑定监听端口随后启动HTTP服务器
- 启动日志明确打印了API端点信息包括GET /health
- agent_runner服务
- 同样在main.rs中绑定监听端口并启动HTTP服务器
- 路由注册中包含GET /health
```mermaid
sequenceDiagram
participant Main as "main.rs"
participant Router as "router.rs"
participant Server as "HTTP服务器(Axum)"
Main->>Router : create_router(state)
Router-->>Main : 返回Router
Main->>Server : 绑定监听端口并启动
Server-->>Main : 服务就绪
Note over Main,Server : /health 端点随服务启动而可用
```
图表来源
- [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265)
- [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66)
- [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171)
- [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52)
章节来源
- [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265)
- [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171)
### 在Kubernetes等容器编排系统中的集成
- 健康检查配置
- Dockerfile中定义了HEALTHCHECK指令使用curl对http://localhost:PORT/health进行探测
- 默认端口为8087来自rcoder_default.yml中的port字段
- 推荐配置
- 在Kubernetes中使用livenessProbe/readinessProbe指向同一端点
- 建议将探针超时时间设置为小于探测周期,避免长时间阻塞导致误判
- 若使用代理Pingora建议直接对代理监听端口进行探测或在代理层暴露健康检查端点
章节来源
- [docker/Dockerfile](file://docker/Dockerfile#L296-L304)
- [crates/rcoder/src/rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml#L10-L12)
### curl命令示例与客户端实现指南
- curl示例
- GET http://localhost:8087/health
- 客户端实现要点
- 使用HTTP客户端库发起GET请求
- 解析JSON响应读取status、timestamp、service字段
- 对于200以外的状态码视为不健康
- 设置合理的超时时间,避免阻塞
章节来源
- [README.md](file://README.md#L229-L242)
### 健康检查与负载均衡器健康探测
- 健康检查处理器不进行外部依赖如数据库、代理后端的深度校验仅反映服务进程与HTTP服务器的就绪状态
- 负载均衡器可将其作为存活探针,结合探针超时、重试次数与周期进行综合判断
- 若需要对代理后端进行健康探测,可参考代理健康检查配置(见下一节)
章节来源
- [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L52-L98)
- [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L556-L596)
## 依赖关系分析
- 路由到处理器的依赖
- rcoder与agent_runner分别在各自的router.rs中注册GET /health
- 处理器在各自handler/health_handler.rs中实现
- 服务启动依赖
- main.rs负责创建Router并启动HTTP服务器
- 代理健康检查(额外能力)
- rcoder的ProxyConfig包含HealthCheckConfig
- Pingora服务实现健康检查循环定期对后端端口进行连通性探测
```mermaid
graph LR
RMain["rcoder/main.rs"] --> RRouter["rcoder/router.rs"]
RRouter --> RHandler["rcoder/handler/health_handler.rs"]
AMain["agent_runner/main.rs"] --> ARouter["agent_runner/router.rs"]
ARouter --> AHandler["agent_runner/handler/health_handler.rs"]
Config["rcoder/config.rs<br/>ProxyConfig/HealthCheckConfig"] --> PingoraSvc["pingora-proxy/service.rs<br/>健康检查循环"]
```
图表来源
- [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265)
- [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66)
- [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171)
- [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52)
- [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36)
- [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L52-L98)
- [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L556-L596)
章节来源
- [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L52-L98)
- [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L556-L596)
## 性能考量
- 健康检查处理器为纯内存计算,开销极低,适合高频探测
- 探测周期与超时设置建议
- 周期根据业务SLA设定常见为10-30秒
- 超时:建议小于周期,避免探针阻塞影响其他请求
- 在Kubernetes中合理设置initialDelaySeconds、periodSeconds、timeoutSeconds与failureThreshold避免误判
- 若使用代理Pingora可利用其健康检查能力对后端进行更细粒度的探测
章节来源
- [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L124-L134)
- [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L581-L591)
## 故障排查指南
- 无法访问/health
- 检查服务是否已启动并绑定到预期端口
- 确认防火墙与网络策略允许访问
- 响应非200
- 查看服务日志,定位路由或中间件异常
- 确认路由注册是否正确
- 健康检查频繁失败
- 检查探针超时与周期设置
- 在Kubernetes中适当增大failureThreshold避免抖动
- 代理健康检查相关
- 确认ProxyConfig中的health_check.enabled、interval_seconds、timeout_seconds配置
- 检查后端端口连通性
章节来源
- [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265)
- [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171)
- [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L52-L98)
- [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L556-L596)
## 结论
GET /health端点为RCoder提供了轻量、可靠的健康状态探测入口适用于服务启动验证与负载均衡器健康探测。其简单实现确保了低开销与高可用性。在生产环境中建议结合探针超时、周期与重试策略以及必要时启用代理健康检查以获得更全面的健康状态视图。
## 附录
### API定义与示例
- 端点GET /health
- 响应示例(成功)
- 状态码200 OK
- 响应体包含status、timestamp、service字段的JSON对象
- 响应示例(失败)
- 状态码非200例如5xx
- 响应体错误信息由HTTP服务器或中间件决定
章节来源
- [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36)
- [README.md](file://README.md#L229-L242)
### 集成与最佳实践
- curl示例
- curl -X GET http://localhost:8087/health
- Kubernetes集成
- 使用livenessProbe/readinessProbe指向同一端点
- HEALTHCHECK已在Dockerfile中定义可直接复用
- 超时与周期
- 建议周期10-30秒超时小于周期
- failureThreshold根据稳定性需求调整
章节来源
- [README.md](file://README.md#L229-L242)
- [docker/Dockerfile](file://docker/Dockerfile#L296-L304)