云计算并非无中生有的概念,它将一般的单台 PC 计算能力通过散布式调度软件连接起来。其最外围的问题是如何把一百台、一千台、一万台机器高效地组织起来,灵便进行任务调度和治理,从而像应用单台机器一样不便地应用多台机器。目前,业界已存在多种散布式调度实现计划,比拟出名的有 Hadoop YARN、Mesos、Google Borg 等。
区别于以上调度零碎,腾讯云的 VStation 从诞生之初,便肩负着大规模调度、海量并发和反对异构计算的历史使命,历经五年的打磨和历练,VStation 通过消息压缩、镜像缓存、快照回滚等系列优化实际,实现了生产吞吐率从数百台 / 分钟到数万台 / 分钟、均匀创立工夫由 300 秒降落到 30 秒以下的惊人变质。本文将从散布式调度零碎的演进史说起,深入浅出腾讯云 VStation 的缘起、架构和调度模式。
1\. 分布式系统中调度的分类与含意
在腾讯云中,不同的产品会解决不同的调度问题,例如批量计算 Batch 次要解决工作之间的调度问题,实质上属于工作流产品;云主机 CVM 则次要解决工作的资源调度问题。本文次要关注 CVM 产品,聚焦探讨的是第二种调度——工作资源调度。
私有云中的调度模型
分布式系统中的调度器通常是整个零碎的外围组件,关系着整体性能,因而业界也始终关注着工作资源调度问题。Google 还对任务调度进行了定义 \[1\]。
Task scheduling refers to the assignment of tasks to machines.
这里的调度就是指为任务分配机器资源,从中不难看出,Task 和 Machine 是工作资源调度中的 2 个配角。
而在私有云中,VM(虚拟机)和 HOST(宿主机)则是调度人造的配角,咱们其实依然能够复用工作资源调度模型,只是 2 个角色产生了演变,Task 演变为 VM,Machine 演变为 HOST。这样,在私有云中,工作资源调度的模型就从“为 Task 调配 Machine 资源”演变为“为 VM 抉择和调配 HOST 资源”。如果把负责工作资源调度的调度器看作一个函数黑盒,其输出是 VM 需要信息,调度器在 HOST 信息的根底上进行调度决策,为 VM 抉择适合的 HOST,输入则是 VM 和 HOST 的匹配对。
2\. 腾讯云调度零碎面临的外围挑战
异构性与调度品质
腾讯星散群规模宏大、架构简单,随同着业务的高速增长和倒退,零碎的调度品质随着宿主机的异构趋势和虚拟机多样化需要出现指数增长。
宿主机的异构性趋势
虚拟机的多样性需要
腾讯云的客户利用场景多种多样,行业笼罩非常宽泛,其对计算资源的需要和敏感点也千差万别。为此,腾讯云提供不同实例机型来满足用户多样化的机型,包含产品概念上的系列 1、系列 2、系列 3 机型,别离对应前文所述的 Intel Haswell、Broadwell、Skylake 机型;每个系列中,咱们也会提供标准型、计算型、内存型、高 IO 型等不同机型。
在以后异构计算衰亡的背景下,腾讯云率先反对 GPU、FPGA、智能网卡的异构机型,将业界最新、最强的计算能力凋谢给用户应用。用户购买不同的虚拟机机型,腾讯云后盾的调度器会抉择满足相应条件的宿主机,这种多样化的产品机型策略,也加剧了异构化的挑战。
异构性对调度品质造成的挑战
在宿主机和虚拟机异构化的场景下,呈现了一些显著的趋势:不是所有的宿主机都能够满足虚拟机的需要,即硬性束缚;即使是满足虚拟机根本需要的宿主机,其满足水平也是不同的,即软性束缚。私有云中的资源调度实质上是对虚拟机和宿主机进行匹配,而异构性减少了二者匹配过程的复杂度,这对调度品质造成了挑战。
大规模与调度吞吐率
超大规模的宿主机集群
近年来,私有云迎来爆发式增长,腾讯云则长期保持着优于市场程度的超高增速,间断多年以三位数的百分增长率飞速发展。为此,腾讯为用户提供了丰盛类型、数量微小的宿主机。随同着这样的高增长,腾讯云单个 Region 规模越来越大,达到了十万量级,整个 Region 的数据中心都由一套腾讯云调度零碎负责管理和调度。可扩展性是分布式系统公认的外围挑战,超大规模的集群对散布式调度零碎带来了显著挑战。
海量的云主机购买需要
同样是收益于云计算的疾速倒退,在 2016、2017 年,虚拟机的购买次数指数级增长,并随同着显著的波动性,造成了潮汐式的海量并发购买景象。对于这种潮汐式用户,能够划分为“间接用户”和“间接用户”,间接用户是指间接购买 CVM 的用户,比方网络爬虫、秒杀抢购用户;间接用户是指用户通过其余腾讯云产品或服务来购买 CVM 实例,例如弹性伸缩(AS)、批量计算(Batch)、竞价实例(Spot)引流的客户。
咱们能够构想,弹性伸缩的用户,在其集群负载高企的时候,心愿能够尽快的实现扩容操作,以此保障其本身的服务质量。其实,无论是间接用户还是间接用户,都具备规模大、时效强的特色。这个规模有多大呢?每小时须要实现数万台虚拟机的购买申请,峰值则为每分钟上千台虚拟机的购买申请。
超大规模对调度吞吐率带来的挑战
在 CVM 进行专题优化之前,过后的单个 Region 的生产吞吐率约为 100 台 / 分钟,统计的工夫规范是从腾讯云后盾收到申请为终点,到交付可用的虚拟机为起点来计算,整个统计过程包含 IO 操作,笼罩残缺的生产流程。100 台 / 分钟生产吞吐率意味着每小时能够生产 6000 台虚拟机。直观来说,对于一款 toB 的产品,这样的生产吞吐率并不算低,然而过后曾经无奈满足用户的海量购买需要。
通过零碎测评,咱们发现调度器曾经成为整个零碎的性能瓶颈,调度吞吐率有余,解决提早减少,影响了整个零碎的可扩展性。同时,咱们的用研团队通过调研发现,国内用户对于等待时间十分敏感,长时间创立容易引起焦虑,心愿能够进一步的缩短创立工夫。总体来说,性能瓶颈既影响了用户业务的时效性,又影响了用户体验,无论从感性还是理性来看,都须要解决调度吞吐率面临的挑战。
3\. 调度架构的演变法则
在异构化、规模化的背景下,针对调度品质、吞吐率等问题,许多公司和钻研机构都做了相应的工作。Google 和 UC Berkeley 就提出了他们认为的调度零碎的演变法则 \[2\]:随同着调度零碎的倒退,逐渐呈现对立调度架构、两级调度架构和共享状态调度架构。
对立调度架构
如图所示,左侧的架构即为对立调度架构,下方是集群的宿主机;两头是集群状态信息,用于保留宿主机的资源状态;上方是对立的调度器,负责接管调度申请,并在集群状态信息的根底上进行调度决策。许多调度零碎最后都被设计为这种架构,例如第一代 Hadoop MapReduce。
这种架构,设计简略,能够便捷的放弃资源数据一致性,然而当宿主机规模增大时,调度器解决单次资源调度申请的工夫会开始减少。当资源调度申请增大到肯定水平时,调度器的吞吐量有余,调度申请开始排队,造成工作阻塞积压。
两级调度架构
和 Mesos 同期间的 Hadoop YARN 是另一款驰名的散布式调度零碎,其类型划分始终存在争议。Hadoop YARN 的支持者 \[3\] 示意 YARN 是一款两级调度零碎,而 Google 系的研究成果则通常认为 YARN 属于对立调度架构。咱们更加认同 Google 的认识,认为 YARN 属于对立调度架构。
如果要探讨调度架构的划分,首先要明确调度的含意。对立调度、两级调度、共享调度是 Omega 提出的分类办法,这里的调度是指为任务分配资源,而不是解决工作间的关系。在这个前提下,Hadoop YARN 的调度过程是由 Resource Manager 实现的,而 Application Master 次要负责工作间关系的管理工作,并未理论参加调度过程。因而,Hadoop YARN 属于对立调度架构。
共享状态调度架构
两级调度架构在资源视图、调度并发度方面存在的问题,业界提出了共享状态调度架构,其典型代表是 Google Borg 和 Omega。调度零碎具备多个调度器,调度器之间采纳无锁乐观并发机制,每个调度器都具备全局资源视图,可接管待调度工作,同时进行调度。
然而,并发调度也带来一个显著的问题——调度抵触:即多个调度器同时工作并选中了雷同的宿主机,只有一个调度器能够调度胜利,其余调度器须要从新进行调度。在调度并发度较大的状况下,其实调度抵触的概率是比拟大的,从新调度的代价偏大。
4\. VStation 总体架构
为了解决超大规模对调度吞吐率带来的挑战,2013 年初,腾讯云自主研发的革命性虚拟化平台 VStation 全面上线。作为腾讯云新一代的调度零碎,作为腾讯云新一代的调度零碎,VStation 承载了腾讯云 CVM 后盾的整体集群治理与系统调度,其架构图如图所示。在 VStation 架构中存在多种模块,Scheduler 就是其中的一种模块,负责为虚拟机抉择适合的宿主机。
在 VStation 中,每个模块并不间接互相调用,而是监听特定的队列并提供一个回调函数,框架会将参数传递给回调函数执行,业务层的开发人员只需专一于本身的业务逻辑,不用关怀音讯通信,通信会由框架对立进行治理。
那么各个模块如何协同实现工作的呢?这些模块会通过音讯队列进行间接通信,具体的通信策略由下层 VStation API 进行配置化,API 定义每个流程须要执行的具体步骤和程序。
这样的架构设计理念相似于 Unix,只做一件事并把它做好。每个模块就像 Unix 中的命令一样,专一于本身的逻辑,如果它们须要相互组合,开发人员能够通过下层 API 进行配置化组合。
以创立云主机为例,当 VStation API 收到用户的创立工作时,API 会结构一个音讯模板,设置好用户的参数,填充好事后定义的配置步骤,依照配置步骤发送给第一个步骤对应的模块,第一个步骤的模块执行实现后会发送给第二个步骤的模块,顺次类推。Scheduler 则属于其中的一个模块,其中的一个消费者收到工作信息后,抉择适合的选宿主机,当实现调度后,将数据包转发给下一个接管模块进行解决。最初所有的步骤依照配置的程序执行实现,虚拟机创立流程也就天然实现了。
5\. VStation 的调度架构与优化实际
调度架构
VStation 的调度架构,实质上与 Google Borg/Omega 相似,采纳共享状态调度架构,泛滥调度器采纳无锁乐观并发机制、基于全局资源视图进行调度决策,显著晋升了调度器的吞吐率;提交调度后果保障事务性,保障资源数据的强一致性。另一方面,针对 Google Omega 存在的隐患,对调度抵触进行优化。
总体来说,调度过程包含资源同步、调度决策和提交调度后果三个环节。
资源同步
调度器在接管待调度虚拟机后,会先进行资源同步,拉取集群状态信息,以此为数据根底进行调度决策。资源同步操作在逻辑上看较为直观,然而在超大规模数据中心中遇到了挑战。腾讯云单个 Region 宿主机的规模达到了十万量级,调度器达到了数百规模,即调度总量数据为千万级规模,即便应用高配置的数据库集群也会在调度顶峰时呈现显著的提早。
为此,咱们采纳公有缓存和增量更新的办法拉取数据。调度器启动后首次调度时,会全量拉取数据,并缓存在调度器本地内存中,造成公有缓存;后续调度时会依据工夫戳进行增量更新,对上一次调度之后发生变化的数据进行更新。这样,在大规模调度的场景下,同步数据量可缩小 95% 以上。
调度决策
在资源同步之后,调度器会在全局资源视图的根底上,为虚拟机抉择适合的宿主机,整体包含 3 个环节过滤、排序和打散。
提交调度后果
VStation 提交调度后果,会保障资源数据更新的事务性。这一点十分重要,因为在并发调度的场景下,很容易呈现调度抵触,咱们通过事务来保障资源数据的一致性。次要环节如下:
如果产生调度抵触,VStation 会抉择次优宿主机。相比 Google Omega 从新调度的做法,对调度抵触的解决代价显著减小。在私有云海量并发创立的场景下,VStation 在调度决策和调度吞吐率进行衡量,抉择次优解来保障调度吞吐率。
海量并发场景下的极速创立
在调度专题优化以外,针对其余问题,VStation 也进行了相应优化,包含:
联合这些技术优化,VStation 生产流程的整体吞吐率失去了大幅晋升。在十万量级的宿主机环境下,采纳数百个 Scheduler 消费者,咱们对 CVM 进行了屡次海量并发创立演习,生产吞吐率从原来的数百台 / 分钟晋升到数万台 / 分钟;而均匀创立工夫升高了 90%,局部私有镜像的创立工夫更是能够缩减到 10 秒以内。胜利应答了 2016、2017 年以来的海量并发创立的挑战,为腾讯云 CVM 业务的爆发式增长提供了松软的技术根底。
调度零碎的演变
在 VStation 专题优化的序幕,团队进行了回顾和总结,更加宽泛的去剖析和比照业界的零碎,咱们发现,VStation 的许多机制都和业界的做法类似,VStation 从一开始就采纳共享状态调度架构;为了解决资源数据量级过大的问题,采纳公有缓存和增量更新的办法,这些都与 Google Borg 的做法不约而同。面对雷同的问题和挑战,不同的零碎,可能无奈战败挑战,被替换掉;也可能采纳雷同或类似的办法解决问题,并最终进化为相似的架构。
6\. 腾讯云散布式调度零碎的技术劣势
业界零碎比照,VStation 具备大规模调度能力,速度快,高可用,反对异构计算调度。
7\. 将来改良策略
工作间调度
目前,VStation 侧重点是一个资源调度零碎,将来会对增强工作间的治理与调度,可能对工作关系和资源对立进行治理,整合资源的负载状况,做出最优的调度决策。
调度零碎的可视化经营
对于资源经营同学来看,资源调度的外部逻辑相当于黑盒。例如这台宿主机为何没有被分配资源,整个调度过程是如何层层筛选的、又是如何优选排序的?咱们打算开发一个为调度零碎服务的实时可视化零碎,使得调度逻辑更加透明化、直观化,让应用的人员能够理解调度零碎的外部运行机制。
公众号举荐:
公众号:VOA 英语每日一听
微信号: voahk01
可长按扫码关注,谢谢