Skip to content

Lite 规模、故障域与隔离决策 ​

状态:已定(2026-09-29 文档化)。本文记录 WS-G1(Lite 规模与是否拆容器) 与 WS-G5(Renderer 隔离) 的结论,供部署文档与用户文档引用。 历史镜像层证据见已归档调研 §6–§9,未实施形态见已归档子计划。历史评估已归档至 docs/archive/architecture-2026-09/;最新复核与待验证事项见发布检查与待验证事项及归档索引。本文保留既有决策,下文发布形态描述需结合对应版本阅读,不能等同于当前 HEAD 的交付形态。


1. 推荐规模(H2a,产品目标) ​

项口径
团队规模5–10 人小团队
预览并发约 3
项目形态常规演示文稿工作区,非海量资产库
部署形态SQLite 单容器 Lite(llmxpm/web-presentation:sqlite-lite)

硬口径:容量验收(D2)前,上述数字是目标规模,不是 SLA / 硬承诺。 D2(Lite 2C4G 空闲 + 混合负载写路径与 RSS/OOM 基线)尚未采集;在 D2 通过并回填文档之前,不得把 5–10 人 / 并发 3 写成性能承诺或容量保证。D2 通过后若实测低于目标,以实测为准修订本文,而不是维持名义数字。

2. Lite 故障域 ​

SQLite 轻量版把 Backend + Runtime + Renderer(内置 Chromium)+ Nginx(Gateway)四个长期进程放在同一个容器 / 合并故障域内,由 tini 作为 PID 1 负责信号转发与 Chromium 孤儿子进程回收:

事件影响不影响
容器或宿主重启、进程被杀预览缓存、构建临时运行态、内存锁与短生命周期任务状态丢失;进行中的 AI Run 会中断且不自动续跑(Run 产品承诺「会丢」)用户、工作空间、项目、页面、资源、组件、主题、样式等业务数据(SQLite / lite-data 卷内)不丢
单个内部进程异常退出(含 Renderer/浏览器)入口监督(PID 监督 + tini)语义下整容器退出,自动回收孤儿子进程,需容器重启恢复同上;恢复后重新打开预览或重新触发构建即可

运维含义:Lite 的可用性边界是「单容器」,备份只需完整备份 lite-data 数据卷;不要按多服务拓扑假设可以只重启其中一个角色。

3. G1 决策:本轮不拆容器 ​

决策:保持 Lite 单容器形态,本轮不拆分 Backend / Runtime / Nginx / 渲染为多容器。

理由说明
NAS 图形界面只能表达单容器群晖 Container Manager / 飞牛 fnOS 等图形化路径无法可靠表达 Docker secret 文件与多容器编排;拆容器会把 Lite 主用户路径挡在门外
体积不是代价约束来自编排复杂度而非镜像体积;自带浏览器形态与拆分形态的体积差在可接受区间(内部调研 §3 / §9)
进程边界仍然成立Backend venv 仍无 Playwright,浏览器由独立 Renderer 进程持有(config.py fail-closed 校验守的是进程/依赖层);单容器不等于「Backend 跑浏览器」

复审触发(任一满足再议拆容器):Lite 面向多用户且渲染不可信页面代码;或合并故障域实测无法满足目标规模;或 NAS 主路径不再依赖图形界面单容器表达。复审时同步对照内部调研 §7.3 的三个层级(进程/依赖、镜像/交付、容器/隔离),避免把「合并镜像」误判为推翻控制面/执行面边界。

4. WS-G5 决策:Renderer 隔离 = 风险接受 + 分层说明 ​

二选一结论:接受风险并分层说明隔离手段;不把「容器级隔离」作为 Lite 的前置。(容器级隔离与 Lite 单镜像形态冲突;见内部调研 §7.3。)

4.1 现状(如实描述) ​

  • Renderer 与 Backend 处于同一 compose 网络(platform-net),浏览器进程可触达 Backend 内网 API;现有 page.route 拦截只覆盖 Renderer 自身控制面路径(/internal/render/),不覆盖 Backend /api/v1。
  • 控制 API 本身有服务身份凭证与 fail-closed 校验;泄漏面主要是「渲染用户/生成页面时的浏览器与 Backend 同信任域」,不是「任何人可调 Renderer 控制面」。

4.2 分层决策 ​

部署形态决策说明
生产角色部署(compose.runtime-roles.yml 等)继续用网络隔离手段runtime-build / runtime-check 只挂 runtime-jobs-net、不进 platform-net;渲染 Worker 凭证与平台密钥分离(Docker secret / 独立 env);需要时把 Renderer 挂独立网络并只放行 Backend 受信控制端口
Lite 单容器已接受的同容器风险单容器下浏览器与 Backend 同文件系统/网络命名空间;在「自用 / 小团队内部」威胁模型下接受。多用户、低权限成员代码渲染场景必须再升级隔离(独立容器或非 root + 只读挂载),届时重开本决策

4.3 承诺边界(必须随文档对外保留) ​

本决策不是默认多副本 / 多租户安全。
在跨副本演练与多租户隔离升级完成前,不得将 Renderer 与 Backend 的同网/同容器形态描述为「生产级多租户隔离」;多副本拓扑也不因本决策而获得安全背书。

5. 文档与实现同步要求 ​

  • 用户侧规模与故障域描述以本文为准,保持「D2 前不是 SLA」原句。
  • 部署文档引用本文的 G1 / G5 结论时,不得改写成「已具备多租户隔离」或「必须拆容器」。
  • 镜像形态若按专项计划变更(Lite 内含 Renderer 进程等),须更新本文 §2–§4 并在发布说明中写清故障域是否变化。