火山云代理商:火山引擎队列机制如何保障优先级?

本文由火山云代理商【聚搜云】撰写

优先级和创建时间

  • 优先级的数字越大,任务越有可能尽早被调度。当优先级相同时,创建时间越早的任务越有可能优先获得资源。
  • 例如,同一队列下的不同用户以相同的默认优先级创建自定义任务,这些任务将根据创建时间从早到晚依次获得资源。

负载的资源量

  • 平台默认的调度策略是资源利用率最大化,即尽可能地将空闲资源用尽。因此,资源需求量小的任务在被调度的顺序上有先天优势。
  • 例如,存在两个任务A、B,它们除了创建时间和资源量之外,所有配置均相同。A的创建时间早于B,但B是小资源量任务,A的资源需求较大。当队列的空闲资源仅够任务B运行时,为了资源利用率最大化,任务B将先于任务A运行。

资源预留

  • 为避免小资源量任务被高优的大资源量任务“饿死”,当队列的空闲资源较少时,优先级更低的小资源量任务有可能先于大任务被调度。当小任务数量较多时可能出现小任务“饿死”大任务的现象,为解决该问题平台支持为某个任务预留资源。
  • 开启资源预留功能后,优先级低于该任务的将会持续排队直至该任务运行,优先级高于/等于该任务的则不受影响。同时,使用闲时资源的负载在调度时也不受资源预留任务影响。

闲时任务

  • 自定义任务支持在同一资源组维度下,使用其它队列的空闲资源提交成闲时任务,用于应对各队列忙闲不均导致整体资源利用率低的问题。
  • 当队列中出现非闲时任务排队时,平台会在整个资源组的范围内寻找适当的闲时任务并将其停止,将释放出来的资源用于调度非闲时任务。非闲时任务获得资源的优先级始终高于闲时任务,尽管非闲时任务的优先级数字可能比闲时任务的小。

重试高优入队

  • 开启了自动重试的自定义任务会在中断时自动生成一个相同的任务。为避免被打断的任务需要花很久的时间重新排队,平台为重试的任务开通了高优入队的通道。
  • 当队列的空闲资源仅满足重试任务(已创建成功)和普通任务其中之一时,无论普通任务的优先级多高,已创建成功的重试任务将优先于普通任务获得资源。