写点什么

数据库顶会 VLDB 2024 论文解读|ResLake: 字节跳动多机房资源统一管理系统解析

  • 2024-09-04
    北京
  • 本文字数:4699 字

    阅读完需:约 15 分钟

大小:2.36M时长:13:44
数据库顶会 VLDB 2024 论文解读|ResLake: 字节跳动多机房资源统一管理系统解析

在字节跳动,每天有数百万的大数据作业在其全球的数十个数据中心运行。由于作业计算和存储资源的不匹配,存在将跨机房带宽用尽的风险,这会影响其他业务的运作,还会造成不同机房的资源负载不均衡。而且跨机房带宽存在成本高、延迟高、稳定性差等问题,会大幅增加作业的运行时长。为兼顾作业完成时间(Job Completion Time, JCT),并均衡不同机房之间资源的负载,字节跳动基础架构计算团队、存储团队、应用研究中心,和系统部网络团队协作,共同研发了多机房计算、存储、网络一体化资源管理系统 ResLake。ResLake 具备资源的全局视角,通过作业调度、数据调度、网络管控等手段,能够显著优化计算和存储的布局,有效降低业务运营成本。ResLake 上线后,作业平均 JCT(最小化用户作业完成时间) 时间降低了 20%,机房间资源利用率均衡性提升了 53%,跨机房流量降低了 50%,存储成本降低了 46%。

  • 论文链接:https://www.vldb.org/pvldb/vol17/p3934-kashaf.pdf


背景介绍


大数据作业与数据表之间存在错综复杂的关系(如下图所示),图(a)表明将近 50% 的作业存在跨机房读数据,34% 的从超过 1 个远程机房读取。图(b)表明将近 50% 的作业从多个表中读取数据,分布存在长尾效应。考虑到数据高可用和单机房容量限制,这些数据通常以多副本形式存储在多个物理机房中,机房之间通过广域网(WAN)连接。


对于这种多机房架构,现有的解决方案主要集中在最小化跨机房带宽,以此节约跨机房带宽的成本。究其原因是在公有云环境中 WAN 成本高且带宽有限,极易成为瓶颈。这种资源管理方式存在一定的局限性,它忽略了不同资源之间的联动性,造成机房之间资源负载不均。由下图可见,不同机房之间资源利用率相差达到将近 25%。

现有的研究表明,计算、存储和网络几乎有相同的概率成为数据密集型作业的性能瓶颈。因此,我们将计算、存储、网络视为三种不同类型的资源,资源管理系统需要统一考虑不同机房多种资源的排布,并进行全局优化。基于以上原因,我们将多机房资源管理系统的设计目标归结为以下两点:

  • 在作业负载不变和满足 SLO 的前提下,最小化用户作业完成时间(JCT);

  • 在资源总量不变的前提下,最优化资源利用率。

架构设计


多机房架构下,资源管理系统需要具备全局视角,感知不同机房计算、存储和网络资源的异质性,并为作业和数据的全局排布做出最优决策。为此我们设计了中心化的资源管理系统 ResLake,采用分层架构,具体架构如下图:

  • 控制层:负责与计算层、存储层、网络层进行交互,控制层综合计算、存储、网络资源状态信息,实时对作业布局进行最优调度决策,并指导和反馈其它层进行作业迁移、数据迁移/复制、网络 Quota 调整等,提升跨机房资源的整体利用率。

  • 计算层:负责全域计算资源管理 (GRM) 。GRM 主要负责管理不同机房、不同集群的计算资源,并将最新的计算资源状态汇报给控制层,以便做出最优的作业调度决策。

  • 存储层:负责全域存储资源管理。根据控制层的决策,存储层可以对数据进行离线调度,例如变更数据副本分布、增加带 TTL 周期的缓存副本、对多副本数据进行压缩,以优化数据排布和节省存储成本。同时,存储层将存储元数据上报给控制层,用于作业数据亲和性调度决策。

  • 网络层:负责全域网络监控、网络 Quota 管控、QoS 保障等,并执行控制层下发的网络 Quota 分配和调整指令。同时,网络层将最新的网络状态、剩余带宽 Quota 等信息上报给控制层,以优化作业调度。


