Skip to content

Firefly v1.0.4

发布日期:2026-08-04

v1.0.4 聚焦大规模同刻到期任务的调度性能与可靠性。经过核心慢路径分析,Scheduler 的 JDBC 写入从逐任务事务改为有界批量原子事务;本地 PostgreSQL 16.14 环境中,50,000 个同一时刻到期任务的调度清空时间由 477.068s 降至 3.572s

构件发布状态

v1.0.4 源码 tag 和 Maven Central 构件尚未发布。生产依赖升级前,请在 Central Portal 确认 1.0.4 已完成索引。

压测边界

本次压力测试覆盖 JDBC Store、Scheduler、Execution/Outbox 事务写入、并发 claim 和结果确认,不包含真实业务 Handler 的 CPU、网络和第三方依赖耗时。

Firefly v1.0.4 调度清空耗时

Firefly v1.0.4 调度吞吐

Firefly v1.0.4 调度延迟分位数

Firefly v1.0.4 资源占用

核心优化

  • 新增批量调度仓储边界,Scheduler 默认按 200 条拆分有界事务。
  • cursor CAS、execution insert、outbox insert 使用 JDBC batch。
  • 一批任务只借用一次 Connection、查询一次数据库时间并提交一次事务。
  • FORBID 并发策略由逐任务活动查询改为每批一次集合查询。
  • shard lease owner、fencing token、cursor CAS 和 execution/outbox 原子性保持不变。
  • 新增 firefly.scheduler.batch-size / FIREFLY_SCHEDULER_BATCH_SIZE,默认 200。

优化结果

所有任务先注册到未来时间,注册完成后再统一设置为同一个近未来时刻,因此调度指标不包含任务注册耗时。

任务数优化前调度优化后调度优化后吞吐提升
5,00041.399 s0.906 s5,518.76/s45.7x
10,000101.295 s0.937 s10,672.36/s108.1x
20,000214.172 s1.869 s10,700.91/s114.6x
50,000477.068 s3.572 s13,997.76/s133.6x

调度延迟

任务数p50p95p99max
5,000199 ms210 ms213 ms214 ms
10,000204 ms213 ms216 ms216 ms
20,000427 ms454 ms456 ms458 ms
50,000886 ms927 ms932 ms936 ms

完整性

50,000 任务最终结果:

  • firefly_job=50,000
  • SUCCEEDED=50,000
  • DONE=50,000
  • duplicate claims / execution IDs / outbox IDs 均为 0
  • 未推进任务游标和非终态 outbox 均为 0

5,000 任务竞争拓扑也通过:8 个 Scheduler 同时竞争全部任务时,调度清空 1.769s,无任务丢失或重复,验证了 CAS 与 fencing 语义。

资源观测

50K 指标观测值
JVM heap 峰值731.4 MiB
Java Working Set 快照928.1 MiB
Java Private 快照1,220.8 MiB
PostgreSQL CPU 快照501.86%
PostgreSQL Memory 快照690.8 MiB
PostgreSQL 主要等待WALWrite / WALSync

优化后 PostgreSQL 能使用更多 CPU 并批量写入 WAL,Scheduler Java 线程不再被逐任务事务往返长期阻塞。50K 总耗时为 242.239s,其中任务逐条注册 191.358s、Outbox 完成模拟 46.004s,Scheduler 已不再是首要瓶颈。

配置

properties
firefly.scheduler.batch-size=200
firefly.scheduler.max-due-records-per-tick=10000
firefly.scheduler.max-idle-wakeup=PT0.5S

批次不应无限增大。更大批次会增加事务时长、回滚成本和 lease 过期风险;建议结合数据库 WAL、JDBC pool 和调度延迟 SLO 调整。

验证

  • 100、5K、10K、20K、50K PostgreSQL 压测全部通过。
  • 新增部分 CAS 失败、FORBID、整批 rollback 测试。
  • gradle test 全模块通过,覆盖 Scheduler、JDBC、Outbox、Server、Netty 和远程 Executor 链路。

完整过程、命令、资源数据和原始 JSON 见源码仓库 docs/stress-test-v1.0.4.md

Released under the Apache-2.0 License.