Volcano 1.0: 分布式调度系统漫谈

2020 年 8 月 18 日

Volcano 1.0: 分布式调度系统漫谈

今年(2020)7 月初,Volcano 发布了 1.0 版本。1.0 做为里程碑版本,在 Volcano 整个规划中起到了承上启下的作用。此次发布的 1.0 版本支持了 GPU 共享,作业动态扩缩容,批任务抢占等功能,并主要加强了稳定性;同时,在 1.0 发布后 Volcano 也在线下讨论了分布式调度系统的未来发展的趋势等。


历史


在分析趋势之前,我们先看一下分布式调度系统的历史。早期分布式调度系统以批处理系统为主,例如九几年的 LSF/SGE/PBS 等,这些批处理系统大规划的使用在 HPC 领域,而且对作业级的调度进行大量的研究工作;后续由批处理系统延伸出多集群、多组织资源共享的需求,便成了网络计算。网络计算与云计算最大的不同是:网络计算强调多组织的资源共享,而云计算强调云厂商的集中式支持;这也是云计算成为主流的主要原因:多组织之间共享需要完备的协议和足够的安全支持,而云服务仅需要对用户提供相应服务和安全,并不需要在多个云厂商之间进行共享;随着开源社区的发展,再将应用接口逐步统一,e.g. Kubernetes。Hadoop 出现后,不仅推动了分布式调度系统中对数据的处理,同时也推动了开源软件的生态。2012 和 2014 是两个重要的节点,Hadoop 将资源管理层与领域框架层分开,随后的领域框架也有机会构建自己的生态,e.g. Spark;同时,将资源管理层与领域框架分开也被广泛认可。在容器及 Kuberentes 流行后,凭借其高资源利用率与隔离,环境标准化等优势,越来越多的人希望将这些批量计算应用统一到 Kubernetes 平台上。



未来的趋势


多种应用统一调度


随着各行各业的发展,涌现出越来越多的领域框架来支持业务的发展;这些框架都在相应的业务领域有着不可替代的作用,e.g. Spark, Tensorflow, Flink 等。在业务复杂性能不断增加的情况下,单一的领域框架很难应对现在复杂的业务场景;因此现在普遍使用多种框架达成业务目标,如下图所示。



但随着各个领域框架集群的不断扩大,以及单个业务的波动性,各个子集群的资源浪费比较严重;因此 越来越多的用户希望通过统一调度系统来解决资源共享的问题。在技术选型上,Kubernetes 凭借其优秀的扩展性获得大部分用户青睐。


异构硬件


在批量计算任务向云原生环境迁移的过程中,对云原生环境的算力提出了新的要求;各个厂商为了应对这些新的需求,为各个场景提供了不同架构的硬件,例如 鲲鹏,昇腾,X86,GPU 等。当多种应用运行在统一平台上时,需要云原生调度系统能够对异构硬件资源进行统一的管理与调度,使用各种应用达到最优的资源配比。目前,硬件的信息通过 kubernetes 的 device plugin 机制提供,但 Kubernetes 的 device plugin 仍有一些不足,例如 无法很好的支持硬件拓扑。在调度方面 Volcano 已经支持主流的调度策略,并在最新的 1.0 版本中支持了 GPU 共享,大大增加了 GPU 的利用率,有效降低了 GPU 的使用成本


跨集群/跨云


