<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>工作流引擎 on 卓琪的开发笔记</title>
    <link>https://zhuoqidev.com/tags/%E5%B7%A5%E4%BD%9C%E6%B5%81%E5%BC%95%E6%93%8E/</link>
    <description>Recent content in 工作流引擎 on 卓琪的开发笔记</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    <copyright>© 2026 Liu ZhuoQi</copyright>
    <lastBuildDate>Sat, 16 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://zhuoqidev.com/tags/%E5%B7%A5%E4%BD%9C%E6%B5%81%E5%BC%95%E6%93%8E/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>生产环境 Agent 实践：为什么我们从 Celery 迁移到 Temporal</title>
      <link>https://zhuoqidev.com/posts/why-temporal-not-celery/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://zhuoqidev.com/posts/why-temporal-not-celery/</guid>
      <description>&lt;p&gt;2026 年 4 月，我们把 seo-project 的任务队列从 Celery 全面迁移到了 Temporal。删除的依赖只有一个（&lt;code&gt;celery&lt;/code&gt;），新增的核心代码有 11 个文件（&lt;code&gt;src/infrastructure/temporal/&lt;/code&gt;），容器从 &lt;code&gt;api/worker/beat&lt;/code&gt; 变成了 &lt;code&gt;api/temporal_worker_blue/green&lt;/code&gt;（蓝绿部署）。&lt;/p&gt;&#xA;&lt;p&gt;这件事做完后，最常被问到的问题是：&lt;strong&gt;为什么不用 Celery？已经能跑的东西换它干什么？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这篇文章就是答案。它不来自文档对比，来自生产环境跑 Agent 流水线时逐条撞上的坑。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Celery 能做的事，为什么在 Agent 场景里开始不够用&#xA;    &lt;div id=&#34;celery-能做的事为什么在-agent-场景里开始不够用&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#celery-%e8%83%bd%e5%81%9a%e7%9a%84%e4%ba%8b%e4%b8%ba%e4%bb%80%e4%b9%88%e5%9c%a8-agent-%e5%9c%ba%e6%99%af%e9%87%8c%e5%bc%80%e5%a7%8b%e4%b8%8d%e5%a4%9f%e7%94%a8&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;先说清楚一个基本判断：&lt;strong&gt;Celery 是好工具&lt;/strong&gt;。对于&amp;quot;发封邮件、生成一张缩略图、推送一条通知&amp;quot;这类标准异步任务，它完全够用，工业界跑了十几年。&lt;/p&gt;&#xA;&lt;p&gt;但我们跑的负载和这不一样：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34; id=&#34;1&#34;&gt;&lt;a class=&#34;lnlinks&#34; href=&#34;#1&#34;&gt;1&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34; id=&#34;2&#34;&gt;&lt;a class=&#34;lnlinks&#34; href=&#34;#2&#34;&gt;2&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34; id=&#34;3&#34;&gt;&lt;a class=&#34;lnlinks&#34; href=&#34;#3&#34;&gt;3&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34; id=&#34;4&#34;&gt;&lt;a class=&#34;lnlinks&#34; href=&#34;#4&#34;&gt;4&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34; id=&#34;5&#34;&gt;&lt;a class=&#34;lnlinks&#34; href=&#34;#5&#34;&gt;5&lt;/a&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34; id=&#34;6&#34;&gt;&lt;a class=&#34;lnlinks&#34; href=&#34;#6&#34;&gt;6&lt;/a&gt;&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;一个 Run 包含 N 条 longtail&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;每条 longtail 跑 A → B → C → D 四个 Agent 阶段&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;每个阶段调一次或多次 AI API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;总耗时任意一条都在 60-180 秒区间&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;每一步的中间结果需要持久化&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;任何一步失败需要知道&amp;#34;停在哪、为什么、能不能只重试这一步&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;这是&lt;strong&gt;有状态的、长时的、多阶段的业务流程&lt;/strong&gt;。任务队列和业务流程引擎之间的分界线，就在这里。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
