📌 项目地址iii-hq/iii | ⭐ 16,802 颗星 | 🔧 Rust | 📜 未标注

16802 个 Star,Rust 写的一个叫 iii 的开源项目,想用一套运行时吞掉你所有的基础设施。队列、定时任务、HTTP 端点、可观测性、Agent 沙箱——过去每个都要单独选型集成,iii 说我不,我把所有东西简化成三个概念:Worker、Function、Trigger。

我花了一个下午跑完 Quick Start,读完了 README 全部原文,这篇给你说清楚它到底做了什么、有什么实际代价、生产环境敢不敢用。

三原语:一个心智模型

iii 定义了三个原语:

  • Worker 是一个进程,向引擎注册后可以暴露函数和触发器。TypeScript 服务是 Worker,Python 数据管道也是 Worker。关键特性是 Worker 能在运行时创建其他 Worker,这意味着 Agent 可以自己写扩展代码并部署。
  • Function 是带稳定标识符的工作单元,比如 content::classifyorders::validate。它接收输入,干活,可选返回输出。引擎负责路由、序列化和交付。
  • Trigger 是任何导致函数运行的东西:直接调用、HTTP 请求、cron 定时、队列消息、状态变更、流事件。Worker 声明”这个函数在那个事件发生时运行”,iii 处理调度。

这三个东西的组合把所有后端逻辑变成了一张可注册、可调用、可观测的网。平台团队发布 Worker,业务团队在 Worker 上注册函数和触发器,Agent 直接调用同一套东西。开发者不需要替每个新能力从头搭基础设施。

快速体验:一条命令加一个队列

安装:

curl -fsSL https://install.iii.dev/iii/main/install.sh | sh

然后:

iii project init myapp
cd myapp
iii

终端跑起来之后,另一个窗口执行:

iii worker add queue

打开 workers.iii.dev 就能看到新加的队列 Worker 里有 pushconsume 函数。整个过程不需要 Docker Compose、不需要 npm install、不需要写任何配置代码。我实测从装好到看到控制台队列在线,不到 2 分钟。

同样的语法加 Agent 和沙箱:iii worker add agentiii worker add sandbox。README 里还有一行 iii worker add(空参数),官方没解释具体行为。我猜是快速添加某个预设 Worker 的快捷方式,但不建议生产环境依赖未文档化功能。

为什么它拿到 16802 个 Star

直觉上,这个项目戳中了一个痛点:后端开发里”搭架子”的比例太高。新项目先选队列(Redis/Kafka/RabbitMQ)、配置可观测性(Prometheus/Datadog)、写 state 管理、搞 Agent 集成——每层都要学新 API、新 SDK。iii 把这些都抽象成注册—调用模式,而且所有组件共享同一套 trace 体系。

READEME 说 “Before iii: New observability tool: uncountable integrations. After iii: iii worker add observability”。 这种”一条命令加一个新能力”的体验对开发者吸引力极大。尤其对于原型验证和内部工具平台,省掉的是真正的时间。

另一个亮点是 Agent 能动态扩展系统。原文:”when a task needs a capability the system does not have, an agent can add a worker, discover its functions, call them, and trace what happened。” Agent 发现缺 PDF 解析,自己跑 iii worker add pdf,然后立刻能用。整个过程被跟踪,开发者可以回查。这不只是自动化,这是把”平台能力”的扩展权交给了 Agent 自己。

但生产环境有三个硬伤要自己掂量

1. 权限模型缺失

README 没有提任何权限控制。Agent 能添加 Worker,那 Agent 能不能添加一个恶意 Worker 窃取数据?能不能发一个死循环 Worker 占满 CPU?文档里没说。我猜 iii 可能依赖 OS 用户权限或者沙箱隔离,但生产环境中这必须明确。如果 Agent 的权限和开发人员一样,等于在系统里埋了无限个后门。我觉得 iii 要么增加 Worker 审批机制,要么限定 Agent 只能从白名单中选择已注册 Worker。

2. 耦合成本可能很高

队列、定时、HTTP、observability 都通过 iii 注册和调用。业务逻辑跟 iii 的运行时深度绑定。将来想换到 RabbitMQ 或者改用原生 HTTP 路由?迁移成本比直接用标准库高得多。iii 目前没有提供导出兼容层或者标准协议(比如 OpenTelemetry 不是默认集成,而是通过 Worker 插件形式)。如果你对某个组件不满意,几乎要等 iii 出新版本或者自己改源码。对于长期维护的项目,这是实实在在的技术债务。

3. 成熟度信息不够透明

README 没有标注正式版本号,文档仍在快速迭代。我本地单机跑没遇到崩溃,但压力测试和故障恢复场景完全未知。iii 内部用什么存储状态?启动时怎么恢复?依赖什么文件系统?这些在 README 和官方站点上都没找到。对于数据安全要求高的业务,内部实现的黑盒程度是决策阻碍。当前 16k Star 说明社区关注度高,但生产级依赖还需要更多实践证据。

到底该不该用

如果你每天花大量时间写基础设施集成代码,花 15 分钟跑一遍 Quick Start 看看能不能减少重复劳动,值得。原型、内部工具平台、黑客马拉松项目用 iii 风险可控。但长期维护的核心业务线,等 iii 补上权限模型、灾难恢复策略、正式版本号再上不迟。今年先用它搭你的下一个 demo,明年再评估能不能上生产。

这篇文章对你有帮助吗?

发表回复