系统输入:当用户向 ResLake 提交作业时,需要指定作业的计算资源 Quota,如 CPU/Memory 等。网络带宽资源作为系统级资源池由 ResLake 统一分配。考虑到大数据作业通常需要读取大量离线数据,而单机房容量有限,跨机房读几乎不可避免,这类作业不仅消耗大量的跨机房带宽,并且跨机房读取延时高,导致作业 JCT 时间进一步增长。为了解决这个问题,ResLake 要求作业提交时指定读取的路径,路径可以是数据库表分区、文件路径或消息队列的偏移和长度。ResLake 通过数据特征分析,从而无需用户显式指定作业输入数据路径。


系统输出:经过 ResLake 决策的作业机房和集群。


ResLake 按照调度决策的实时性,分为在线调度和离线优化两种。实时调度侧重于进行轻量化的作业调度,而离线调度侧重于对数据分布进行优化。具体差别如下:

  • 在线调度

    作业动态调度:ResLake 提供给用户的是一组虚拟队列,虚拟队列可以跟多个物理资源池关联。ResLake 根据作业读取的路径、数据的副本分布、作业资源需求、作业运行时长、物理资源负载、机房剩余带宽等指标,动态决策作业运行的最优物理资源池;

    数据懒加载:ResLake 允许为每个机房设置缓存。对于临时查询作业,ResLake 在作业跨机房读取数据时,缓存一份临时副本到本地缓存。从而,将后续的跨机房读取转化成本地读;

    数据访问特征分析:对于周期性作业,ResLake 通过对作业运行的历史数据进行分析,对作业读取路径等进行预测。对于临时 SQL 查询,ResLake 能提前从 SQL 中解析出输入路径,并根据数据量预估作业运行时长。

    网络 Quota 动态分配:ResLake 为每个作业分配初始网络 Quota,并对 Quota 进行动态调整,回收作业未使用的 Quota,并分配给其它 Quota 不足的作业。

  • 离线优化

    副本缓存:ResLake 通过分析作业历史访问特征,挖掘多机房访问的热点数据,在周期性作业启动前,将数据缓存到对应机房。为避免不必要的存储成本,我们只会同步读写比极高的数据,并且设置数据的过期时间(TTL)。

    副本策略优化:ResLake 分析周期性作业的历史数据访问特征,生成数据访问模式,对计算和存储机房错配的副本进行调整。

    温存推荐:ResLake 通过分析数据的访问行为,推荐业务将不常访问的数据放入温存,从而降低业务的存储成本。

调度模型



我们将作业调度抽象为 5 个 Meta 任务:

  • 等待调度阶段:任务进入调度队列并等待调度的时间,通常是 ms 级,不实际消耗资源。

  • 全局调度阶段:全局调度阶段,根据作业依赖的数据副本分布、预估计算时长、物理资源池负载、物理资源池计算性能、跨机房带宽等指标,为作业找到跨机房读取数据时间最短、且物理资源等待时间最短的机房和集群,调度决策充分考虑了最优化作业 JCT 和资源池负载均衡。调度决策本身耗时也是 ms 级。

  • 数据准备阶段:ResLake 为作业寻找满足数据亲和性(计算与大部分数据在同一机房)的机房或者计算资源充足且跨机房带宽充足的机房,ResLake 保证此阶段大部分数据同步到决策机房。主要使用网络带宽,在满足计算数据亲和性时,该阶段耗时可以忽略。

  • 集群调度:ResLake 将作业分发到具体集群后,由 YARN/Godel 进行集群内资源调度。该阶段耗时包括等待资源时间和作业运行时间,主要分配计算资源。

  • 数据输出:将计算结果输出到存储,供下游计算使用。


根据 ResLake 的设计目标,我们将调度抽象为 2 个优化目标:

  • 最小化 JCT 时间



其中, 为作业在机房  的数据量, 为集群  内资源  的处理速度,仅当作业分配到集群  时 。在调度决策时,ResLake 针对各个阶段预估近似处理时间(APT),预估方式为数据量/资源处理速度。因此,JCT 最小化目标,主要根据数据准备阶段和集群调度阶段的 APT 进行优化。


  • 资源负载均衡



其中, 为集群内资源利用。在进行调度决策时,还需要尽可能考虑全局资源的均衡性,比如当作业有多个可选择物理资源池时,选择集群负载更低的资源池,不但能兼顾集群间负载均衡,避免单个资源成为瓶颈,而且低负载集群往往处理速度更快。 

