分布式任务调度器设计的评估
根据我们的需求评估所提出的任务调度器系统。
可用性
我们设计中的第一个组件是适当复制并确保可用性的速率限制器。任务的提交是由多个节点完成的。如果一个提交任务的节点失败了,其他节点会代替它。我们推送任务的队列也是分布式的,确保可用性。因为我们不断监控是否需要添加或删除资源,所以我们始终有资源可用。设计中的每个组件都是分布式的,使整个系统具有可用性。
耐久性
我们将任务存储在持久性分布式数据库中,并在执行时间附近将任务推送到队列中。一旦任务被提交,它将一直保存在数据库中直到执行完成。
可扩展性
我们的任务调度器提供可扩展性,因为我们的设计中任务提交者是分布式的。我们可以向集群中添加更多节点以提交不断增加的任务数量。
任务然后保存在分布式关系型数据库中,这也是可扩展的。从关系型数据库中获取的任务将被推送到分布式队列中,随着任务数量的增加,队列也会扩展。我们可以为不同类型的任务添加更多队列。我们还可以根据资源需求比例添加更多资源。
容错性
任务在第一次执行失败时不会从队列中移除。如果执行失败,我们会尝试最大允许次数。如果任务包含无限循环,我们会在一定时间后终止任务并通知用户。
有界等待时间
我们不会让用户等待无限长的时间。我们有一个关于最大等待时间的限制。如果达到了限制时间,由于某些原因我们无法安排任务,则会通知用户并要求他们再次尝试。
结论
我们讨论了操作系统级任务调度器和数据中心级任务调度器之间的区别。我们解释了数据中心级任务调度需要分布式解决方案的原因,因为有多个租户和分散的资源。我们了解到队列是任务调度器的主要构建单元。我们还使用了分布式队列,在任务数量增加时可以扩展以利用更多资源。
这节课帮助我们评估了FIFO队列的问题。观察到任务调度器的主要工作是设置任务的优先级,为此我们使用了延迟容忍性参数。我们讨论了任务调度器如何确定延迟容忍值,并使用了不同的分布式数据库存储任务详情。我们确保依赖任务按顺序执行,通过在图形数据库中存储的DAG运行任务。根据任务数量(或需求),我们添加或删除资源以优化容量。最后,我们使用监视服务,在需要添加或删除资源时警报管理员。