InfoQ Java
无消息代理的分布式Spring Batch:用共享数据库作为协调平面
文章介绍一种不依赖消息代理的分布式Spring Batch分区方案:把Spring Batch本就必需的共享关系型数据库同时用作协调平面,无需Kafka、RabbitMQ等中间件。设计上用BATCH_NODES节点注册表、BATCH_PARTITIONS分区表和BATCH_JOB_COORDINATION协调表承载全部集群状态,按存活节点数动态决定分区规模;由启动作业的节点担任该次执行的master,不存在常驻协调者;worker通过带状态与节点条件的compare-and-set更新领取并推进分区,避免重复执行;节点故障依靠心跳做两阶段处理,先标记不可达,超过宽限期后移除并重新分配其未完成的可转移分区。正确性以契约为准:可转移任务保证至少一次、须幂等,不可转移任务至多一次、失败即中止,分区永不静默丢失。该方案适用于约2到20个节点的中小集群,瓶颈是数据库竞争,超大规模或亚秒级延迟需求仍应选用消息代理。