Inngest 是什么?5.9K 星的持久化执行引擎,把「跑挂了从断点续跑」做成基础设施(基础篇)
你肯定遇到过这种糟心事:一个 AI Agent 干到一半,第三步的 LLM 调用超时了,整个流程直接作废,前面两步的结果全白跑。要么你自己写一堆重试和状态记录的代码,要么就只能重头再来。
Inngest 就是来解决这个的。它是目前 durable execution(持久化执行)赛道里比较有代表性的一个开源项目——GitHub 上 5.9K 星,官网挂着 7.1K,虽然比 Temporal(23.6K 星)、Prefect(24K 星)小一圈,但它把「让你的后端变得不可打断」这件事做得足够轻,装起来也快。
它到底在干什么
一句话:你只管把函数写出来,把要跑的步骤用 step.run() 包起来,剩下的持久化、重试、状态同步、限流、去重,Inngest 全包了。
传统做法是自己搭一套消息队列 + worker + 状态表,跑挂了要自己判断从哪恢复。Inngest 的思路是让你别碰这些基础设施。你发一个事件(inngest.send()),它的编排引擎决定什么时候调用你的函数、调用几次;函数内部每个 step.run() 的返回值都会被落库记账。下次重试的时候,已经跑成功的步骤直接跳过,只重跑失败的那一步。
这就是「持久化执行」四个字的实际含义——不是每次重试都从零开始,而是从上次挂掉的那个点接着跑。
下图是一次典型的执行流程,注意右边那条「失败—重试—续跑」的回路:
上手有多快
TypeScript 项目就两步:
npm install inngest
npx inngest-cli@latest dev # 本地起一个 Dev Server
然后把函数包一层:
import { Inngest } from "inngest";
export const myFn = Inngest.createFunction(
{ id: "summarize-article" },
{ event: "article/published" },
async ({ event, step }) => {
const raw = await step.run("fetch", () => fetchArticle(event.data.url));
const summary = await step.run("llm", () => callLLM(raw));
await step.run("save", () => saveToDB(summary));
}
);
本地那个 Dev Server 会给你一个可视化面板,能看到每次执行的 trace、每个 step 的输入输出、失败原因。这点对调试 AI 工作流特别友好——你不用再靠 console.log 猜哪一步炸了。
SDK 目前覆盖 TypeScript(v3 / v4 双线)、Python、Go 三种语言。Agent 场景官方还单独做了个 AgentKit(946 星),能在 Inngest 上搭多 Agent 网络,支持 MCP 接工具,路由可以是代码写的也可以是 LLM 决定的。
定价和自托管
开源部分可以完全自托管,本地跑 Dev Server 或者自己架服务器都行。官方云的免费档给 5 个席位、5 万次执行、50 万事件,做原型够用;Pro 档 99 美元/月起,执行次数提到 100 万,还带 Sandboxes(隔离的 microVM,能在不影响生产的前提下跑新 prompt 做 A/B)和更长的 trace 保留。
实话说几句
优点很实在。 对 AI 工作流这种「经常跑到一半失败」的场景,断点续跑确实省 token 也省时间。LLM 调用又贵又不稳定,每次重试都从头跑一遍等于白烧钱。而且它对开发者友好,装完就能用,不像 Temporal 那样要先理解一堆 Workflow、Activity、Worker 的概念。
但别神化它。 它本质是个「函数编排 + 状态记账」的引擎,不是让你少写业务逻辑的魔法。你的步骤该拆还得拆,拆得不合理照样乱。而且持久化执行解决的是「跑挂了怎么恢复」,不解决「你这个 Agent 逻辑本身对不对」。
还有个现实问题:vendor lock-in。 一旦你把所有流程都用 step.run() 包起来,代码里就到处是 Inngest 的 SDK 调用。虽然核心逻辑还是你的函数,但想迁去 Temporal 或者自建队列,重写成本不低。上生产前想清楚这点。
另外它比 Temporal 轻,也就意味着能力边界更窄。 Temporal 那套适合极其复杂、要跑几天几月的长事务;Inngest 更适合「几分钟到几小时、事件驱动、步骤清晰」的工作流。选型的时候别只看星数,看你自己的流程复杂度。
适合谁
写 AI Agent、跑 LLM 工作流、做事件驱动后端的团队,尤其是受够了自己手写重试和状态管理的人。如果你的流程经常跑到一半失败、每次重试成本又高,Inngest 值得一试。如果你需要的是极其复杂的企业级长事务编排,那还是 Temporal 更对口。
总之,这是个把「不可打断的后端」从大厂专利变成普通开发者也能用的东西。5.9K 星不算爆炸,但方向是对的,值得放进你的工具箱。