2135亿!11月12日0时,2018天猫“双11”全球狂欢节成交额定格在大数据屏上,较去年创纪录增长近27%,物流订单突破10亿!天猫双11再次成为阿里巴巴创造和打破记录的商业奇迹。此时此刻,比双11的数字更值得记录的,是阿里巴巴在双11背后取得了哪些技术突破?混合技术仍然是业界研究较少的领域。当成交量达到一定规模时,就会显示出其可观的技术红利。今天,阿里巴巴系统软件部技术专家姜凌将从阿里巴巴混合部署的介绍、混合部署方案和架构、混合部署的核心技术等方面,带大家全面了解混合技术。我希望能启发你。阿里巴巴混合部门探索介绍混合部门技术的出发点源于对如何平衡不断增长的业务和不断上升的资源成本的考虑。我们希望用最小的资源成本来支持更大的业务需求。能否复用已有的存量资源来满足新的业务需求,是混合技术发展的思路来源。为什么要做混科?上图是自2009年双十一购物狂欢节开始以来,阿里巴巴历年的交易量曲线。对于业务同学来说,这张曲线增长图比较漂亮,但是对于技术人员和运维人员来说,这张图的背后却是一个重大的挑战和资源压力。对于从事电商平台业务的业内同行来说,大家应该都知道,我们在做促销活动的时候,技术压力往往来自于销售的第一秒,也就是脉搏式的流量峰值。双十一0点阿里巴巴线上业务的流量峰值(通常用秒创建交易量来描述)基本符合这张图的曲线走势。从2012年开始,0点压力峰值基本是上年的两倍。由此可见,线上业务的快速发展,主要离不开我们的促销活动。除了线上业务,阿里巴巴还有大规模的线下计算业务。随着AI技术的兴起,计算业务也随之兴起。截至目前,我司大数据存储能力已达到KPB级,日均任务量百万级。业务持续增长,在基础设施层预留了大量资源以满足线上线下业务的需求。由于线上业务和线下业务在资源使用上有很多不一致的特点,所以最初设计时需要两个独立的数据中心来支撑。目前,两个数据中心均已达到万台以上服务器规模。然而我们发现,虽然数据中心的资源体量巨大,但部分资源的利用率却不容乐观,尤其是在线业务数据中心,日均资源利用率只有10%左右。基于以上背景,考虑到不同业务在资源使用和需求上的差异:一方面,不同业务在不同时间段(时分复用资源)具有峰值特性。另一方面,对被响应资源的容忍度不同(资源按优先级竞争抢占),促使我们探索不同服务混合部署的技术方向。什么是主机托管?简而言之,共址技术就是将不同类型的服务混合部署,利用一种资源同时提供两种不同服务的资源等价物的技术。混合技术首先是资源整合,将原本物理上分离的服务部署在统一的物理资源上。其次,进行资源共享。同一个资源同时支持业务A和业务B,从业务A和业务B的角度来看,可以同时看到每一个资源。最后,存在合理的资源竞争。既然原本的一个资源一辈子变成两个,必然存在资源竞争。需要提供合理的竞争手段,使不同资源需求的业务满足各自的服务需求。混合部门最大的价值在于通过资源共享实现资源的充分再利用,实现无中生有的创造。混合技术的核心目标是在发生资源竞争时优先保证高水平的服务。因此,我们希望通过调度控制和内核隔离的方式,充分共享资源,隔离竞争。线上线下混合部门在线业务,混合部门技术中描述的主要场景是交易业务、支付业务、浏览请求。在线业务的特点是实时性,对实时性要求非常高,不能降级。如果用户在购买宝贝的过程中等待时间过长(比如在二级),用户很可能会放弃购买;如果用户需要再尝试,估计很难留住用户。对于线上业务,尤其是像我们电商这样的业务,业务量的变化趋势是非常明显的。随着用户的作息时间,白天高,晚上低,白天买买买。电商平台还有一个比较大的特点就是每天的流量相对于大促来说是非常低的。大促当天的二级造量,可能是平时峰值量的十倍,甚至一百倍。它具有强烈的时间场景。线下服务,如:计算服务、算法运算、统计报表、数据处理等服务,与线上服务相比,可以称为延迟不敏感。用户提交的工作和业务的处理时间是秒级、分钟级,甚至是小时、天级,因此可以运行一段时间才完成。同时,他们可以接受重试。从技术上讲,我们应该更关心谁帮助他们重试。用户重试是不可接受的,但如果系统帮助重试,用户无所谓。此外,线下业务的时间场景性不如线上业务强。可以随时运行,甚至表现出反在线业务的时间特性。有一定概率白天低,清晨高。原因还与用户行为有关,例如:用户提交统计模型,等待凌晨0:00后开始运行,第二天早上上班前收集报告。从不同服务的运行时特征分析可以发现,线上和线下服务都存在业务压力错峰和资源错峰的情况。另一方面,在线服务显然具有更高的优先级和资源抢占能力,而离线服务在资源不足时表现出一定的容忍度。这些因素成为线上线下业务混合技术的可行要素。阿里巴巴混合部门探索的过程在展开技术介绍之前,我们先简单介绍一下阿里巴巴混合部门技术探索的历史:2014年提出混合部门技术。2015年做线下测试和样机仿真。2016年生产环境装了200台左右的机器,作为第一批吃螃蟹的人,公司里的用户已经跑了一年了;适用于内部用户,上线后生效。2017年生产环境小范围混合,达到千台物理机级别,直接面向外部用户,支持2017年双十一大促。2018年希望是大的一年-规模部署。我们希望混合部门在规模效应下能够带来客观的技术红利,打造一个体量达10000台的混合部门集群。阿里巴巴大混部成果阿里巴巴大混部成果如下:混部规模达到千台,并经过双十一交易核心场景的验证;在线集群(offline)引入离线计算任务:每日CPU使用率从10%提升到40%。将线上业务(线下)部署在离线集群上,支持双十一期间每秒创建W笔交易的能力。混合环境下对在线业务服务的干扰影响小于5%。目前混合部门初期部署有两种场景:在线集群提供的资源用于混合部门,在线资源用于为线下业务运营提供额外的线下算力。线下集群提供的资源作为混合部门,利用线下资源打造线上业务交易能力(主要应对大促等线上流量高峰)。我们内部有一个简单的约定,线上和线下,谁提供机器谁排在第一位,所以就有了离线混和离线混的名字。2017年双11,我司官方发布的秒级创建量为37.5万笔/秒,线下混合集群可实现1万笔/秒的交易量。利用线下资源支撑线上高峰,节省了一定的时间。极大促进资源消费。同时,离线混合集群上线后,在线原生集群日均资源利用率从10%提升至40%,为离线提供额外的日常算力。如下图:这是真实监控系统的数据:右图代表非混合场景,时间点大概是7:00到11:00,在线中心的使用率是10%。左图代表混合办公场景的数据。平均利用率在40%左右,抖动比较大,因为线下业务本身波动比较大。节省了这么多资源,业务(尤其是线上业务)的服务质量变差了吗?下面是负责事务处理的线上核心服务的RT曲线图,其中绿色曲线代表混合集群中的RT性能,黄色曲线为非混合集群中的RT性能。可以看出,两条曲线基本重合,混合部署场景下平均RT比普通集群差不到5%,满足服务质量要求:混合部署方案和架构之间存在一定差异混合部署技术与公司的业务系统和运维系统。因此,本文可能会提到不同的技术背景。限于篇幅,仅作简要引述,不作详细介绍。下面简单介绍一下混合部署方案,包括:整体架构、混合部署场景业务部署策略、混合部署集群资源管理与分配机制、混合部署场景业务运行策略等。整体架构混合部门在混合部门技术的抽象上,分为合并资源和整合资源池三个层次。它既可以用于A业务,也可以用于B业务。我们需要实现良好的资源调度和分配。在做混合技术之前,阿里巴巴集团有好几个资源调度平台,其中在线资源调度系统叫Sigma,离线资源调度系统叫伏羲。混合技术的挑战是将资源分配给不同的业务资源,统一多个资源调度系统,进行决策仲裁。做好运行时资源竞争时的隔离和优先级抢占。上图所示的架构是分层的:最底层是基础设施层,统一整个集团的数据中心。无论上层如何使用,机器、网络等硬件设施和配套设施都是一样的。上层是资源层。如果要混合部门,就必须打通资源池,把资源放在一起管控。下一层是调度层,分为server和client。Sigma在线,Fuxi在线下。我们将各个业务的资源调度平台称为一级调度器。在混合部门架构中,引入了一个“0层”调度器,它主要负责协调两个layer-1调度器的资源控制和资源分配决策,它也有自己的Agent。最上层是面向业务的资源调度和控制层。有些资源是通过一级调度器直接下发给业务的,有些还涉及到二层,比如Hippo等。在混合部门架构中,还有一个专门的混合部门管控层,主要负责混合部门模式下业务运行机制的编排和执行,以及物理资源的配置控制、业务监控、决策判断。以上就是资源分配的架构,这样就可以把机器和资源分配给不同的业务。但是分配之后,如何保证运行时的业务优先级和SLA呢?线上业务和线下业务同时运行在一台物理机上。如果业务之间发生资源争用怎么办?我们使用内核隔离来确保运行时资源保护。我们开发了很多内核特性来支持不同类型资源的隔离、切换和降级。内核相关机制将在第3章介绍。混合场景在线业务部署策略本节将介绍如何将混合技术应用于在线业务场景,为电商平台提供交易创建能力。首先,由于其新颖性,技术改造点较多,为规避风险,我们希望在有限的可控范围内进行小规模试验。因此,我们在电商(在线)单元化部署架构的基础上,实现了业务部署策略,从混合部门集群中构建了一个独立的交易单元。闭环业务到单元和独立的资源分配控制。在电子商务在线系统中,我们将与买家购买行为相关的整个服务链条封闭成一个服务集,并将这个服务集定义为一个交易单元。交易单元可以实现:所有与买家交易行为相关的请求和指令都在本单元内闭环完成,即远程多主单元部署架构。实施混合技术的另一个限制来自硬件资源限制。由于线下和线上业务对硬件资源的要求不同,各自的存量资源不一定适合对方的业务,所以我们在实施过程中遇到了存量资源适配的问题,最强烈的体现在磁盘上。在离线业务的原始资源中,有大量低成本的HDD磁盘资源,离线运行时HDD磁盘几乎会被用完。这对于在线业务来说基本上是无法使用的。为了屏蔽磁盘IOPS性能问题,我们引入了计算存储分离技术。计算和存储分离技术是我们组内在进化的另一项技术。它提供中央计算和存储服务。计算节点通过网络连接到存储中心,可以屏蔽计算节点对本地磁盘的依赖。存储集群可以提供不同的存储能力。在线业务需要高存储性能但低吞吐量。因此,我们通过计算存储分离技术,获得了IOPS有保障的远程存储服务。混合集群集群的资源分配是关于完整的整体架构。下面我们从资源的角度来看混合集群的资源分配,如何无中生有。首先是单机角度的资源,主要是CPU、MEM、Disk、Net。下面将介绍如何获取额外的资源。我们先来看看CPU。纯线上集群日资源利用率在10%左右。可以说线上业务在日常情况下是无法充分利用CPU的。但在大促等促销场景下,线上资源会瞬间达到10%。CPU使用率峰值。线下任务更像是吸水的海绵,业务量巨大。至于CPU算力,你有多少就用多少。上述业务对资源使用的背景,导致了混部门技术中CPU生命周期被拆分成两部分。在内核运行机制中,CPU资源通过时间片轮询的方式分配给不同的进程。我们同时分配1个CPU核心给在线业务和离线任务,并保证在线有高优先级。在线空闲时,CPU可以离线使用,在线需要使用时,离线任务被抢占挂起。上面提到了两种资源调度器(在线调度器Sigma和离线调度器Fuxi)。在线服务以Pouch容器作为资源单元,Pouch容器绑定一定的CPU核心供特定的在线服务使用。Sigma会认为整台物理机都在线。同时,offlineFuxischeduler认为这台机器是离线的,它会将整台机器的CPU资源作为可分配资源分配给离线任务。这样就达到了DoubleCPU资源的效果。将同一个CPU分配给两个业务操作必然存在竞争的风险,这依赖于核心内核技术对CPU的隔离和调度,下面会讲到。CPU可以被多个进程共享,但是MEM和Disk资源就比较吃力了。作为消耗性资源,分配给一方,不能被其他进程使用,否则会被新进程覆盖。如何复用内存层级成为另一个研究热点。如图(右上)所示,介绍了混合技术中内存超卖的机制。图上方的括号表示在线内存分配(蓝色)和离线内存分配(红色),而图下方的括号表示在线内存使用(蓝色)和离线内存使用(红色).从图中可以看出,离线使用内存时,使用分配给在线内存的内存更多。通过这种机制,使用超卖的内存。为什么允许在线内存超卖。因为我们公司的线上业务主要是基于Java语言,分配给容器的内存一方面用于Java堆内存开销,剩余的内存作为Cache使用。这导致在线容器中有一定数量的空闲内存。我们精细地监控内存使用情况,并结合一定的保护机制,将在线容器分配的空闲内存分配给离线使用。但是,由于这部分内存是在线的,离线时无法得到强有力的保证,所以离线时会向这些资源调度相对低级的可降级服务。磁盘方面,磁盘容量对于双方的业务来说是比较充足的,所以没有过多的约束。在磁盘IO方面,实施了一系列的带宽限速,将离线任务使用的最大IO限制在一定数量以下,避免完全挤占在线和系统IO。另外,在单机的Net层面,因为目前容量比较充裕,目前还不是瓶颈点,就不过多介绍了。资源让渡机制大促:站点上快下快上面讲了单机层面如何实现资源的共享和隔离,接下来我们再看看整个资源集群层面,如果通过整体运行和维护管控,实现资源的迁移和利用最大化。在混合技术中,我们追求极致的资源利用,让不该用的业务场景不浪费每一个资源。所以我们提出了快速上站点和下站点的概念,它是面向线上业务的。如前所述,每个混合集群都是一个在线交易单元,独立支持小部分用户的交易行为。因此,我们也称它为“站点”。我们对在线站点的整体容量进行扩容,这是一个快速上升和下降的过程。如下图所示:线上业务的业务压力在日常运营和专项促销活动中表现出巨大的偏差。双11期间,可能是日常流量的百倍以上。这一特点为快上快下方案的可行性奠定了基础。如上图,将两个大方块图与整个在线站点的容量进行对比,每个小方块代表一个在线服务的容器数,每一行代表一个在线服务的容量储备(容器总数)在线服务。通过对整个站点的容量规划,实现容量模型在日常状态和大促状态之间的切换,实现资源的细粒度使用。我们电商业务通常会以一个业务目标,比如创建的秒级交易数作为站点容量评估的基准。一般来说,在日常状态下,单个站点预留Kpens/s的容量就足够了,而当大促临近时,我们会将站点切换到大促状态,通常是容量级别为W笔/秒。通过上述模式,从整个站点的维度上,整体减少线上不必要的容量,充分释放资源,让线下业务获得更多的物理资源。这就是快速上下机制。现场流程快速(从低产能到高产能),执行效率在一小时以内。站点停机(从高容量到低容量)的过程可以在半小时内执行。日常情况下,混合站点以最小容量模型支撑日常在线流量,在大促或全链路压测前夕,混合站点会快速拉升至较高容量状态,并持续运行几个小时后,快速下载站点。通过这种机制,我们保证大部分时间线上只占用少数资源,线下90%以上的资源被充分利用。下图是快上快下各阶段的资源分配详情:上图中的资源分布,左、中、右三个矩形分别代表:混合集群在daily中的资源分配状态、试压状态、大促状态情况。其中,红色表示离线,绿色表示在线。每个矩形框分为上、中、下三层。上层代表业务运营和规模;中间层代表资源(主机)分布,蓝色小方块代表混合资源;下层代表集群级别的资源。分配比例和运营模式。在正常状态下(左边的矩形框),大部分资源是离线占用的,一部分是通过分配获得的,还有一小部分是通过运行时竞争获得的(如果在线不使用,就会离线使用)。并且等到压测状态(中)和大促状态(右),线下资源会进行备份,基本达到线下和线上50%的分配比例。期间(大促但压力不大的时间),线下依然可以争夺线上闲置资源。双十一当天,为了保证线上业务的稳定性,我们会对线下业务进行一定程度的降级。每日资源让步机制:时分复用上面介绍的快上快下机制就是在线站点容量在大促状态和正常状态之间的切换过程。此外,线上业务还呈现出一种非常有规律的流量高峰和低谷。为了进一步提高资源利用率,我们还提出了一种日常情况下的资源让步机制:分时复用。上图为线上业务日流量周期曲线。清晨会更低,白天会更高。对于每个在线服务,我们都实现了每日细粒度的容量扩展,以最大限度地减少在线业务资源。使用,从而放弃资源供离线使用。混合核心技术混合核心技术主要分为两个方面:内核隔离技术资源调度技术涉及专业领域。考虑到当前文章的篇幅,下面只列出一系列技术要点,不再赘述。内核隔离技术介绍我们在内核的每个资源类型级别都开发了强大的隔离特性,包括:CPU维度、IO维度、内存维度和网络维度。整体上,基于CGroup划分了线上线下业务组,区分两类业务的内核优先级。在CPU维度,我们实现了超线程对、调度器、三级缓存等隔离特性。在内存维度,实现了内存带宽隔离和OOMkill优先级。磁盘维度实现IO带宽限速。网络维度,单机级流量控制,全网链层分层QoS保障。关于混合内核隔离技术的详细介绍可以自行搜索。下面只介绍内存超卖机制。内存动态超售机制:如上图实线括号所示,红色和蓝色分别代表离线和在线CGroups的内存分配,总和值代表整机可以分配的内存(系统开销内存)已被删除)。下面还有一个紫色的实线括号,代表离线超卖内存配额。它的大小值在运行时会发生变化,通过监控运行时在线发现的未使用空闲内存的大小来确定。图中上方的虚线括号代表离线和在线实际使用的内存。一般来说,线上业务不会用完内存,剩下的内存会在线下作为它的超卖额度使用。为了防止突发的在线内存需求,机制中预留了一定的内存作为缓冲。通过以上机制,实现了离线超卖记忆。资源调度技术混合技术的第二个核心技术是资源调度技术。混合场景下的资源调度可以分为原生一层资源调度(在线资源调度技术Sigma和离线资源调度技术Fuxi)和混合资源调度技术。第0层调度。在线资源调度:Sigma在线资源调度器主要基于应用资源画像进行合理的资源调度和分配,包括一系列打包问题、亲和/互斥规则、全局最优解等,从全局维度对应用容量进行调度自动缩放,分时复用,快速升降战斗维度。上图是线上一级调度Sigma的架构图,兼容KubernetesAPI,基于阿里Pouch容器技术进行调度,经过阿里巴巴大流量和双11大促多年的验证。离线资源调度:Fuxi离线集群调度器主要实现分层任务调度、动态内存超卖、无损/有损离线降级方案等。这是Fuxi离线资源调度运行机制图,基于Job调度,提供一种数据驱动的多级流水线并行计算框架,用于海量数据处理和大规模计算的复杂应用。在表达能力上兼容MapReduce、Map-Reduce-Merge、Cascading、FlumeJava等多种编程模式。具有高扩展性,支持10万级以上并行任务调度,可根据数据分布优化网络开销。统一资源调度:在0层混合部署场景下,离线和在线业务通过各自的1层资源调度器进行资源调度和分配,但在1层调度器之下,还有一个统一的资源调度层——0层,其功能对双方资源进行协调和仲裁,通过监控和决策合理分配资源。下面是混合部门资源调度的总体结构图:展望未来混合部门技术的发展,将向三个方向演进,即:规模化、多元化和精细化。规模:2018年实现万人级混合部门,将是一个数量级的飞跃。我们希望通过混合部门作为集团内部资源投放的基础能力,在更大范围内节约资源成本。多元化:未来我们希望支持更多类型的业务,更多类型的硬件资源,更复杂的环境。我们甚至希望把云上的资源打通,阿里云和公司内部的资源可以互通。精细化:未来希望业务的资源画像可以描述得更详细,调度层面的时效性更实时,调度精度更细化,内核隔离更细致精细化,监控运维管控更加实时准确。
