mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 05:56:38 +08:00
6.7 KiB
6.7 KiB
ATSFlare 设计基线(V3 准备版)
1. 文档目的
本文档不再展开记录第一版、第二版的实施过程,只保留当前系统边界、稳定约束与第三版开始前必须确认的设计输入。
当前结论:
- 第一版、第二版已完成并进入归档状态
- 当前代码库的可运行能力,以本文档为唯一设计基线
- 第三版开发前,如需扩展系统边界,先更新本文档,再开始编码
2. 当前产品定位
ATSFlare 当前仍定位为内部自用的反向代理控制面,不是面向外部租户的 CDN SaaS。
当前已经具备的核心能力:
- 反代规则管理
- 配置渲染、发布、激活与回滚
- Agent 心跳、同步、应用结果上报
- Nginx 配置写入、校验、reload 与失败回滚
- HTTPS/TLS 路由支持
- 证书托管与域名管理
- 节点预创建、节点专属
agent_token、全局discovery_token - 配置预览与变更摘要
当前默认工作方式:
- 所有节点消费同一份全局激活版本
- 控制面保存状态与配置,不直接 SSH 管理机器
- Agent 是节点侧唯一落地入口
3. 明确保持不做的范围
在第三版目标明确前,以下内容仍视为范围外:
- 多租户
- WAF、限流、Bot、防刷
- 节点分组、差异化下发、灰度百分比发布
- Redis、消息队列、对象存储、Prometheus
- 复杂缓存策略、分层缓存、mid-tier
- 证书自动签发与自动续期
- 审批流、审计中台、Purge 平台化能力
- 抽象
zone、origin_pool、policy、deployment等平台对象
如果第三版需要引入以上任一能力,必须先补设计,再进入实现。
4. 技术基线
4.1 Server
基于 atsf_server 单体应用继续演进:
- Web 框架:Gin
- ORM:GORM
- 数据库:SQLite
- 管理端前端:
atsf_server/web - 用户鉴权:沿用现有 ATSFlare 登录体系
默认不以新基础设施为前提:
- 不依赖 Redis
- 不依赖 MQ
- 不依赖外部对象存储
4.2 Agent
基于 atsf_agent Go 单体程序继续演进:
- 单二进制
- 节点本地执行
- 优先使用独立 Nginx
- 显式配置
nginx_path时直接调用该路径 - 未配置
nginx_path时默认使用 Docker Nginx 容器 - 生成资源默认落在
./data,可由data_dir覆盖
4.3 Nginx 管理边界
控制面当前只管理以下内容:
- 反向代理路由配置
- 控制面托管证书对应的本地证书文件
仍不管理以下内容:
nginx.conf- upstream 高级编排
- 复杂缓存策略
- 节点级系统运维逻辑
5. 当前总体架构
ATSFlare Server (Gin + SQLite + Web UI)
|
| HTTP API / Config Pull
v
ATSFlare Agent (heartbeat / sync / apply / report)
|
v
Local Nginx or Docker Nginx
|
v
Origin
设计原则保持不变:
- Server 负责配置、版本、节点状态
- Agent 负责本地落盘、校验、reload、回滚
- 发布通过“生成新版本并激活”完成
- 历史版本不可变
6. 核心对象
6.1 proxy_routes
表示一条 domain -> origin_url 的反向代理规则。
关键字段:
domainorigin_urlenabledenable_httpscert_idredirect_httpcustom_headersremark
约束:
- 一个域名只对应一个源站
domain必须唯一origin_url必须是合法的http://或https://
6.2 config_versions
表示一次完整发布快照。
关键字段:
versionsnapshot_jsonrendered_configchecksumis_activecreated_by
约束:
- 每个版本保存完整快照与渲染结果
- 全局同时只能有一个激活版本
- 回滚通过重新激活旧版本实现
6.3 nodes
表示节点运行状态与接入凭证。
关键字段:
node_idnameipstatuscurrent_versionlast_seen_atlast_erroragent_token
约束:
- 节点专属
agent_token由 Server 生成并持久化 - 删除节点后,其凭证必须立即失效
- 全局
discovery_token不存放在nodes表中
6.4 apply_logs
记录节点应用版本的结果。
关键字段:
node_idversionresultmessagecreated_at
6.5 tls_certificates
表示控制面托管的证书与私钥。
关键字段:
namecert_pemkey_pemnot_beforenot_afterremark
6.6 managed_domains
表示域名资产及其默认证书关系。
关键字段:
domaincert_idenabledremark
约束:
- 支持精确域名与
*.example.com通配符域名 - 证书匹配同时支持精确匹配与通配符匹配
7. 当前发布模型
标准链路:
修改规则 -> 预览/查看 diff -> 发布 -> 生成完整配置版本 -> 激活版本 -> Agent 拉取 -> 本地应用 -> 上报结果
发布规则:
- 读取全部启用的
proxy_routes - 渲染完整 Nginx 配置
- 计算
checksum - 写入
config_versions - 切换激活版本
- Agent 在下一轮同步中发现并应用
版本规则:
- 版本号格式:
YYYYMMDD-NNN - 版本不可变
- 节点只拉取当前激活版本
8. 当前模块边界
8.1 atsf_server
负责:
- 管理端 UI 与 API
- Agent API
- 数据存储
- 配置渲染
- 发布与激活
- 节点状态展示
8.2 atsf_agent
负责:
- 首次注册与凭证置换
- 周期性心跳
- 拉取激活版本
- 写入本地路由与证书文件
- 执行
nginx -t/nginx -s reload - 失败回滚
- 上报应用结果
8.3 atsf_server/web
负责:
- 规则、版本、节点、应用记录页面
- 证书与域名管理页面
- 发布前预览与变更摘要展示
9. 当前接口域
为控制文档长度,仅保留接口域,不再逐条展开历史接口清单。
管理端接口当前覆盖:
proxy-routesconfig-versionsnodesapply-logstls-certificatesmanaged-domains
Agent 接口当前覆盖:
- 注册
- 心跳
- 获取激活版本
- 上报应用结果
统一约束:
- 管理端与 Agent API 均使用 JSON
- Agent API 固定放在
/api/agent/* - Agent 鉴权使用
X-Agent-Token
10. 文档策略
第一版、第二版的详细实施过程不再在本文档中长期保留。
后续原则:
- 设计文档只保留当前有效基线
- 已完成阶段的细节以 Git 历史为准
- 新阶段开始前,先把设计输入写清楚,再进入实现