feat(heartbeat): 心跳可靠性增强,原子计数与去重优化

- Rust proxy: 引入 snapshot+ACK 确认机制,心跳未确认时保留快照重发,
  避免指标丢失;添加 heartbeat_session_id 防跨进程去重误判
- Hub transport: Redis SETNX 心跳去重,避免多 worker 重复写库;
  ACK 回显 heartbeat_id 供 Rust 端匹配
- ProxyNodeService.heartbeat: 改用 SQLAlchemy atomic update 原子累加
  指标,避免 ORM read-modify-write 的并发覆盖问题
- 启动顺序修正: tunnel 状态重置移到 Hub 连接建立之前,避免竞态
- OAuth 批量导入: 动态超时(默认30s,走代理60s),Kiro 适配器透传
- 提取 normalize_heartbeat_id 到 tunnel_protocol 共享模块,消除重复
This commit is contained in:
fawney19
2026-03-02 12:27:51 +08:00
parent f3b9f42202
commit f978888759
13 changed files with 507 additions and 71 deletions

View File

@@ -36,15 +36,10 @@ ADMIN_PASSWORD=admin123456
# APP_IMAGE=ghcr.io/fawney19/aether:latest
# Gunicorn Worker 数量(默认 2
# Docker 部署下 Tunnel Hub 为容器内部固定服务,可安全使用多 worker。
# 非 Docker 运行时若使用 ProxyNode tunnel建议设置为 1
# Tunnel 请求统一经 Hub 转发,可安全使用多 worker。
# 非 Docker 运行时若使用 ProxyNode tunnel请确保 aether-hub 可达(默认 ws://127.0.0.1:8085
# GUNICORN_WORKERS=2
# 本地构建 app 镜像时使用的 Hub 二进制镜像
# 默认 aether-hub:local需先本地构建 aether-hub/Dockerfile
# 也可改为 ghcr.io/fawney19/aether-hub:latest
# HUB_BINARY_IMAGE=aether-hub:local
# Gunicorn Max Requests默认 4000
# Worker 处理指定数量请求后自动重启,防止内存泄漏
# max-requests-jitter 会自动设置为 MAX_REQUESTS/20 (5%)