摘要:本文结合华为CCE团队在混合部署方面的研究和实战,介绍了混合部署的背景、概念、混部技术的设计方案和实际落地情况,以及对未来的计划和展望。现代互联网数据中心的规模随着应用服务需求的快速增长而不断扩大,但服务器资源利用率却一直很低,导致企业基础设施成本不断上涨。随着云原生技术的发展,混合部署成为了降低成本的一大手段。本文结合华为CCE团队在混合部署方面的研究和实战,介绍了混合部署的背景、概念、混部技术的设计方案和实际落地情况,以及对未来的计划和展望。
图 1 中国数据中心市场规模2021年7月工业和信息化部印发的《新型数据中心发展三年行动计划(2021-2023年)》(简称“计划”)提出,到2021年底,全国数据中心平均利用率力争提升到55%以上,总算力超过120 EFLOPS,新建大型及以上数据中心PUE降低到1.35以下。到2023年底,平均利用率力争提升到60%以上,总算力超过200 EFLOPS,新建大型及以上数据中心PUE降低到1.3以下。为了帮助达成“计划”的目标,这里简要分析资源利用率低下的原因,并基于HCE(Huawei Cloud EulerOS)制定一套行之有效的解决方案。
图 2 推特数据中心资源利用率基于以上原因,如果能够将业务的波谷时段利用起来,就能减少波谷时间,从时间维度提升效能;同理,将资源预留冗余缩小,就能从空间维度提升效能。因此将不同优先级、不同波动周期的业务进行混合部署,为两个维度提升利用率提供了可能性,即利用低优先级任务占用空闲资源,同时高优先级任务能及时抢占到资源,从而保证关键业务的服务质量。在离线业务在特征上很好的满足了上述条件,本文提到的混合部署特指在离线混合部署。在线业务通常是处理用户请求的服务,包含交易、购物、搜索、网页浏览等对于实时响应要求高、延时敏感的业务。离线业务通常是计算密集型的批处理任务,包含大数据分析、机器学习训练、算法运算、统计报告等优先级较低、相应要求不高的业务。在离线任务的主要特征如下表所示:表 1 在离线业务特征
从表1可以看出,在离线业务在很多特征上具有互补性,将二者进行混合部署也已经成为数据中心提升整体资源利用率的主流方法。
图 3 基于Volcano混合部署架构
图 4 混合调度超卖示意图资源超卖是指将集群资源申请量与使用量的差值进行再次分配,进而提升集群的资源使用率,参考如下方式进行:
图 5 资源超卖示意图其中request-used为资源超卖部分,Volcano调度器会将这部分资源再次分配。由于超卖资源的稳定性不能保证,因此只能用于运行SLA较低的离线作业。用户提交多种类型作业时,Volcano进行统一调度,优先保证在线作业运行(如图4所示)。当在线作业压力较低时,意味着节点上物理资源的使用率较低,此时Volcano会进行资源超卖,将离线作业调度到相应的节点上运行。当在线作业压力变大时,Volcano会驱逐掉当前节点上的离线作业,保证在线作业能够正常运行。针对Pod类型感知,Volcano根据应用模型对资源的诉求和整体应用模型本身运行的要求,进行优化调度。以Tensorflow作业为例,一个Tensorflow作业中包含若干PS Pod和若干Worker Pod,当PS Pod和Worker Pod能够均匀分配时,TF作业的运行效果更优。例如,对于一个包含2个PS Pod和4个Worker Pod的TF作业,默认调度器和Volcano对比如下:
图 6 作业类型感知调度可以看出,在资源充足的情况下,默认调度器会出现PS Pod和Worker Pod分别被调度到不同节点的情况,Volcano能够保证将1个PS Pod和2个Worker Pod调度到一台节点上,从而提升作业整体运行效率。目前K8S提供的默认调度器,仅根据节点资源请求数量调度Pod。该方式并未考虑到节点实际资源使用情况,可能会出现各个节点资源申请率相同,而实际负载差别较大的情况。对于高负载的节点,可能会导致应用响应速度变慢,无法满足SLA。对于低负载的节点,则存在资源浪费的情况。针对该问题,Volcano提出了基于节点物理资源使用率的预测及调度功能,提供以下三方面的能力:1.预测调度:接入集群监控系统,根据节点及Pod历史资源使用率,预测未来节点及Pod资源使用率的变化趋势,根据预测结果进行合理调度。2.负载均衡调度:根据集群各节点当前负载情况,结合未来使用趋势的预测,将pod调度到使用率较低的节点,进而提升整个集群资源使用的均衡性。3.资源抢占调度:节点资源不足时,调度器实时驱逐部分离线作业,保证在线作业的资源使用。
图 7 cgroup控制层级虽然kubernetes支持多种QoS类型的Pod,如Guaranteed、Burstable和BestEffort,但是这些类型并不能和在离线任务直接对应。HCE通过新增cgroup接口来控制pod的优先级,如cpu cgroup下的cpu.qos_level用于控制当前Pod对CPU资源抢占的优先级。当前通过kubelet执行相关配置操作,保证Pod各资源配置的一致性。资源超卖及在离线作业混部必然会导致不同作业之间的相互干扰,因此除了通过cgroup进行资源隔离之外,kubelet同时会实时采集节点上物理资源使用率,根据不同的情况驱逐离线作业,提前释放相应资源,防止对在线作业的SLA产生影响。
图 8 混合部署响应时间
图 9 网络发包时序采样数据如下图所示,启动离线任务对在线任务网络性能影响较小,在线任务可以在100ms时间内完成网络性能从0到最大的抢占。
图 10 网络抢占性能我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
通常,数组被实现为内存块,集合被实现为HashMap,有序集合被实现为跳跃列表。在Ruby中也是如此吗?我正在尝试从性能和内存占用方面评估Ruby中不同容器的使用情况 最佳答案 数组是Ruby核心库的一部分。每个Ruby实现都有自己的数组实现。Ruby语言规范只规定了Ruby数组的行为,并没有规定任何特定的实现策略。它甚至没有指定任何会强制或至少建议特定实现策略的性能约束。然而,大多数Rubyist对数组的性能特征有一些期望,这会迫使不符合它们的实现变得默默无闻,因为实际上没有人会使用它:插入、前置或追加以及删除元素的最坏情况步骤复