Files
orbit/README.md

123 lines
10 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.
# Orbit · 星轨
Orbit 是面向多个业务项目的通用任务调度与流程编排平台,采用 **Go + MySQL + HTTP/WebSocket**。
- **Pulse · 脉动**:异步任务、定时调度、执行授权与安全重试。
- **Weave · 织流**:研发定义发布流程,管理步骤、等待、有界查询与恢复。
- 业务处理器运行在接入方 Worker 中;平台不内置行业规则。
## 当前进度
已完成 P0–P5 平台功能阶段验收:36 个数据模型、版本化迁移、凭据及范围校验、队列与任务 API、WSS 执行、独立 SDK、自动 Worker 和 [执行尝试/证据查询](docs/api/execution-history.md)。[Worker Schema](docs/api/worker-schema.md) 与真实进程强杀恢复回归已通过;[安全重试](docs/api/retries.md)、[定时计划](docs/api/schedules.md)、[运行中取消](docs/api/cancellation.md) 、[队列资源控制](docs/api/queues.md) 、[应用共享配额](docs/api/application-resources.md) 、[资源键互斥](docs/api/keyed-concurrency.md) 和 [优先级/节点公平派发](docs/api/priority-and-fairness.md) 已接入服务端和 SDK,[可靠结果订阅](docs/api/subscriptions.md) 已实现持久化核心、HTTP/WSS、管理 SDK 与示例,[消费 SDK](docs/sdk/event-consumer.md) 和 [独立 MySQL Inbox 示例](docs/examples/result-inbox.md) 已实现;[批量任务受理](docs/api/batch-tasks.md) 已提供逐项幂等、失败分类与 SDK 示例;[人工核查与重试](docs/api/task-recovery.md) 已提供带证据的管理接口、关联新任务、审计查询及运行示例;[业务键与时间范围查询](docs/api/task-queries.md) 已提供过滤、分页与SDK场景;[任务来源查询](docs/api/task-source.md) 已提供人工重试父任务、计划触发记录与固定版本;[业务事务Outbox](docs/examples/task-outbox.md) 已提供独立业务库、稳定提交身份、发送恢复与CLI;[相对延迟执行](docs/examples/delayed-task.md)已提供数据库计时及原请求恢复;完整范围核对见[P3验收](docs/reports/phase-3.md),生产验证与首版交付按 [持续开发计划](docs/08-development-plan.md) 继续推进。
Weave已提供[定义发布](docs/api/workflow-definitions.md)、[实例启动、步骤详情、暂停/继续/取消、信号和操作审计](docs/api/workflows.md),以及[六类人工核查恢复](docs/api/workflow-recovery.md)的HTTP与独立Go SDK。持久运行器支持顺序、分支、有限并行、TIMER、SIGNAL及有界POLL,恢复沿用原预算与截止。[并行作业与回执示例](docs/examples/workflow.md)提供完整调用链;[历史激活/轮次/信号及信号审计](docs/api/workflow-history.md)已接入;[实例筛选分页](docs/api/workflow-queries.md)已接入,[状态事件时间线](docs/api/workflow-events.md)已接入,独立[轮询](docs/examples/workflow-poll.md)与[恢复](docs/examples/workflow-recovery.md)示例已接入,已补[版本/暂停竞争/全停回归](docs/reports/phase-4-5-races.md),功能阶段证据见[P4/P5核对](docs/reports/phase-4-5.md),提交断线及派发未送达见[故障边界](docs/reports/phase-6-fault-boundaries.md);[任务流程来源](docs/api/task-source.md#5-流程固定来源)已接入,P4/P5功能阶段已通过,P6生产验证和P7发布交付继续推进。
数据库禁止外键,关联一致性通过服务端事务校验,索引、唯一约束和 CHECK 保留;新装库使用无外键当前版本基线,已有库沿不可变迁移链升级;readiness 同时检查迁移及零外键要求。[运行观测](docs/api/observability.md)提供固定基数 HTTP、数据库池和后台批次指标;发布前可执行只读的 [`orbit-admin verify`](docs/api/operations.md) 核验迁移、零外键和固定索引。这不表示完整平台已具备生产服务能力。验证证据见 [P0](docs/reports/phase-0.md)、[P1](docs/reports/phase-1.md)、[P2 阶段验收](docs/reports/phase-2.md)、[安全重试](docs/reports/phase-3-safe-retry.md)、[计划调度](docs/reports/phase-3-schedules.md)、[取消与无外键回归](docs/reports/phase-3-cancellation.md) 及 [队列资源回归](docs/reports/phase-3-queue-resources.md)。
## 目录
```text
cmd/orbit/ 基础 HTTP 服务入口
cmd/orbit-migrate/ 独立数据库迁移命令
cmd/orbit-admin/ 受控初始化与私密凭据交付
model/ 公共 ID、JSON、摘要与记录原语
platform/model/ 应用、命名空间、幂等、事件和审计
platform/auth/ 凭据格式与动作/队列授权范围
pulse/model/ 任务、尝试、队列、计划和执行许可
pulse/service/ 任务与队列应用契约、输入校验
pulse/worker/ 会话、开始、续租、结果和恢复契约
pulse/retry/ 冻结策略、有限退避与未知效果决策
pulse/schedule/ Cron/间隔、漏跑、版本及计划接口
internal/timezone/ 随计划冻结的内置时区数据快照
weave/model/ 定义、实例、步骤、信号和查询轮次
weave/definition/ 有限结构/类型校验与定义发布契约
weave/engine/ 不可变规则的有限步骤决策与精确结果映射
weave/instance/ 实例受理、当前详情及操作审计契约
weave/signal/ 内部可靠信号受理/查询契约及显式激活身份
weave/control/ 内部版本化暂停/继续/取消契约
internal/config/ 配置校验
internal/storage/mysql/ 连接、事务、迁移及集成测试
internal/transport/httpserver/ HTTP 接入
sdk/go/ 独立 Go SDK module 与示例
adapters/outbox/mysql/ 可直接引用的业务事务 Outbox 独立模块
examples/http-service/ HTTP + Outbox + Worker + Inbox 完整服务示例
scripts/ 可复现的回归工具
docs/ 设计、接口、SDK、场景与验证报告
```
## 本地运行
要求 Go 1.27.1、MySQL 8.4+。先准备专用数据库和凭据,通过环境变量注入;程序不会自动读取 `.env` 文件。
```sh
export ORBIT_MYSQL_DSN='user:password@tcp(127.0.0.1:3306)/orbit'
export ORBIT_HTTP_ADDR='127.0.0.1:8080'
go run ./cmd/orbit-migrate up
go run ./cmd/orbit
```
上方 DSN 为本地占位示例,需替换为实际凭据。部署时使用秘密管理和经过验证的 TLS 配置;迁移账户与运行账户分开授权。运行程序不自动迁移数据库。
另一个终端执行 SDK 示例:
```sh
cd sdk/go
ORBIT_URL=http://127.0.0.1:8080 go run ./examples/health
```
任务接入从 [初始化凭据](docs/api/authentication.md) 开始,再按 [SDK 接入](docs/sdk/README.md) 运行受理/取消示例。[自动 Worker 示例](docs/sdk/worker-runtime.md) 演示处理器注册、并发消费、结果确认与排空;特殊接入也可使用 [底层协议示例](docs/sdk/worker.md)。
## 开发与回归
```sh
make fmt
make test
make vet
make build
make image
make integration
make console-e2e
make protocol-check
make docs-check
```
首版发布前按[交付核对清单](docs/release-checklist.md)逐项留存命令输出和目标环境证据;当前阶段回归不替代生产拓扑、容量、复制切换或 RPO/RTO 验收。
`make integration` 要求 Docker、OpenSSL 等标准命令,启动独立的临时 MySQL 容器,使用随机凭据和回环随机端口;完成后删除该测试容器。不会连接已有业务数据库。可通过 `GO`、`DOCKER` 和 `ORBIT_TEST_MYSQL_IMAGE` 指定工具/测试镜像。
受理层负载采样工具见 [有界受理负载工具](docs/api/load.md),只允许在隔离命名空间或一次性数据库中运行;它不自动重试、不启动 Worker,也不提供生产容量承诺。
历史数据可通过控制台配置保留窗口,也可使用 [`orbit-admin retention archive`](docs/api/retention-jobs.md) 自动分批落盘、断点续跑和离线核验。当前保留源数据,周期归档调度和删除执行器另行交付。
真实Worker与任务完成路径测量使用[`orbit-exec-load`](docs/api/execution-load.md):短/混合/中长模拟任务、持久结果和单次尝试核验、阶段延迟分布;不修改队列额度、不调用外部业务系统。定时积压复现可运行 `make schedule-backlog`,它只使用一次性 MySQL,并保留有界截止负例的实际分母。Weave 并行流程链路使用[`orbit-workflow-load`](docs/api/workflow-load.md),核对固定版本、步骤、来源和最终输出。定时集中触发使用[`orbit-schedule-load`](docs/api/schedule-load.md),逐项核对触发、任务、唯一尝试与来源,并保留超时分母和暂停收尾证据。
SDK 独立发布门禁使用 `make sdk-check`,在 `GOWORK=off` 下检查完整依赖图,并运行 SDK 的竞态测试、vet 和全包构建;规则和接入边界见 [SDK 发布门禁](docs/sdk/release.md)。
修改已应用迁移时会触发校验和拒绝;新增结构使用新的前向迁移。初始结构尚未部署生产。
## 文档入口
- [持续开发与回归计划](docs/08-development-plan.md)
- [数据模型与约束](docs/07-data-model.md)
- [HTTP / WebSocket 接口手册](docs/api/README.md)
- [Go SDK 接入](docs/sdk/README.md)
- [通用场景示例](docs/examples/README.md)
- [Orbit Console 控制台](docs/console.md)
- [运行与发布手册](docs/20-operations-runbook.md)
- [容器发布说明](docs/21-container-deployment.md)
- [设计文档总览](docs/README.md)
Git 远端:[k2safe/orbit](https://git.yuntuo.hk/k2safe/orbit),主分支 `main`。首个接入版本为 `v0.1.0`,业务项目使用 Go 1.27.1 或更高版本安装:
```sh
go get git.yuntuo.hk/k2safe/orbit/sdk/go@v0.1.0
```
无需本地 `replace`;导入方式、完整调用与版本边界见 [SDK 接入](docs/sdk/README.md#5-外部项目通过远端接入)。
[流程实例筛选分页](docs/api/workflow-queries.md)已提供独立SDK和[完整示例](docs/examples/workflow-query.md),按固定版本全部队列鉴权,数据库保持零外键。
- [周期归档与作业管理](docs/api/archive-scheduler.md)
业务接入可直接使用[MySQL 事务 Outbox 适配包](docs/sdk/outbox-mysql.md)和[完整 HTTP 生命周期示例](docs/examples/http-service.md),覆盖已有事务、后台发送、结果入库以及有界关闭。