有一个需求,一个 task 会生成多个子 task,这些 task 可以并行的跑,*后需要汇总。

业务是跑在 K8S 上的,也就是说是不同 pod 会去跑子 task,*后等所有子 task 都结束之后,汇总*终的数据。

这样的需求,不知道大家有什么想法可以建议一下呢?

目前想到的是 dispatch task 用 message queue,利用 redis 来做类似引用计数的效果,生成子 task 的时候计数加 1,完成一个子 task,计数减 1,计数为 0 的时候,进行数据汇总。

task 计数 汇总 生成4 条回复 • 2021-09-02 16:07:22 +08:00
2le 1
2le 3 小时 18 分钟前 via Android ❤️ 1
在我自己负责的项目中是把分布式任务的触发、执行、进度、结果统计等由任务调度微服务完成,目前实现了两种执行器 MQ 和 HTTP 。拿 MQ 来讲,发布任务后,子任务端定期发送 MQ 消息汇报任务状态就行,任务调度服务会消费这些消息,进行任务的统一管理。
v2byy 2
v2byy 3 小时 3 分钟前
@2le 那你的任务调度服务是单点的么?如果不是,那如何知道所有子 task 已经完成?
Itoktsnhc 3
Itoktsnhc 1 小时 25 分钟前
之前做过一个多层任务树状态跟踪系统,主要用在跟踪数据采集任务的状态。
初步需求我觉得类引用计数的方式是没问题的,*简单每个父级任务作为一个 redis 内的 hashset,然后字典的 key 为生成子任务 id 什么的,如果任务状态只有两种,可以使用存在 /不存在来标记,对应的 hashset 内没有任何元素,代表外层任务结束了;如果还有一些元素 那么这些 item 就是没完成的。
Itoktsnhc 4
Itoktsnhc 1 小时 22 分钟前 ❤️ 1
@Itoktsnhc 当然*终随着需求的增加 比如每个任务有多个状态,任务树存在多级等.经历了 redis->sql server->内存数据库 *终使用类 actor 的 Orleans 框架实现