跨集群一直是分布调度系统解决大规模、灾备等问题的主要解决方案;同时,为了降低厂商绑定的风险,并最大限度兼顾不同云厂商的优势,多云环境下的负载高效分发逐渐成为趋势。在多云的环境中,面向数据位置的优化,作业执行时间预估等问题都是需要调度系统解决的问题;在 Volcano 中,将通过多个项目实现跨集群、跨云的作业调度,例如 JobForward (#880)。


智能化


调度算法在分布调度系统中有大量的研究,从早期的批处理系统到近期的 Borg,Volcano 等;早期的批处理系统以特定场景的算法优化为主,对于复杂的场景需要大量的计算,虽然有大量针对 HPC 和网络的调度优化,但常用和落地的算法比较少。随着人工智能的发展,越来越多的调度系统将会使用 AI 相应的能力对算法进行优化;在 Volcano 中,将通过 AI 的能力驱动 Volcano 中各个调度算法进行优化,并通过 AI 的能力提供新的调度算法


总结


分布式调度系统是一个复杂的系统,需要多个组件共协作以提高整体的效率,例如 应用管理,调度,异构硬件管理,存储等,仅靠调度器无法完成这些工作。Volcano 作为 CNCF 首个面向批量计算的分布式调度系统,包含了应用管理,作业调度,异构硬件等多个组件和功能;其调度器兼容 kubernetes 调度策略,同时支持在线、离线两种作业类型;控制器提供了统一的作业管理,支持多种作业的接入,包括 MPI, Tensorflow, MidSpore, Spark 等;设备插件提供了对异构硬件的支持,例如 1.0 版中支持了 GPU 共享。因此,Volcano 面向分布式调度系统的趋势提供了完整的方案,可以在多种场景下提高作业性能,资源使用率等。


Volcano 特训营:六节课学懂容器批量计算


由 Volcnao 项目发起者马达主讲的直播课程正在进行中,课程共有 6 期,从技术原理到实战演练,涵盖 Volcano 全景。



锁定后续课程信息,获取往期回放与讲师 PPT,请假助手微信(k8s2222)并备注“Volcano”。


2020 年 8 月 18 日 10:101002

评论 1 条评论

发布
用户头像
好的我知道了,上架了要卖钱了;所有云计算厂商都一个套路。。
2020 年 08 月 19 日 08:54
回复
没有更多评论了
发现更多内容

一个在交流群里讨论过两轮的问题,答案竟然跟一个 PEP 有关

Python猫

Python 编程

Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?

Python猫

Python 编程

商业通识 : 商业到底是什么?

Walker

学习 得到 个人成长 商业

妈妈,今天您几点下班?

脑极体

首个数字银行卡明年发行,广州出台区块链措施支持大湾区

CECBC区块链专委会

区块链 金融科技 社会

Flink从保存点启动应用-18

小知识点

scala 大数据 flink

JavaScript 深拷贝与浅拷贝

好编程

区块链技术应用于链接智慧医疗

CECBC区块链专委会

区块链 社会保险 智能医疗

为什么Java二维数组不用指定列的长度

Rayjun

Java 数组

智能商业时代的思考(一)从在线化到网络化

刘旭东

拼多多 淘宝 智能商业 网络协同

Python 函数为什么会默认返回 None?

Python猫

Python 编程

[翻译]Defer,Panic,and Recover

卓丁

golang defer panic recover

2020-09-03-第十三周作业

路易斯李李李

拥抱K8S系列-04-基于docker部署更多应用

张无忌

Docker 标准化 vsftpd

Python 为什么没有 void 关键字?

Python猫

Python 编程

Python 为什么能支持任意的真值判断?

Python猫

Python 编程

区块链技术破解数字版权保护难题

CECBC区块链专委会

区块链 版权保护 数字技术

Google鼓励的13条代码审查标准 [建议收藏]

简爱W

java安全编码指南之:声明和初始化

程序那些事

安全编码 java安全编码 编码指南 对象初始化

怎么向女朋友解释什么叫区块链?

艾小仙

比特币 区块链 以太坊 defi

Python 中的数字到底是什么?

Python猫

Python 翻译 PEP

持续集成有什么好处?快来看鸭

清菡

jenkins

职场求生攻略答疑篇之 3 —— 数据是土地

臧萌

数据 职场成长

SpringBoot 缓存之常用注解

hepingfly

Java 缓存 springboot 注解

【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!

冰河

MySQL 面试 事务 隔离级别 冰河

Elasticsearch之mapping

北漂码农有话说

oeasy教您玩转linux010206toilet

o

人生革命由自律发起

胡迪伦

自学编程 拖延症 懒惰 死循环

为稳外贸保驾护航 区块链交易平台显身手

CECBC区块链专委会

区块链 银行 福费廷

宁波新基建之路 基于制造优势破题智慧发展

CECBC区块链专委会

新基建

如何将VSCode变成绿色版本

lmymirror

vscode 教程

Volcano 1.0: 分布式调度系统漫谈-InfoQ