跳到主要内容

设计模式

来自 Dex 示例的可复用 Flow 形状。每个模式页说明问题、做法,并链接到多语言代码。

完整示例位于 examples/go、examples/java、examples/python、examples/typescript 和 examples/rust。可在 examples playground 中试用 HTTP 示例;见 examples/README.md。

  • Durable Timer — 选择 cron schedule、Reminder 或 inactivity tracker。
  • Drain Channels
  • 可中断执行 — 根据 durable 控制消息,优雅地停止或转向长时间工作。
  • Failure Handling — 恢复 Execute 或 WaitFor 失败、升级给操作人员,或强制执行业务截止时间。
  • Parallel Steps — 选择静态、动态、等待全部完成或首个获胜的并发 Step 协调方式。
  • Parallel SubFlows — 用 SubFlow fan-out、父 Flow 并发上限、分区和 durable 背压处理大规模并行工作。
  • Polling — 在一个长时间运行的 Step 中等待外部系统。
  • 顺序分块 AttributeMap — 将有序历史 append 到有大小上限的不可变 chunk。
  • Hash 分区 AttributeMap — 通过稳定业务 key 直接查找和更新结构化记录。
  • Data Storage — 将每个实体的 durable Flow Attribute 投影到应用自有的 SQL 表。
  • 响应式更新 — 在 Step 边界返回、等待 durable 状态,或流式传递增量更新。

如何选择分区模式​

维度Sequentially ChunkedHash-Partitioned
分组方式按递增 sequence,每 100 条形成一个 chunkCanonical key 的 FNV-1a hash modulo 1,000
主要目标高效 append 和按顺序分页按稳定业务 key 直接 lookup 和 upsert
典型数据Subscriber history、agent messages、audit eventsCustomer profiles、account metadata、配置目录
单次读取一个顺序 chunk一个 hash bucket
单次写入重写活动 chunk;rollover 时额外写 archive重写目标 bucket
顺序天然保留写入顺序没有自然全局顺序
按 key 查找通常需要扫描多个 chunk 或额外索引直接计算一个 partition
更新旧数据不适合;archive chunk 应保持不可变适合在目标 bucket 内 upsert
写入并发所有 append 竞争同一个活动 chunk不同 partition 使用独立 lock
数据增长自动创建新 chunk,不需要 rehashPartition 数固定,每个 bucket 随总量增长
分布按记录数天然均衡通常近似均衡,但可能出现热点 partition
修改参数新数据可以使用带版本的 chunk 策略修改 partition 数需要 rehash 和 migration
全量枚举按顺序读取所有 chunk读取最多 1,000 个 partition
最适合Append-only、有时间或 sequence 顺序的数据有稳定 lookup key 的结构化 value