GaussDB(DWS)负载管理架构、基本概念和场景

举报
dbtong 发表于 2020/08/22 16:40:46 2020/08/22
【摘要】 什么是资源负载管理,大型分布式数仓是如何实现负载管理的,本文就来解密GaussDB(DWS)负载管理的实现机制和应用场景。

什么是工作负载管理

工作负载管理(Workload management)是什么,应该怎么理解?工作负载管理是对一个系统整体资源的管理和任务的合理调度,使系统可以高效运转。生活中有很多类似的例子:对于一个餐馆来说,他的资源包括了餐馆的房间、桌椅、每天的食材、采购员、厨师、服务员等。如何安排每天采购的食材、厨师和服务员的工作、顾客的预定、外卖订单,保证每天食材充足又不浪费、顾客多又不至于等待太久、VIP顾客能优先满足、外卖及时发出,这些都是工作负载管理要考虑的问题。对分布式数据仓库来说,涉及的资源包括各种硬件资源,比如CPU、内存、IO、磁盘空间、网络等,还有各种软件资源,比如连接池、线程、信号量、各种队列等。分布式数据仓库的“客户”就是各种上层应用的作业(SQL语句),同时分布式数据仓库为了保证自身正常运行还有一些内部维护作业,比如周期巡检、数据归档、主备数据同步、实时监控等。工作负载管理就是监控各种作业对软硬件资源的使用情况,为不同作业合理分配不同的资源,保证应用的作业——“客户”可以正确、快速的执行,得到希望的结果。

GaussDB(DWS)负载管理架构

13.jpg

 

GaussDB(DWS)的负载管理包括以下几部分:

  • 全局资源统计中心(CCN

  •  资源队列(各个CN

  •  资源管控和资源信息收集(各个DN

  •   资源查询视图

 

全局资源统计中心(CCN)汇总所有CN上执行的作业的资源信息以及系统中计算节点的资源分配情况,各个CN在收到用户作业请求和结束作业时都会上报给CCN,以便CCN能实时跟踪作业资源使用情况。同时各个CN也根据CCN的信息来了解系统整体资源使用情况,决策是否有足够的资源来执行作业。在资源不足的情况下,各个CN会将新的作业放在资源队列中排队,等有足够资源后再下发作业给DN来执行。

资源池是用户配置的资源载体,包括CPU资源、内存资源、IO资源、并发作业数等。任何用户发起的作业都有其对应的资源池,同一资源池在所有CNDN上的信息是完全一致的,这保证了同一用户的作业从任何CN下发DN后,所有DN都知道按什么规格来对该作业进行资源管控。

各个DN根据资源池配置来控制作业资源使用,例如DN通过资源池上定义的控制组来调节作业的CPU配额和限额,通过资源池定义的内存限额来控制内存使用量。分布在DN各个执行算子中的探针会采集作业资源使用情况,并周期上报给CNCCN。同时,DN整体资源使用情况也会上报给CNCCN,以便CNCCN调整后续作业执行策略。

系统管理员可以通过查询资源视图来了解这些采集的资源信息,包括节点级、作业级和算子级资源信息。也可以将这些信息周期保存到系统表中,以方便随时分析。

基本概念

资源队列:CN上的资源管理单元,也可以成为租户。每个资源队列会创建一个资源池。每个资源队列可以控制归属自己的作业使用的资源总量,使资源总量不超过资源池定义的资源上限。如果已运行的作业资源使用量达到上限,则后续作业就需要排队等待已运行作业结束释放资源。

资源池:可以定义各种资源的配额和限额,包括CPU、内存、IO、并发队列等。资源池是一种数据库对象,在CNDN间保持一致,保证DN可以按照定义来正确进行资源管控。

配额:CPU可以支持配额,即在有CPU资源竞争情况下,各个资源池的作业可以根据配额来分配CPU时间片。而在CPU资源空闲时,各个资源池的作业也可以充分利用尽可能多的CPU资源。

限额:限额是将所有资源进行划分,各个资源池的作业不能使用超出限额的资源,即使限额以外的资源是空闲的。例如资源池的CPU限额是2CPU核,即使其他CPU核是空闲的,该资源池的作业只能使用分配的2CPU核。

用户:这里的用户是指数据库用户,可以登录数据库并执行SQL语句。执行的SQL语句也成为作业。用户和资源池是多对一的关系,一个用户只能指定一个资源池,一个资源池可以被多个用户指定。应用层业务可以通过一个用户创建多个会话连接相同或不同的CN,并发执行多个作业。所有CN上同一个资源池所有用户作业的资源使用需要满足资源池的配额和限额。

典型应用场景

  • 优先级调度:为高优先级的作业分配单独的资源队列。例如,对于前台需要实时查询的业务分配单独的用户和资源队列,并分配较大的并发作业数。但如果前台实时查询的作业非常多,导致并发量很大,仍然会导致作业等待,因此高优先级的作业比例不应该很多。

  • 限制高负载的后台作业:应用设计时经常会将实时性不高,且数据量大负载高的作业放在后台执行;或者把查询量大的前台查询请求变成异步任务,前台显示查询进度。可以将负载高的后台作业放到单独的资源队列上执行,并设置CPU限额和内存限额,减少并发作业数。这样就可以避免少数高负载作业占用数据库大量资源,导致其他实时作业响应很慢。

  • 业务资源分配:对于大型企业级数据平台,往往支撑很多业务运行,例如不同地区、不同部门的业务数据分析。而不同地区和部门之间业务差异比较大,为了减少不同业务资源争抢,可以为不同业务分配不同资源队列,并根据业务实际情况进行资源配比。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。