本文是 Borg(2020) 的阅读笔记,主要梳理要点,并联系实践谈谈一些感受。

Intro

和 2015 年论文相比,Borg 近几年扩展不少功能和优化性能,进一步提升了资源利用率。有趣的是,从 Parent-child dependencies(DAG)、新增 Batch 调度器、BE 贡献了大部分新增资源利率等现象推断,Borg 重点加大了对离线业务的支持。

近几年是云原生化高歌猛进的几年,也是深度学习、大数据体系拥抱云原生的重要年份。和不少业内同行交流下来有趣的是:不少公司的深度学习已经实现云原生化,而在线服务体系却停留在虚拟机时代。

  1. The 2019 trace has several new features.
    • allocations
    • parent-child dependencies
    • additional placement constraints
  2. The workload mix has changed: free tier -> best-effort batch.
  3. The scheduling rate is higher: 3.7X Job, 7X task.
  4. A very heavy-tailed distribution of job sizes.
  5. Vertical autoscaling is effective.

A quick summary of Borg

主要进一步扩展了资源的类型,大大提升了 Priority 的表达空间。

  • Free tier: incur no internal charges, and have no Service Level
  • Best-effort Batch (beb) tier: managed by the batch scheduler and incur low internal charges
  • Mid-tier: jobs in this category offer SLOs weaker than those offered to production tier workloads
  • Production tier:jobs in this category require high availability
  • Monitoring tier

主要是为了解决什么问题呢?其次这些类型的资源应该 Mapping 到什么类型任务比较合适呢?

Comparing the 2011 and 2019 traces

本章节主要介绍了 2011 年到 2019 年的主要变化:

  • Job priority values.
  • Normalized CPU units: to help its users better handle machine heterogeneity, Borg has switched to using abstract Google Compute Units (GCUs) instead of physical CPU cores, and the trace follows suite. An allocation of 1 GCU should provide about the same amount of computational power on any machine in the fleet, and Borg maps that onto the appropriate number of physical CPU cores
  • Alloc sets: these allow users to reserve resources on machines into which jobs can later be scheduled.

场景从何而来?

  • Job dependencies.
  • Batch queuing: supports multiple schedulers, including a batch scheduler that manages. the aggregate batch job workload for throughput.
  • Vertical scaling: Autopilot.

从本人理解来看,Borg 单集群规模基本保持不变,每个集群的节点数量在 1W 左右;但是单个节点的规格增加许多,其次机房规模更加庞大。从功能的视角来看主要丰富了 Batch Scheduling / VPA / Job Dependency / Alloc Sets 等特性,而这些特性重点专注于离线的场景。Normalized CPU units 是非常有趣的话题,大厂每年均会采购数量不菲的机器,而机器的寿命通常在 3-4 年,因此很容易存在大量不同规格且不同代际的硬件资源,造成 task 之间的能力参差不齐,最终因木桶效应而影响 Job 的整体性能。Borg 采用了对算力归一化的做法,提供了算力公平性的分配的一种可行思路。

Resource utilization

Borg 的资利用率提升了近 50%,其中 BE 类型资源贡献了大部分利用率的提升:

  • CPU:40 -> 60%,其中在线部分带来 25 % -> 30%,BE + Mid Tier 3% -> 23%。
  • Mem:40 -> 60%,在线少量增加,BE + Free + Mid Tier 贡献 20+%。

此外超售更加激进,利用率的衡量上增加了方差指标,客观上反应算力和任务的更加合理的匹配,降低热点效应。

Evolution in the scheduling load

如下是 Scheduler 的吞吐变化,在上万节点的集群规模下,1K Pod/s 吞吐对 K8S 而言挑战不小。

  • 964 jobs/hour -> 3360 jobs/hour
  • 166 tasks/s -> 1162 tasks/s

Vertical scaling

AutoPilot 是 Vertical Scaling 具体实现,感兴趣可以参考相关论文。从个人经验来看,VPA 的落地场景挑战比较大,放眼业内大规模的实践实乃凤毛麟角。

Lessons learned from trace generation

8 年过去了,Borg 坚持面向自助式的思路,提供丰富的文档介绍、技术工具基于自助式的排查。

  • Exposing enough details without losing focus
  • Providing explanations for unreasonable cases
  • Automated validation

Research directions

Gang Scheduler 的引入容易带来额外的计算开销、各个集群直接的指标方差、大客户和长尾客户的权衡也是各个调度系统在实践过程中常见的问题。

  • Explainable scheduling.
  • How far can overcommittment be pushed.
  • Gang scheduling.
  • Inter-cell variations.
  • Scheduling to combat heavy tails.