Maylin 是一个服务集群管理器:以 Rust 子进程 + 插件 直接拉起任意数量的实例, 每个实例独占端口、互不干扰,不需要 Docker。内置多服务器集群、RBAC Token API、 WebSocket 终端、cron 定时启动与反向代理负载均衡。
每一块都可以单独用,也可以组合成一个小型集群编排层。
直接托管 JS / Python / Go / 任意二进制,CREATE_NO_WINDOW 防弹窗、kill_on_drop 防孤儿,每个实例独占端口。
新增一种运行时只需写一个 toml:command + args,支持 {script} {port} {name} 占位符。
崩溃按策略自动拉起,指数退避(2s×n,上限 30s),超过 max_retries 熔断并告警,绝不无限重启。
各节点 peers 互配,状态聚合查询、restart all 动作广播,负载均衡上游可混合跨机实例。
三级角色 admin / operator / viewer,全部 REST 与 WebSocket 强制 Bearer Token,按方法与路径判权。
ctl terminal 直连实例 stdin/stdout 做交互调试,ctl exec 在节点上跑 shell 命令(带并发上限)。
标准 5 段 cron 驱动 start / stop / restart,target 支持实例名或 all,配置热加载不重启进程。
round-robin + 健康探活摘除 + 请求级失败重试;事件环缓冲、JSONL 落盘、webhook 告警、状态快照。
一个控制面(API / 终端 / 调度)+ 一个数据面(进程与端口),控制面故障不影响已运行实例。
首次启动会自动生成 config/ 目录、随机访问令牌与 demo 示例,30 秒内可跑通全流程。
# 1. 构建(或直接从 Releases 下载预编译二进制) cargo build --release # 2. 启动节点(首次运行自动生成 config/ 与随机 Token) ./target/release/maylin node --config config/maylin.toml # 3. 配置客户端 export MAYLIN_TOKEN=<config/maylin.toml 里的 tokens[0]> export MAYLIN_URL=http://127.0.0.1:7000 # 4. 管理实例 maylin ctl start demo-node # 拉起 Node 实例 :3001 maylin ctl start demo-python # 拉起 Python 实例 :3002 maylin ctl status # 节点状态 + 指标 maylin ctl logs demo-node --lines 50 maylin ctl terminal demo-node # 交互式终端 maylin ctl events --limit 20 # 事件审计 maylin ctl cluster # 集群聚合状态 # 5. 负载均衡 :8000 → 轮询 :3001 / :3002,停掉一个也零失败 curl http://127.0.0.1:8000/
全部接口需 Authorization: Bearer <token>,WebSocket 可用 ?token=。写操作按角色校验权限。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/status | 节点状态(实例 + LB + 集群 + metrics) |
| GET POST | /api/instances | 实例列表 / 创建实例(JSON) |
| GET | /api/instances/{name} | 实例详情(状态 / pid / 重试次数) |
| POST | /api/instances/{name}/start | 启动实例 |
| POST | /api/instances/{name}/stop | 优雅停止(宽限后强杀) |
| POST | /api/instances/{name}/restart | 重启实例 |
| GET | /api/instances/{name}/logs?lines=100 | 实例日志 |
| WS | /api/instances/{name}/terminal | WebSocket 终端(stdin / stdout) |
| POST | /api/exec | 在节点执行 shell 命令(并发受限) |
| GET | /api/events?limit=100 | 事件流(启动 / 退出 / 重启 / 摘除 / 认证失败) |
| GET | /api/plugins /api/schedules | 插件与定时任务 |
| POST | /api/reload | 重新扫描配置目录(不影响运行中实例) |
| GET | /api/lb/status | 负载均衡上游健康状态 |
| GET POST | /api/cluster/status /api/cluster/action | 集群聚合状态 / 动作广播 |
数据来自本机 release 构建(examples/loadtest.rs,可自行复现)。
CreatePipe + 阻塞泵线程PeekNamedPipe 轮询 + 退出标志排空,不依赖 EOFno_proxy() 直连std::io::pipe + BufRead,SIGTERM 分支隔离