Skip to documentation
OrbitMeshDocs
Browse documentation
Docs/Direction

DIRECTION

RFC

Decision:
View source

RFC-001:产品定位

Decision:

OrbitMesh 定位为一站式网络基础设施控制平面。

Reason:

目标用户需要稳定、可观测、可编排的网络基础设施能力,而不是传统流媒体代理订阅。

RFC-002:Control Plane / Data Plane 分离

Decision:

Control Plane 不进入用户流量路径。

Reason:

提高可扩展性,避免控制平面故障影响已有流量。

RFC-003:Edge Runtime Pull 模式

Decision:

Node 上的 Edge Runtime 主动连接控制平面并拉取配置。

Reason:

支持 BYOH、NAT、防火墙环境,不需要控制平面 SSH Node host。

RFC-004:BYOH First

Decision:

第一阶段优先支持用户自带主机。

Reason:

降低平台成本,避免公网出口费用过高,适合早期技术用户。

RFC-005:Runtime 可替换

Decision:

sing-box 是 MVP Traffic runtime,但产品模型不绑定 sing-box。

Reason:

未来会支持 Xray、EasyTier、Tailscale、Traefik、frp、NGINX、Envoy、WireGuard 等 Runtime Plugin。

RFC-006:Desired State

Decision:

Control Plane 保存 Desired State,Compiler 生成 runtime config。

Reason:

避免业务模型和具体 runtime 配置耦合。

RFC-007:Service-aware Routing

Decision:

Traffic routing 围绕 GitHub、Docker、OpenAI、Anthropic 等开发者服务建模。

Reason:

专业用户关心服务体验,而不是出口名称。

RFC-008:多租户优先

Decision:

从第一版开始所有租户资源都保留 tenant_id。

Reason:

Personal、Team、Enterprise 都以租户为边界。

RFC-009:配置回滚

Decision:

Edge Runtime 必须保留 last known good config。

Reason:

配置错误不能导致 runtime 不可用。

RFC-010:日志最小化

Decision:

默认不记录用户访问 URL,不记录敏感 token。

Reason:

降低隐私和安全风险。

RFC-011:Traffic Role 替代 Ingress / Egress Gateway

Decision:

不再把 Ingress Gateway 和 Egress Gateway 作为 OrbitMesh 顶层产品资源。

正式模型:

Node
  CapabilityBinding: traffic.entry / traffic.exit / traffic.relay
  RuntimeBinding: sing-box / xray / ...
  Endpoint: public or private reachable address

Reason:

Ingress / Egress 作为泛化 Gateway 资源会把 OrbitMesh 固化成 sing-box traffic panel,无法自然表达 Mesh、Gateway、Tunnel、多 runtime、多 capability 和 endpoint 绑定。

Entry / Exit / Relay 是 Traffic Capability 内部角色;sing-box 是实现这些角色的 Runtime Plugin。

Migration:

这是破坏性模型升级。旧 gateway type 数据通过 SQL 迁移为 capability role,不做 API alias,不做程序 fallback。

RFC-012:Device-bound Edge Runtime Identity

Decision:

Edge Runtime 身份绑定到设备本地生成的长期 device identity。Deployment token 只是 enrollment / re-enrollment 授权,不是设备身份。edge_secret 不作为长期身份凭据,也不做兼容保留。

Reason:

控制平面生成并下发的共享 secret 可以被复制,不能证明同一个 Node 只由同一台设备运行。设备应在本地生成不可外发私钥,注册时提交公钥和设备指纹,后续 Runtime API 使用请求签名。重新生成 deployment token 后,同一设备可以重新注册并复用原身份;不同设备必须创建新身份,除非未来实现显式 replace/reset 操作。

RFC-013:Edge Runtime CLI / Daemon 分离

Decision:

Edge Runtime 长期形态拆分为 orbitmesh CLI 和 orbitmeshd daemon。orbitmeshd 作为 systemd 管理的长期进程负责身份、心跳、Desired State 同步、Runtime Apply 和自动更新;orbitmesh 作为本地命令通过 Unix Socket 调用 daemon。

Reason:

CLI 和 daemon 分离可以避免用户命令直接修改 daemon 状态,便于实现手动更新、自动更新、诊断命令、包管理器安装和权限边界,也符合 Linux 主机 agent 的常见运维模型。

RFC-014:Edge Runtime Managed Updates

Decision:

Edge Runtime 更新必须基于 release manifest、checksum、签名、安装方式记录和更新策略。支持 standalone、package、container 三类安装方式;standalone 使用版本目录和原子 symlink 切换,package 使用系统包管理器,container 不做自更新。

Reason:

直接覆盖 latest 二进制无法表达版本、渠道、兼容性、校验、灰度和回滚。manifest + install method 能同时支持快速安装、自动更新、手动更新、企业受控发布和未来包仓库分发。

RFC-015:Domain and Certificate Automation

Decision:

ACME、域名分配和证书生命周期是 OrbitMesh Endpoint 基础能力,必须前置于 Traffic subscription 输出。系统必须同时支持平台级默认证书和租户级自定义域名证书。

Reason:

Trojan 依赖 TLS。若 subscription 直接生成协议配置而没有稳定的证书与域名资源模型,后续会在 sing-box、Traefik、Console 和用户配置之间产生重复 TLS 参数和不一致状态。把域名、证书和 endpoint 抽象为 Control Plane 资源后,runtime adapter 只消费 Domain / Certificate / Endpoint,subscription 只消费已就绪的 public endpoint。

Boundary:

  • 系统级能力由平台管理,负责默认 endpoint 名称、默认证书申请、续期和状态同步。
  • 租户级能力由用户配置,支持自定义域名、DNS 校验、托管证书和 ACME 自动申请续期。
  • 控制面保存域名、证书元数据、状态和 secret 引用;不在业务表明文保存私钥。
  • 私钥材料优先在 Node 本地或外部 secret manager 中生成和保存。Control Plane 只下发引用、路径或 ACME 配置。
  • Traffic Entry、Gateway Endpoint、Tunnel Endpoint 和 future Traefik adapter 必须复用同一套证书资源,不允许各自实现证书申请状态机。

RFC-016:Breaking Model Alignment

Decision:

暂停新增功能开发,优先完成现有 Traffic MVP 对齐。

Scope:

  • Documentation。
  • SQL migration。
  • Ent schema。
  • Proto and OpenAPI。
  • Control Plane services。
  • Edge Runtime protocol。
  • Console routes and labels。

Reason:

继续在旧模型上叠加功能会放大后续迁移成本。先完成现有功能对齐,后续 Mesh、Gateway、Tunnel 和更多 Runtime Plugin 才能自然扩展。

Open Questions

  • Mesh Capability 首个 runtime 是否选择 EasyTier。
  • Gateway Capability 首个 runtime 是否选择 Traefik。
  • Tunnel Capability 首个 runtime 是否选择 frp 还是 Cloudflare Tunnel。
  • Prometheus 指标接入放在生产硬化阶段还是 Team 版本。
OrbitMesh DocumentationContent follows the repository's main branch.