
iii 实时服务组合快速入门3 步跑通跨语言、可追踪的事件驱动项目【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii后端栈里最贵的往往不是功能本身而是功能之间的缝队列、定时任务、HTTP、状态、可观测性每一项都自带一套接入方式服务一多集成成本就开始平方级上涨。iii 想干的事很直接——把所有能力收敛成一套统一的运行时让任何服务都能被实时地组合、扩展和观察。它给新手提供的价值大致是这几点一条命令把引擎和多个服务拉起新能力即插即用不用先评估采购和写胶水代码Worker、Trigger、Function 三个概念覆盖全部场景学会一次跨语言、跨框架都通用Python、TypeScript、Rust、Go 的 Worker 可以在同一个系统里互相调用调用路径全程可追踪自带 Console 可视化面板Workers、触发器、队列、日志、Trace、状态一目了然。极速上手从安装到跨语言调用先让系统跑起来再理解原理。整个过程只要四条命令。第 1 步安装引擎curl -fsSL https://install.iii.dev/iii/main/install.sh | sh iii --version # 看到版本号即安装成功第 2 步生成项目脚手架iii project init quickstart --template quickstart cd quickstart这一步会生成两个 Worker一个 Python 写的math-worker注册加法函数一个 TypeScript 写的caller-worker暴露 HTTP 端点并跨语言调用前者。第 3 步启动引擎iii --config config.yaml引擎会在ws://localhost:49134上监听终端保持开着。第 4 步注册 Worker 并跨语言调用新开一个终端iii worker add ./workers/math-worker # 注册 Python Worker iii worker add ./workers/caller-worker # 注册 TypeScript Worker iii trigger math::add_two_numbers a10 b20看到{c: 30}就说明一条完整链路已经打通TypeScript Worker 接收调用经引擎路由到 Python Worker 完成计算再返回。两个语言、两个进程、零胶水代码。它解决什么问题传统做法下每个新能力都是一次专项工程接一套可观测性工具要写一堆埋点和集成配置引入一个新的 Agent 框架重试、超时、Trace 各是一套独立体系加一个队列意味着供应商选型、采购流程、数周的集成开发。而且这些成本是复利的4 个服务之间有 6 条潜在集成边20 个服务就有 190 条。每新增一个能力整个技术栈的协调成本就往上跳一个台阶。iii 的思路是把这条曲线压平不要求你为每对服务单独写集成代码而是让所有服务都挂到同一个引擎上。新增 2 个 Worker 和新增 200 个 Worker 是同一个操作——iii worker add装上去的就是一个完整运行的服务而不是一个库所有其他 Worker 立刻能调用它。核心理念三句话讲透 Worker、Trigger、Function用大白话说就是Worker 是干活的Trigger 是让活开干的Function 就是那件活本身。类比一下餐厅Worker 是后厨里的一间间档口面档、凉菜档、饮品档Function 是档口能做的那道菜Trigger 是下单的各种方式——堂食点单、外卖平台、定时订餐。厨师只管把菜做好写 Function怎么被点到的Trigger由餐厅统一路由引擎负责客人不用知道哪道菜出自哪个档口。具体拆开Worker任何能和引擎建立 WebSocket 连接的进程。Python 数据管道、TS API 服务、Rust 微服务都行可以跑在笔记本、容器、K8s甚至浏览器标签页里。Worker 崩溃互不影响引擎只把调用路由给当前在线的 WorkerFunctionWorker 内部带稳定标识的处理单元命名约定是service::name如orders::validate重启、跨语言都不变Trigger触发 Function 的事件。HTTP 请求、cron 计划、队列消息、状态变更、另一个 Function 的调用都是声明式的——Worker 只说当 X 发生时运行这个函数路由、序列化、投递由 iii 处理。能力速览一套原语能撑起哪些场景你想做的事在 iii 里怎么实现说明暴露 REST APIhttpTrigger绑定api_path 方法函数即可被 curl 调用定时任务cronTrigger声明计划表达式到点自动触发函数消息队列消费queueTrigger订阅队列消息逐条交给处理函数响应状态变更state变更触发数据一变依赖它的函数自动运行实时数据流stream Worker流式事件订阅与推送持久化状态state Worker全局 key-value 存储跨调用保留跨语言调用引擎路由TS 调 Python、Rust 调 Go统一走引擎运行时扩展iii worker add/ Compose系统不停机新能力即插即用可视化运维ConsoleWorkers、Traces、日志、队列、状态实时面板场景实战场景 1给函数加持久状态跑通 Quickstart 后一条命令给整个系统装上状态能力iii worker add state然后在 Python Worker 里调一下state::get/state::setrunning_total worker.trigger({ function_id: state::get, payload: {scope: math, key: running_total}, }) new_total (running_total or 0) result[c] worker.trigger({ function_id: state::set, payload: {scope: math, key: running_total, value: new_total}, })连续触发math::add两次结果里会看到running_total从 5 累加到 35——累计值在每次调用之间持久保留且对所有入口CLI、跨语言调用一致生效。场景 2同一函数零改动升级为 HTTP 接口iii worker add http在 TypeScript Worker 里注册一个 Triggerworker.registerTrigger({ type: http, function_id: http::add_two_numbers, config: { api_path: /math/add-two-numbers, http_method: POST }, });然后curl -X POST http://localhost:3111/math/add-two-numbers \ -H Content-Type: application/json \ -d {a: 100, b: 200} # { c: 300, running_total: 335 }同一个函数昨天靠iii trigger调今天直接响应 HTTP——Handler 代码一行没改。触发器注册是乐观的即使 http Worker 还没启动就先注册了触发器引擎会先存起来等类型可用时自动激活。场景 3运行时给系统加人不需要重启、不需要改配置直接往运行中的系统里加 Workeriii compose --namespace dev --up iii trigger -n dev compose::add workerqueue iii trigger -n dev compose::add workeragent每个新 Worker 加入后立刻进入引擎的实时目录其他所有 Worker 会收到通知并能马上调用它。这就是 iii 的Agent 叙事当系统缺某种能力时Agent 和人类开发者用的是同一套接口——加 Worker、发现函数、调用、查 Trace。进阶玩法状态、事件流与可观测性状态管理state Worker 提供全局 key-value 存储按scope隔离命名空间。除了主动读写还可以注册状态变更触发器——数据一变相关函数自动响应适合做响应式业务逻辑。事件流stream Worker 支撑实时数据管道函数可以订阅流事件也可以向下游推送配合队列和触发器能做相当完整的流式应用。可观测性iii console一键启动本地面板默认http://127.0.0.1:3113里面能实时看到Workers 页每个进程的语言、运行时、隔离方式microVM/Docker、注册函数数、在途调用Traces单次调用如何穿越多个 Worker瀑布图和火焰图两种视角Queues / States / Logs队列积压、状态内容、日志明细全在面板里。想深挖的话官方教程 docs/tutorials/linkly/ 用构建一个链接解析应用的方式把持久化、流、渠道、前端、可观测性串成了完整实战docs/tutorials/build-an-agent/ 则演示如何把工具、记忆和编排循环搭成一个 Agent——在 iii 里Agent 的工具就是 Function、记忆就是 state、编排就是 Trigger它本身就是一等公民 Worker。代码是怎么组织的仓库是一个 monorepo各部分职责清晰iii/ ├── engine/ # Rust 写的核心引擎运行时、模块、协议ELv2 协议 ├── sdk/ # Node.js / Python / Rust / Go 四语言 SDK ├── console/ # 开发者控制台React Rust ├── skills/ # 给 AI Agent 阅读的 iii 原语参考材料 ├── crates/ # 配套 Rust 工具compose、supervisor、shell 等 ├── docs/ # 文档站源码Mintlify/MDX ├── website/ # 官网 └── tech-specs/ # 技术方案文档想读核心逻辑可以从 engine/src/ 入手协议定义在 engine/src/protocol.rs写 Worker 时查 sdk/想给 AI 编程助手喂上下文可以看 skills/ 里按原语组织的技能文档。学习路径从文档到贡献按这个顺序走比较省力docs/quickstart.mdx——本文第 2 节对应的完整逐步教程几分钟跑完docs/understanding-iii/——用 Quickstart 项目作例子讲透四个部件的关系docs/using-iii/——Workers、Functions、Triggers、配置、部署的实用手册docs/using-iii/console.mdx 专门讲控制台docs/tutorials/——Linkly 实战、渐进式接入、响应式 CRUD、Agent 构建四条深度教程线docs/creating-workers/——自己动手写 Worker 和自定义 Trigger 类型CONTRIBUTING.md——贡献指南与许可证说明引擎 ELv2其余组件 Apache 2.0。另外仓库提供 skills/ 目录的 Agent 技能包一条npx skills add就能给你的编码助手装上一套 iii 原语参考HTTP、队列、cron、状态、流等全覆盖。小结把集成成本还给业务逻辑iii 的核心赌注是既然队列、定时、HTTP、状态、流、Agent 都可以表达成一个 Worker 若干 Trigger 若干 Function那就不需要为每种能力单独养一套集成体系。你写业务逻辑它管路由、隔离、持久化和追踪——加能力是一句话观察系统是开一个面板。如果你正好在为新系统的技术选型发愁不妨先花十分钟跑一遍 Quickstart亲手感受一下加一个 Worker 加一项完整能力是什么体验curl -fsSL https://install.iii.dev/iii/main/install.sh | sh iii project init myapp --template quickstart觉得有用的话欢迎到仓库点个 Star 支持一下git clone https://gitcode.com/GitHub_Trending/mo/iii【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考