结合以上两个优化目标,ResLake 针对作业调度问题归结为求解以下优化问题,其中, 和  为权重,取值在 0~1 之间,可以根据业务差异调整。



系统实现

控制层和计算层



控制层维护计算、存储和网络资源的全局状态视图,并作出作业调度和全局资源平衡的最优决策。如上图所示,控制层通过 SDK 接受提交的大数据作业。首先,作业将通过计算层实现的虚拟队列权限管理模块(VAM)进行权限校验。接下来,虚拟队列 Quota 管理模块(VQM)根据作业的资源量分配作业请求的资源量。ResLake 实现了统一编排框架 (UOF),用于作业和队列管理,并于底层的计算、存储和网络层交互,进行调度决策,并将作业分发到对应计算集群。


虚拟队列编排:VQM 负责按需编排虚拟队列。对于存在大量跨机房的作业,并且虚拟队列在对应机房没有物理资源池时,虚拟队列管理模块能够为作业在目标分配临时队列,并在作业完成后回收对应资源。

作业动态调度:作业编排模块根据维护的计算、存储和网络资源的最新视图,并根据分析的作业元数据,如作业依赖数据、作业资源需求等,求解调度模型,决策最优的作业运行机房和集群,并将作业分发到对应集群。

存储层


提供元数据查询能力:控制层通过离线预测或者 SQL 解析得到作业依赖的数据路径后,通过存储层进一步分析数据所在机房、每个机房副本数、单个副本大小等信息,并利用这些信息进行数据准备阶段的耗时预估。

具备数据缓存加速能力:为了降低跨机房数据的带宽和延迟,ResLake 离线分析作业所需数据及其访问行为,控制层根据分析结果,在网络低谷期通知存储层发起数据复制/迁移,将数据提前缓存在本地数据中心。

执行副本重分布:存储层数据洞察服务从存储元数据节点、数据节点等存储组件收集存储指标,进而获取当前数据放置策略、存储空间占用、跨 DC 流量等指标,评估数据迁移的预期资源消耗。并通过数据管理服务实现存储副本迁移能力,实现原理是扫描所有文件块的副本分布,判断是否满足目标分布策略(如跨机房流量最少),利用元数据节点副本修复流程补充目标数据中心对应副本,并利用副本删除机制删除不符合副本放置策略的冗余块,最终实现目录级数据中心副本重分布。

对数据聚类分析:基于历史访问特征,可以对离线数据进行更为精细的编排和调整,有序地进行迁移,达到减少跨机房流量的目的。根据计算任务与数据的依赖关系,我们以计算任务与数据路径为顶点,查询任务与数据路径之间的流量为边,构建一个有向无环图(DAG)。上述问题可以概括为将此 DAG 划分为若干个子图,使得跨子图的边权重之和最小。每个子图中的数据路径放在相同机房中,因此跨子图的边就是跨机房的流量。我们使用混合整数线性规划(MILP)来解决数据聚类问题。通过数据聚类,我们能够将关联性强的表放到相同机房中,以减少跨机房数据访问。


网络层


执行初始配额分配:网络层的网络 Quota 管理模块(NQM)在作业提交时执行初始配额分配,并动态管理网络 Quota。对于周期性作业,我们将初始 Quota 分配为作业在最后 n(n>=3)次运行中的平均带宽使用量。对于临时作业,ResLake 为作业分配一个默认 Quota 值。

动态管理网络 Quota:根据当前带宽水位为每个集群设置 Quota 回收带宽策略参数。Quota 管理策略根据剩余 Quota 和计算集群优先级进行差异化调整。当剩余 Quota 水位较高时,将优先为高优集群分配 Quota,并回收低优集群的 Quota。

效果验证

  • ResLake 上线后,作业平均 JCT 时间下降了 20%。



  • ResLake 将 CPU 利用率均衡性提升了 80%,内存利用率均衡性提升了 53%。



  • ResLake 将跨机房流量减少了 50%。



  • ResLake 通过推荐数据进入温存,节省了 46% 的存储成本。

总结

