From ade4f394bca31e11a0a717bdfa27a68acd0c3c5f Mon Sep 17 00:00:00 2001 From: chakcy <947105045@qq.com> Date: Fri, 14 Aug 2026 18:22:59 +0800 Subject: [PATCH] =?UTF-8?q?modify:=20README=20=E8=A1=A5=E5=85=85=E6=B7=B7?= =?UTF-8?q?=E5=90=88=E9=83=A8=E7=BD=B2=E4=B8=8E=E8=BF=9B=E7=A8=8B=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E9=9A=94=E7=A6=BB=E6=9E=B6=E6=9E=84=EF=BC=88=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E8=B7=AF=E7=94=B1=E6=B3=A8=E5=86=8C/=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E9=83=A8=E7=BD=B2/=E5=91=BD=E4=BB=A4=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 96 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 68 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 25bc019..afb461d 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ | **动态路由生成** | 扫描 `config/workers/*/*.toml` 自动注册 HTTP 路由 | | **Worker 框架** | `@rpc_method` 装饰器 + `Plugin` 基类统一生命周期 + Pydantic 模型绑定 | | **启动契约校验** | TOML 路由 ↔ `@rpc_method` ↔ 生成模型三方一致性校验,fail fast | +| **混合部署** | inline(网关进程内)与 external(独立进程)两种插件模式按插件粒度共存 | +| **动态路由注册** | external 插件经 Zenoh 注册路由,网关动态挂载/摘除 HTTP 端点 | +| **进程插件隔离** | 进程插件与网关零导入关系,仅经 Zenoh 通讯,可独立打包到不同容器 | | **自动化模型生成** | `gen_models` 根据 TOML 配置生成请求/响应模型 | | **插件脚手架** | `gen_plugin` 一键生成风格统一的 Worker 插件骨架 | | **JWT 鉴权** | Rust 实现,路由级 `auth_required` 控制 | @@ -172,18 +175,27 @@ npm run dev # http://localhost:5173 ```mermaid graph TB - HTTP[HTTP 客户端] -->|REST API| FastAPI[FastAPI 路由
TOML 自动生成] - MQTT[MQTT 客户端] -->|chongming/+/+| Bridge[MQTT Bridge
纯客户端模式] + HTTP[HTTP 客户端] -->|REST API| API[FastAPI 动态路由] + MQTT[MQTT 客户端] -->|chongming/+/+| BRIDGE[MQTT Bridge
纯客户端模式] - FastAPI --> WM[WorkerManager
随机负载均衡 + 超时重试] - Bridge --> WM + REG[RouteRegistry
订阅 chongming/routes/**] -->|动态挂载/摘除 HTTP 路由| API + API --> WM[WorkerManager
随机负载均衡 + 超时重试] + BRIDGE --> WM - WM -->|Zenoh Query| W1[Worker 副本 1] - WM -->|Zenoh Query| W2[Worker 副本 2] - WM -->|Zenoh Query| W3[Worker 副本 N] + subgraph GW[网关进程 chongming] + API + REG + BRIDGE + WM + end - W1 & W2 & W3 -->|插件业务逻辑| DB[(SQLite)] - W1 & W2 & W3 -->|AI 调用| AI[豆包 API] + WM -->|Zenoh Query| IW[inline Worker 副本
网关进程内加载] + WM -->|Zenoh Query| EW[external Worker 进程
独立容器,零网关依赖] + EW -.->|发布路由描述符
chongming/routes/**| REG + + IW --> DB[(SQLite)] + EW --> DB + EW -->|AI 调用| AI[豆包 API] ``` **启动流程**: @@ -192,10 +204,14 @@ graph TB uv run serve → FastAPI lifespan: 1. setup_storage() — 本地文件系统存储 2. setup_zenoh() — Zenoh peer 会话 - 3. setup_worker_manager() — WorkerManager + 定期 liveliness 刷新 - 4. load_workers() — 动态 import 插件 → 启动 Worker 协程 - 5. register_routes() — 扫描 config/workers/ 生成 HTTP 路由 - 6. setup_mqtt() — 内嵌 Broker(子进程)+ MQTT Bridge + 3. setup_mqtt_broker() — 内嵌 Broker(子进程 + 文件锁单例) + 4. setup_worker_manager() — WorkerManager + 定期 liveliness 刷新 + 5. load_workers() — 按插件 [workers].load_mode 分派: + inline → 进程内 import 插件 → 启动 Worker 协程 + external → 跳过(独立进程运行),启动 RouteRegistry 订阅 chongming/routes/** + 6. validate_contracts() — inline 插件三方契约校验,失败终止启动 + 7. register_routes() — inline 插件盘扫生成 HTTP 路由 + 8. setup_mqtt() — MQTT Bridge(inline 主题静态收集 + external 主题动态推送) ``` --- @@ -247,6 +263,41 @@ async def upload(file: UploadFile = File(...)): --- +## 进程插件与混合部署 + +两种插件运行模式**按插件粒度共存**,在 `config/workers//config.toml` 的 `[workers]` 节声明: + +```toml +load_mode = "inline" # 默认:插件在网关进程内加载 +load_mode = "external" # 独立进程运行,经 Zenoh 注册路由 +``` + +**inline 插件**(`src/plugins/`,chongming-plugins 仓库): + +- 网关进程内 import;路由由网关盘扫 TOML 生成;契约校验在网关启动时执行 + +**external 进程插件**(本地开发目录 `workers/`,不入库): + +- 与网关**零导入关系**:只依赖 `chongming-worker` SDK + zenoh,仅经 Zenoh 通讯 + - 路由注册:worker 启动时 put 描述符到 `chongming/routes//...`,退出时 delete;每 10s 周期重发布自愈 + - 服务发现:liveliness `worker//`(与 inline 副本同一机制,网关无需改动) +- worker 进程自读 TOML 并在**自己进程内**做契约校验(`chongming_worker.contracts`); + 网关 RouteRegistry 订阅描述符后动态挂载/摘除 HTTP 路由(type 级 2s 防抖) +- 代码结构与 inline 插件完全一致(Plugin 基类 + router/ + models/),示例见本地 `workers/demo/` +- 运行: + + ```bash + uv run worker_serve --type demo # 本地调试 + chongming-worker --type demo # 容器入口(chongming-worker SDK console script) + ``` + +- 生产部署:进程插件与网关**分别打包到不同容器** + - 网关容器:`chongming` + 依赖 + - 进程插件容器:插件代码 + `chongming-worker` + 依赖 +- 隔离性由 `test_worker_isolation.py` 保证(阻断 chongming 导入 + AST 检查 import 语句) + +--- + ## MQTT 协议 ### Topic 约定 @@ -342,7 +393,8 @@ uv run serve # 启动开发服务 uv run gen_plugin # 生成统一风格插件骨架 uv run python -m chongming.scripts.gen_models # 生成 Pydantic 模型 uv run python -m chongming.scripts.build # 构建打包(PyInstaller/Nuitka) -uv run worker_serve --type # 以独立进程运行 Worker(load_mode=external) +uv run worker_serve --type # 独立 Worker 进程(本地调试,load_mode=external) +chongming-worker --type # 独立 Worker 进程(容器入口) uv pip install -e utils/ # 安装/更新工具包 ``` @@ -369,7 +421,7 @@ uv pip install -e utils/ # 安装/更新工具包 | **chongming-jwt** | `utils/jwt/` | Rust + PyO3 | JWT 编解码,支持 HS256/384/512 + RS256/384/512 | | **chongming-password** | `utils/password/` | Rust + PyO3 | Argon2id 密码哈希与验证 | | **chongming-request** | `utils/request/` | Python | Zenoh RPC 直连客户端 | -| **chongming-worker** | `utils/worker/` | Python | Worker 框架核心:装饰器、运行时、配置加载 | +| **chongming-worker** | `utils/worker/` | Python | Worker 框架核心:装饰器、运行时、契约校验、独立进程入口(`chongming-worker`) | | **chongming-stream-manager** | `utils/stream_manager/` | Python | ffmpeg + MediaMTX RTSP 流代理管理 | | **bytedance** | `utils/bytedance/` | Python | 字节跳动 AICC 安全通信 SDK(Jeddak 等) | @@ -421,6 +473,7 @@ uv run gen_plugin # 生成统一风格插件骨架 uv run python -m chongming.scripts.gen_models # 生成 Pydantic 模型 uv run build pyinstaller # PyInstaller 打包 uv run build nuitka # Nuitka 打包 +chongming-worker --type # 独立 Worker 进程(进程插件容器入口) uv pip install -e utils/ # 安装/更新工具包子包 ``` @@ -451,19 +504,6 @@ uv pip install -e utils/ # 安装/更新工具包子包 --- -## 工具包 - -| 包名 | 说明 | 技术栈 | -| -------------------- | --------------------------------------------- | ----------- | -| `chongming-config` | TOML 配置加载、TypedDict 类型定义 | Python | -| `chongming-database` | 异步 SQLite(aiosqlite + SQLModel) | Python | -| `chongming-jwt` | JWT 编码/验证(HS256/384/512, RS256/384/512) | Rust + PyO3 | -| `chongming-password` | Argon2id 密码哈希与验证 | Rust + PyO3 | -| `chongming-request` | Zenoh Worker 客户端(负载均衡、超时重试) | Python | -| `chongming-worker` | Worker 框架核心(`@rpc_method`、运行时) | Python | - ---- - ## 更多文档 - [配置说明](config/README.md)