====== 09 Linux 现状与运维 ======
===== 先说结论 =====
截至 2026-06-05,官方 Compute 指南已经包含 Linux Server 入门文档,但该页面明确标注 RhinoCompute on Linux 属于 Rhino WIP,不建议用于生产工作。
因此教学中建议这样定位:
* Windows/IIS:生产主线。
* Linux:实验、评估、未来兼容性验证。
* Docker/容器:适合快速体验,不建议作为生产运行方式。
===== Linux 支持范围 =====
官方 Linux 入门文档提到的系统包括:
* Ubuntu Server 24.04。
* AmazonLinux 2023。
* Debian 13 的步骤可能适用,但不应默认视为完整支持。
官方也说明仍在处理的事项包括:
* Grasshopper 中 RhinoCode 相关脚本组件。
* 3dm 以外文件导入导出。
* 第三方插件管理。
* 其他 WIP 问题。
===== Linux 安装概念流程 =====
概念上分为:
- 安装 .NET 依赖。
- 添加 McNeel 软件源。
- 安装 ''rhino-compute'' 包。
- 配置 ''RHINO_TOKEN'' 和 ''RHINO_COMPUTE_KEY''。
- 使用 systemd 启动服务。
- 用 Hops 或客户端调用 Linux Compute。
服务命令示例:
sudo systemctl start rhino-compute
sudo systemctl stop rhino-compute
sudo systemctl enable rhino-compute
sudo systemctl status rhino-compute
sudo journalctl -u rhino-compute -f
Linux 日志目录:
/var/log/rhino-compute
===== 容器方式的限制 =====
官方文档说明容器适合入门,但不建议生产使用。核心原因是容器通常缺少标准 systemd 服务管理,不适合作为需要随系统重启、受服务管理器托管的长期 Compute 服务。
容器适合:
* 快速验证 Linux 包安装流程。
* 测试 API Key、Hops 连接、基础 GH 定义。
* CI 中做有限的 smoke test。
容器不适合:
* 直接承载生产用户请求。
* 运行复杂第三方插件。
* 依赖长期稳定授权、日志、重启恢复的场景。
===== 运维指标 =====
无论 Windows 还是 Linux,运维上都应关注:
^ 指标 ^ 说明 ^
| 请求量 | 每分钟请求数、峰值请求数。 |
| 成功率 | 2xx/4xx/5xx 比例。 |
| 延迟 | 平均、P95、P99,区分冷启动和热启动。 |
| 子进程数量 | 当前 active children、启动失败次数、异常退出次数。 |
| 内存 | Rhino/Grasshopper/插件很容易成为内存瓶颈。 |
| 请求体大小 | 大 DataTree 或大几何会增加序列化和内存压力。 |
| 超时次数 | 区分客户端超时和服务端超时。 |
| 授权状态 | RHINO_TOKEN 有效性、核心小时用量。 |
===== 日志策略 =====
建议为每个业务请求生成 request id,并在外层服务日志中记录:
* 用户或租户。
* 业务任务类型。
* Compute URL。
* 请求体大小。
* 超时时间。
* HTTP 状态码。
* Compute 响应耗时。
Compute 自身日志通常记录进程、加载、异常和请求状态。外层业务日志和 Compute 日志结合,才能定位“是业务输入错了、网络错了、Compute 子进程错了、还是 Grasshopper 定义错了”。
===== 容量规划 =====
容量规划不要只看 CPU 核心数。还要测:
* 单个 ''compute.geometry'' 子进程启动后占用多少内存。
* 加载 Grasshopper 后增加多少内存。
* 加载第三方插件后增加多少内存。
* 单次典型请求峰值内存。
* 并发请求下 GC、序列化、网关超时表现。
经验做法:
* 从小 ''childcount'' 开始压测。
* 逐步增加并发,观察内存和 P95 延迟。
* 找到“再增加子进程反而变慢”的点。
* 以测试结果决定 VM 规格和 idlespan。
===== 发布流程建议 =====
- 在测试机安装同版本 Rhino、Compute、插件。
- 用代表性 GH 定义和自定义端点跑回归。
- 检查授权、日志、API Key、请求体限制、超时。
- 在维护窗口更新生产。
- 更新后先跑 smoke test。
- 观察日志和核心小时用量。
===== 本章检查点 =====
* 是否明确 Linux 当前是 WIP,不作为默认生产主线?
* 是否知道 Linux 日志在 ''/var/log/rhino-compute''?
* 是否为请求链路设计了 request id?
* 是否通过压测确定 childcount,而不是凭 CPU 核心数猜?
===== 参考资料 =====
* [[https://developer.rhino3d.com/guides/compute/compute-linux-getting-started/|Getting Started with Rhino.Compute on Linux]]
* [[https://developer.rhino3d.com/guides/compute/deploy-to-iis/|Deployment to Production Servers]]
* [[https://developer.rhino3d.com/guides/compute/compute-faq/|Compute FAQ]]