大家好,欢迎大家来到Kubukon China 2021的会场我是来自花云云生开源团队的吴蕾接下来,加油我和我的同事王蕾博为大家分享基于我看到的比赛线业务混布技术探索这个话题本次分享将从我看到项目简介混布技术的需求背景整体技术架构和细节用户落地案例四个方面为大家展开详细的介绍我看到项目是CNC F下首个荣耻辟调整项项目也是业界首个基于K8S的高性能辟调基转引擎它补起了K8S针对高性能辟调场景确实的一系列重要机制如同一的辟调作业接口作业生命周期管理高级调度策略和依购设备支持等该项目自2019年6月开源以来迅速收到了业界的侵赖并在2020年4月成功禁止一位CNC F杀项项目接着目前社区已经获得了超过2000个斯达聚集了遍布全球的开发者其中包括众多的行业套机企业如华为 唐旭 百度 IBM 惠普和亚马逊等我看到提供的主要特性包括以下四个方面第一我看到提供了丰富的高级调度策略包括康斯格里零非亚斯格里零等这有时我看到可以满足用户多样化的调度场景需求第二我看到支持多种作业生命周期管理等于我看到领巧的设计用户即可以直接使用同一道我可能叫YPI来支持各类智慧场景也可以使用注入TIBOVITARSPAG ORATED 等配合我看到完成作业管理和调度而无需进行任何的设备工作第三我看到具有强大的多元算力支持能力它支持注入GPUFPGAX86ARMKUNPON等多种益国设备和架构第四我看到针对高性能基层场景在扩展性系统吞吐量网络东西运行室等方面做了很多的性能优化的工作相比于KBIS摸摸调度器我看到在高性能基层场景下性能表现出色根据我们的测试等于GUNSCADERING等高级算法的加持我看到在AI分布式训练场景下能有效的解决思索 盲能等问题性能提高30%而TASC TOPOLOGY和IOVAR等特性的加持使得IO密集性作业调度性能提高31%在大数据场景下我看到能有效的解决资源竞争问题性能可追高提高40%左右截至目前我看到已经形成了丰富建状的生态落地用户 遍布 互联网金融 能源 制造业云服务 提供商 课学教育等多个领域以致的超过50家落地案例中我看到为企业的降本真效做出了结束的贡献社区开发者生态 表现强劲包括华为 强讯 百度IBM 惠普等众多的高度玩家纷纷加入了社区贡献我看到当前最新版本为1.4年例在前期的版本中我看到提供了针对HPC和AI场景的基本能力12种北向基础框架的支持资源预留 资源抢占作为回填等关键能力已经落地2021年社区针对大数据场景做了大量的工作包括即将发布的成绩队列支持它是个依赖调度等2022年 社区将提供混合部署GPU共享 动态调度和充调度等关键能力接下来 请王力博为大家介绍我看到混合部署的技术方案大家好 我是来自华为云的价格师王力博今天我这块主要分享这个混合部技术以及资源抢占技术的探索和实践我们能看到说其实第三方机构的 据第三方机构的调查服务器资源整体的使用率只有10%到20%这其中有很多种不同的原因那其中很多的原因之一是不同的业务对资源的需求量随着实践的波动其实会有一个波峰和波谷如这个图上所示那我们能看到这是一个典型的一个常服务我们能看到其实在它的波谷就昔日晚上的时候它的资源使用率是非常低的另外一个相当来说资源使用率低的原因是说我们很多的用户它是为了达到融在的需求对于它的资源的申请是按照这种业务的峰值去申请右下角这个图大家可以看到它的资源申请量和它真实的使用量之间会达到5B的差距如果说我们能够把波谷波谷时段这种空闲的资源以及Request和Use的之间的这部分资源能够进行一些复用的话那集取整体的资源使用效率就会达到一个更高的水平那我们来看它对于实验的要求并不是很高但是对于吞吐的要求比较高另外的话就是它的SLO的要求相对于在线业物来讲其实是相对来说比较低另外它允许任务进行一定的重视以及失败失败重视等等所以说我们把这种长幅或者一线的这种业务混合在一起可以达到一个资源销风填骨提升资源使用效率的一个效果由于类似的原因各自不同的这种西分的大数据AI、EI、NPC西分的这种技术体系都形成了这种阴松式的架构无法实现这种资源池的规议然后技术战的统一所以说整个运萎的成本比较高那随着K8S的发展和成熟目前的K8S已经能够非常良好的支持这种大数据AI、EI、NPC的这种任务所以说目前以K8S为核心的这种原生的技术设施已经成为混布技术的一个主流的方案我们认为混布技术的眼睛路径是这样的就像自动驾驶技术一样的它会分为多个不同的阶段那对于混布技术来讲那我们能看到说在初始阶段L0的这个阶段它的资源池是独立的技术战是孤立的是割裂的那到L1的这个阶段首先我们进行技术战的统一那虽然资源池是独立的那到L2的这个阶段的话我们就可以把这种同购的业务的这种小的资源池进行一些规议在L3的这个阶段我们就可以很好地说这个对资源池进行一个规议和共享那是多种不同这种离线的业务以及在线的业务可以在一起混合部署销风填骨到L4的这个阶段呢我们能看到说可以实现跨机群共享资源池当用户提交一个任务的时候那这个任务可以被智能地调度到最合适的一个地域然后在这个最合适的地域里面给它选择一个最合适的一个机器那这个最合适呢用户可以定义不同的这种策略比如说成本最有比如说效率最有等等那这个横坐标呢我们是代表的是技术难度纵坐标代表的是收益那我们来看一下这个混布设计混布设计的一个目标那首先呢在实施混布离线在离线混布之后呢我们要优先保证在线业务的服务质量那这是这个基本的一个填体填体在那个第二块的话就是要保证在线保证离线业务的SLA就离线业务它不能避无限制的这种重视和压制那第三块呢就是保证在线业务离线业务服务质量的前期下能够最大限度的提升资源使用效率那第四点呢要明确定义混布基础相关的一些关键性指标比如说利用率提升的幅度业务的干扰率等等这样呢这些指标可以帮助这个用户去去去去分析它的业务里面哪些业务是在当前这些人适合进行混布的那些业务是不适合进行混布的那最后一点呢就是统一的用户体验和简单的运为那我们通过引入混布这个方案之后呢用户的资源使用效率得到提升那我们同时呢我们不希望说引入过多的这种用户体验上面的一些差异导致用户体验用户使用起来非常的复杂或者说是这个运为非常的复杂那我们来看一下混布的一个技术架构那在最上层呢我们能看到说不同种类的这个在线业务及理性业务通过这个作业的提交提交到这个KBS然后呢通过这个我Know的调度这里面我们选择的是这个我Know调度引擎通过我Know的调度为这些工作负载选择一个合适的一个节点那在节点上面通过OS以及Qubit等各方面的增强为我们在线业务和理性业务是实现全方位的一个资源隔离那在这里面的话是主要涉及的两呃两块关键技术第一块的话是这个统一的调度那我Know呢我们目前呢单实力可以支持一秒一千六百以上的这个炮的调度吞吐可以满足这种关键的大数据AI HPC的一个调度吞吐那另外的话第二块的话就是呃多例行业务智能混合调度这里面的话我Know现在里面已经实现了非常丰富的一个调度策略比如说应用脱补感知然后资源的预留作业排队公平调度优先级调度然后资源的抢占和回收那对于这种在线的业务来讲的话我们这个提供在线业务和理性业务基于时间的一个调度策略实现资源的分时附用那这个时间的这个呃时间的这个策略呢我们支持这种用户可以指定这个时间段让这个在线和理性进行这个资源的分时附用也可以是全时段的这种资源的分时附用那关于隔离隔离这块的话隔离是保证这个在线业务不受在线业务服务质量的关键的一个手段这里面的话主要包括了这个比如说CPU和Memory的隔离那主要是以C Group实现基本的隔离同时呢CPU就是实现的是在线业务对理性业务的一个快速的抢占以及负载均衡然后以及对这种理性任务的一个绝对压制另外的话在这个实现这种Ir3的这个Cache的一个隔离那我们知道其实理性任务它其实一般运行起来之后它对于资源使用率资源的使用使用率是非常高的同时它有可能会把这个整个Cache可能给耗尽那当这个在线任务它这个使用率上来的时候它有可能去得不到这Cache的资源导致它的实验增加导致这种最终的Timeout所以这个Cache的隔离也是非常关键的另外的话就是当发生OM的时候然后内存回收的时候要优先回收这种比线任务那网络隔离这块的话主要是基于这种EBPF然后保证高优先级的作业就是在线作业它的一个UQ存储隔离存储隔离的话主要分两种场景一种场景就是对于这种本地盘本地盘的这种IO的隔离另外的话就是这种存算分离然后以数据写到远端但我们知道客户的很多时候到它的场景它的在线业务它的那个规格就是计算的这个磁盘的规格和离线任务它的磁盘的规格差别都是比较大的一般来说离线的任务它的磁盘规格比较大然后在线业务它的这个磁盘的规格都是比较小的那混布了之后很多时候这个磁盘的规格成为一个混布效果的一个瓶颈所以说通过这种把数据写到远端然后通过网络带宽的一个隔离去实现这个数据访问的一个隔离也是一个非常重要的方式之一那在这个方案里面我们有两大特点第一个特点的话就是在线业务和离线业务的统一调度那我们相比于像传统的传统的这个混布方案的话很多时候它是在线的业务使用这种default scheduler然后离线的业务对于吞吐要求比较高他们可能会选择另外一种batch scheduler那同时这两种调度这两种scheduler之间可能还要做一些资源的协调那这个整体的架构是非常的复杂那在这里面我们通过我们的一些实践我们认为目前的Vocano对于离线的这个离线的调度然后吞吐率以及各种性能优化的一些调度策略已经非常的丰富然后同时呢Vocano兼容这个KBS社区的默认调度器的大部分基本上所有的这种调度策略所以说可以使用Vocano进行同一的在离线的一个同一调度那第二块的话就是用户体验那传统的一些混布方案呢很多时候是对于这种离线的任务他们会提供一种扩展的资源让它去实现这个实现这个混布那在我们这个混布方案里面我们不管是这种在线的这个业务和还是离线的业务对于资源的使用使用方式都是和以前是没有任何差别的我们会通过一些内部的机制去减化用户面的一个用户面的一个体验关于资源超慢我们刚才提了那很多时候用户的环境里面它的资源分配率非常高的资源的使用率非常的低也就是说在这个物理机这个这个图里面能看到说这个request和limitrequest和use的之间有一个很大的一个差值那这个差值就是我们要超慢的部分那在调度器的视角来看那对于一个node它的allocateboard的资源就是这个原来的这个本身的这个资源再加上超慢的这份资源我们认为这个超慢的这份资源它其实是一种不太稳定的资源所以说我们会做一些这个标记那首先这个资源超慢的量就是request的减去limit那资源的使用上面有什么差别呢在线的作业它可以使用这种这种stable的资源那对于理线的任务它可以使用这种stable的资源它也可以使用这种unstable的这种资源在U线级上面我们会把这个在线的任务设置为认为是高U线级理线任务U线级相对来说比较低那在资源不足的时候高U线级可以对高U线级的任务可以对低U线级的任务进行一些抢占在节点层面就是cublate这块我们做的一些事情就是首先这个cublate要根据节点的物理资源的历史情况去上报这个超慢资源比如说左边这个它会把这个超慢的资源比如说CPU memory的超慢资源去更新到node对象的adultation里面公用调度器去访问使用那第二块的话就是cublate会调用OS提供的API去为在线任务以及理线任务设置不同的cuse level第三块的话就是当这个节点的使用率攀升到超过用户配置这个预置的时候那cublate要对理线的任务要进行一个驱逐统一调度统一调度的话大家可以看一下这个图里面红色字体的部分那首先对于调度器来讲它会缓存这个节点的所有的资源信息那在这里面我们能看到说就是节点的这个allocatable这个字段里面的cpu memory我们能看到说allocated字段里面的cpu memory是cublate相当于是上传的这个超慢的资源另外的话会有一个over subscription的一个label标记说我这个节点是否要进行超慢那通过这个通过这个简单的扩展一个超慢的一个插件里面实现四个四个这个简单的横数我们可以去为在线任务以及理线的任务去进行一些预选和优选第三块的话就是实施的一个驱逐当资源不足的时候我们刚才提到了在线任务可以对理线任务进行进行一个抢占另外隔离调度隔离调度就是说当这个节点上面它的这个使用率去上升到用户配置的一个一个上线的预支的时候呢这个时候调度器要停止再为这个node去去分配一些pult的当这个使用率下降到用户配置的这个资源使用下线的时候那调度器可以再次开启再可以再往这个pult上面去调度一些新的pult那资源隔离是资源隔离是宏布里面非常重要的一个一部分它主要是为了保证我们在线的任务的服务质量能够不受尽可能的尽可能的这个受影响尽可能小的受影响那主要从四个维度吧CPU, memory,网络和IO我们来这个一一来看一下那CPU这块的话主要是几个特点首先是在线任务对于理线任务的一个快速抢站以及这个绝对压制另外的话就是一个负载均衡上面是一个例子我们来看一下这里面有两个可以认为是两个盒然后CPU1和CPU2那在初始的状态我们会CPU2上面有一个0号的一个在线的一个任务然后CPU1上面有一个1号的一个零线的一个任务当在T这个时刻T这个时刻用户提交上来一个在线任务的时候那这个在线任务首先我们看到它分配到了CPU1上面那这里面体现的是首先体现的是这个在线任务的负载均衡0号和2号分别放在两个CPU上面那同时也看到说CPU1上面的离线任务比1号离线任务比进行了压制那在T2这个时刻用户提交上来一个3号的一个离线的一个任务那这个时候首先我们能看到的是3号的离线任务离线任务进行了这5号和3号也被进行了一个负载均衡分配到两时刻的时候当这个0号的在线任务释放的时候2号和3号我们首先看到离线的任务它得到了时间限开始运行那同时呢我们看到说原来运行在CPU1上面的这个1号的这个离线任务还被迁移到这个CPU2上面那这是这是说为了尽可能少的去干扰这个CPU1上面的这个在线任务这里面要注意的是说我们整个这个以这个是以这个物理和微微都去对离线任务进行压制这样的话可以避免这个超线程的一个干扰这是一些这是一些对于这些干扰以及实验的一些测试那左上角这个呢我们相当于是我们将一个单线程的一个离线任务保留在一个盒上面同时设置一些CPU设置一个CGROUP那在1000秒这个运行时间里面我们去观察这个在线离线任务和离线任务他们获得的这个时间片那这个Scheduler Other是在线任务然后Scheduler Addle增强代表的是这个离线任务我们看到说整个离线任务它其实已经被压制的说它其实获得的时间片非常的少所以可以忽略不计在右边这个图里面我们做的一个测试是是说首先我们把Redis这个服务我们当成一个长服务然后我们把它绑在单盒上面然后向Redis这个服务去去做压测发送一些大量的那在第二组里面我们同样是运行Redis这个服务往单盒测试同时我们会添加四个后台的线程也就是代表的是这个离线的任务那我们同样是去发大量的这个这个Request请求然后去观察整个变化的一个趋势我们能看到说这个长服单独部署和长服和离线任务混合部署他们的整个这个实验是基本相当的那自然隔离的第二块就是内存内存的话只要分为两部分第一部分的话是当这个系统发生OM的时候我们要优先去杀掉离线任务的这个MemoryCG里面的进程保证在线业务的一个运行那另外的话就是内存回收的隔离就是说当这个MemoryCG历度的这个后台异部回收当达到这个水位线之后呢要进行这个异部的回收内存而且要进行这个快速的一个回收网络流量的隔离那我们看左下角这个图我们能看到说其实这个这是代表节点的可用带宽左边这一部分是这个离线业务受限的一个带宽那右边是在线业务预留的一个带宽那在中间的这部分就是这个动态缓冲的带宽这部分带宽是可以可以复用的就是在线业务和礼线业务都可以进行都可以进行使用但是允许这个借用但是呢当这个在线业务它这个带宽需求上来的时候它可以对于这个礼线的业务使用带宽进行一个优先级的一个抢占那这里面的话主要依赖的就是实现的原理就是基于EBPF的一个首先对于这种流量进行做一些标记统计然后呢通过这个控制它发送发送的一个速率去实现这个带宽的一个动态的动态的隔离最后呢我们来看一个拥护的一个案例那在这个案例里面呢拥护它其实是两种不同的业务它的大数业务运行在核杜布上面然后它的微服运行在Coronadis上面然后他们会有中间会有一个一个共享的一个资源池那它的主要的一个问题就是它的CPU使用率不足20%然后meme使用率也不足25%那通过这个我们进行这个分时附用那进行超卖之后呢它的这个内存的平均使用率从40%提升到60%以上那这是在繁忙的时段从右下角这个图我们能看到说在这个繁忙的时段它的它的内存的这个使用率有达到了一个比较明显的一个改善我们来看一下混布未来的一个发展那主要三个特点这三块吧首先第一块的话就是在未来这个混布的一个集群的一个规模会逐步的扩大那我们当我们这个轻规模越来越大的时候可以被挖掘的一个潜力就会越来越大可能我们更多的资源可以去被拿来去做一些去拿来做一些资源的附用那第二块的话是EGOEGO的话我们目前的这个混布主要是以这个X6为主那我们知道X6、ARM、GPU等等他们其实在不同的这个业务场景里面其实都各自有自己的一个优势那在未来我们通过这种通过这种这个多样性的算力以及加上这种智能混合的一个调度可以让这个应用区域运行在最适合它的一个算力上面另外的话就是这个不同的这个业务例行那在目前我们是把只是把这个业务例行简单的话范围在线和离线但是事实上在在线业务里面它其实也按照SLA的这个这个要求的不同其实也会分好多档离线业务也会分不同的档那在未来我们会把这个会进行惊喜化可能分更多的档更多的这个档位这样的话我们可以去做更多的一个资源的一个和这个应用的一个匹配第三块的话就是优化那我们知道现在的这个资源的资源的一个隔离以及强占回收等机制都是依赖于这个实时收集的一些指标那在一些场景下面比如说我们这个未来集群规模越来越大的时候有可能这个系统的这个监控有可能成为一个很有可能成为一个很大的一个偏紧那另外的话就是当这个在线业务它的洪峰来临的时候这个事实你通过这个事实的监控再去做一些强占和资源回收的时候它的那个它的那个对于这种在线业务的这个服务的保证其实是会有很大的一个誓言那所以说在这里面要去优化这个业务的一个资源画像以及应用的画像去做一些预测把这个资源的一个预测和监控两个手段结合起来去让这个恐怖的这个效果得到更好的一个保证那第三块那就是这个优化的资源调度遍免资源碎片那我们知道去用离线的这种任务去去塞缝的时候那它其实又要把这个策略要做得很惊喜化这样的话我在塞缝的时候可以做到这个资源使用的一个最大画嗯下面的话这也展示的是这个我看到相关的一些链接比如说是github地址然后slack channel以及我们其实每周都有都有这个周会大家那个感兴趣的可以去参加社区的周会最后的话是有一个我看到有一个群然后在这群里面我们会可以有大家可以去提一些技术问题随时会有一些专家的答疑以上就是我今天分享的所有的内容好的那个谢谢大家