[Task Scheduler] 如何设计

在准备的过程中发现这类题目咱们的训练营没有囊括。

最接近的资料是这一份, System Design: Designing a distributed Job Scheduler | Many interesting concepts to learn - LeetCode Discuss

请问大家有没有比较好的资料推荐学习?这个设计是和咱们的crawler设计类似吗?

1 个赞

Crawler 用到了 Job Scheduler。如果具体设计 Job Scheduler 会有更深的讨论, Job scheduler 有两种情况,复杂度会有比较大的不同,一种是允许 dependency,一种是不允许。允许 dependency 的是最复杂的。开源软件里 Apache Airflow 就是一个全功能的 Task Scheduler。

1 个赞

这个链接分享的很好,我觉得下面置顶的comment推荐的dropbox的task scheuduler写的更好,更适合在面试中使用。

不过这个里面没有说recurring task怎么设计,我觉得recurring task也许可以当做single task来处理,当完成以后,自动产生一个新的task放到storage里面。 老师觉得这个想法怎么样?@logic

有dependency的更复杂,我估计面试中不太容易被问到吧?不过也许可以作为task scheduler 基本的follow up?我觉得这个解法可能先用一个DAG的拓扑排序,然后再去schedule,不过这样的话并行的任务就没法并行了。上面airflow的链接我看了一下,没有原理的介绍。有dependcy的应该怎么处理比较好呀?老师有什么想法呢?@logic

1 个赞

我觉得比较好的是有一个 Centralized Task Manager, 读取 config, 确定当下需要 kick off 哪些 task。如果让 task 自己来 schedule 下一次 task,就把 Task Scheduler 和 Task Execution 放在一起运行了,如果 task 挂了下次都跑不了了。

就是你说的 DAG 排序再 Schedule,这个 DAG 有先后顺序的话肯定不能并行的。

对于上面链接提出的设计图,那我觉得增加一个 Centralized Task Manager 和 Recurring Task DB应该就就可以了吧?

这个设计图不用加东西,Edgestore 里存 recurring task 就好了,config task manager 就是这个 “store consumer”

1 个赞