针对多机房架构,通过设计多机房统一资源管理系统 ResLake,减少作业完成的同时实现不同机房之间的资源均衡。ResLake 具备计算、存储和网络的全局视角,能够全局优化资源的最优排布问题。在 ResLake 的实现上,控制层与底层计算、存储和网络层协调,以确保各种在线和离线机制的有效性。并如上文所介绍的,在字节跳动的生产实践中验证了自 ResLake 部署以来,大数据作业平均作业完成时间明显降低、资源均衡性得到显著提升,并且跨机房流量和存储成本大幅下降。


作者信息:张鑫春,字节跳动基础架构工程师。电子科技大学硕士,曾就职阿里、百度,目前在字节跳动专职于大数据资源管理系统研发工作。


2024-09-04 17:218002

评论

发布
暂无评论
发现更多内容

TDengine 在酷哞哞的应用

TDengine

数据库 tdengine 开源 物联网

通过 Amazon API Gateway 和 Amazon Lambda 实现基于 Restful API 的 CloudFront Distribution 复制/克隆功能

亚马逊云科技 (Amazon Web Services)

Lambda Gateway

为什么说 MongoDB 和 HBase 不适用于汽车行业的时序数据处理?

TDengine

数据库 tdengine 开源 时序数据库

LinkedList 源码分析-初始化&节点查询

zarmnosaj

5月月更

netty系列之:在netty中实现线程和CPU绑定

程序那些事

Java Netty 程序那些事 5月月更

Docker学习记录

ZuccRoger

5月月更

为什么企业要告别自托管并迁移到 Atlassian 云版?

龙智—DevSecOps解决方案

Atlassian Atlassian 云版 Atlassian迁移

百度程序员Android开发小技巧

百度Geek说

移动端

场景实践 | 如何使用融云超级群构建游戏社区

融云 RongCloud

直播预约|数据指标体系如何搭建才最有效,从0到1带你快速入门

袋鼠云数栈

大数据 数据中台

B站S11破亿直播在线稳定性保障秘籍——演讲实录

TakinTalks稳定性社区

混沌工程 系统稳定性 全链路压测 安全生产

敏捷已死

方云AI研发绩效

ApacheCon Asia 2022 强势来袭!16 大专题等你投稿!

阿里巴巴云原生

开源 云原生 活动

要做研发高手,就是必须能看英文、写英文

TDengine

数据库 tdengine 开源

加入MOVE,一起体验Move2Earn的运动乐趣

BlockChain先知

学生管理系统架构设计图

Justin1024

架构7期模块1作业

Elvis FAN

架构实战营

争夺存量用户关键战,助力企业构建完美标签体系丨01期直播回顾

袋鼠云数栈

大数据 数据中台

[Day41]-[回溯]-全排列

方勇(gopher)

LeetCode 回溯算法 数据结构算法

如何使用阿里云 CDN 对部署在函数计算上的静态网站进行缓存

阿里巴巴云原生

阿里云 Serverless 云原生 CDN 函数计算

TDengine在弘源泰平量化投资中的实践

TDengine

数据库 tdengine 开源 时序数据库

ShardingSphere 在东南亚|与科技保险公司 Fuse 的技术融合

SphereEx

Apache 开源 ShardingSphere SphereEx 数据库·

时序数据库的集群方案?

TDengine

数据库 tdengine 开源

【刷题第12天】58. 最后一个单词的长度

白日梦

5月月更

「国货」设计SaaS崛起,黑马inCreate自图冲出公装赛道

ToB行业头条

火爆的健身应用软件是如何一步一步打造出来的?

龙智—DevSecOps解决方案

DevOps perforce Helix Core

万字长文:手把手教你实现一套高效的IM长连接自适应心跳保活机制

JackJiang

TCP 网络编程 即时通讯 im开发 心跳保活

携手数字人、数字空间、XR平台,阿里云与伙伴共同建设“新视界”

阿里云弹性计算

XR 数字人 视觉计算 瑶台

开启分布式应用性能观测(APM)

观测云

可观测性 可观测

时间序列化数据库选型?时序数据库的选择?

TDengine

数据库 tdengine

携手 TDengine,释普科技升级实验室仪器、监控智能方案

TDengine

数据库 tdengine 开源 物联网

数据库顶会 VLDB 2024 论文解读|ResLake: 字节跳动多机房资源统一管理系统解析_云原生_张鑫春_InfoQ精选文章