1.GBase 8a MPP Cluster集群内的资源隔离能力
对于一个统一的MPP大数据处理平台,既要处理交互式的即席查询处理类应用,也要处理典型的后台批处理任务,面对各具特性的大数据应用,MPP系统要能够通过资源池或者沙盒概念支持对集群内资源的动态划分,保证各类应用之间能够各行其事,互不干扰。
GBase 8a MPP Cluster采用Linux容器(LXC)进行资源的管理和划分。这种容器方式,可以实现动态对各个应用的使用资源进行划分,保证资源的使用率和资源使用的公平性。具体来说一种分布式数据处理平台资源组织的主要目标是将集群中当前可用的各种资源采用一定方式进行组织,以方便后续的资源分配过程。GBase 8a MPP Cluster的集群整体通过资源管理组方式对集群的资源作为一个整体进行管理,而在各个节点会根据资源管理组的设置信息生成在每个节点上资源容器实例,并在这个实例上运行在GBase 8a MPP Cluster各个节点上的进程。
在GBase 8a MPP Cluster中,资源管理组支持按照用户、用户组(包括角色概念)的资源管理组设置,可以按照用户、用户组识别负载。由图可见,对于GBase 8a MPP Cluster集群下资源(包括CPU、磁盘I/O资源等),按照用户/用户组为单位进行资源隔离和分配,并且这种资源隔离是通过LXC容器的动态方式实现,以便系统用灵活的方式管理各个用户/用户组下资源的配分。LXC是一种轻量级的内核虚拟化技术,可以用来进行资源和进程运行的隔离,通过LXC可以在一台物理主机上隔离出多个相关隔离的容器,LXC在资源管理方面依存于Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理框架,可以为特定的进程组限定使用的资源。
图 GBase 8a MPP Cluster资源管理模型
资源分配的粒度是按照用户/用户组下的SQL任务进行分配,SQL任务可以是一个DML/Select语句,也可以是一个加载任务。而资源管理组中,可以指定各个资源管理组所Affinity(亲和)的CPU资源等,CPU资源的指定以核为单位,还可以在这个Affinity资源设定下面,继续设定资源分配权重,这个权重是一种百分比概念,实际上资源管理组之下可以再根据资源分配权重继续分配一定百分比的资源。通过这种方式可以达成更加细一级的资源划分。
图 GBase 8a MPP Cluster的资源管理粒度
2.GBase 8a MPP Cluster集群内的基于优先级的工作负载管理
GBase 8a MPP Cluster内部通过队列管理不同类型的任务,并根据任务调度策略从各个任务队列中抽取任务进行执行。这里资源调度策略将确定如何将资源池中的可用资源分配给上述任务队列中的各项任务。GBase 8a MPP Cluster采用的是“随机数区间”算法策略根据任务的优先度进行任务调度从而实现用户根据业务需求优先性在集群中申请数据库资源的目的,而对于同一优先级队列内任务,采用FIFO策略,进行排队执行。任务的优先级,是与用户的资源分配时指定的优先级相关联,并且由内部计算规则根据用户的优先级而导出用户任务的执行权重。用户优先级分为高、中、低、缺省四级,高优先级任务可以获取更高的执行随机空间,保证其任务能够较为快速的完成。用户还可以通过设置抢占调度时间,实现抢占式调度策略。抢占式调度策略对于某个任务来说,如果资源无法分配,GBase 8a MPP ClusterV8调度系统可以强制中断比当前计算任务优先级低并运行时间超过设置时间的任务,并从该强制停止的任务中取得释放的资源,以保证其任务执行的响应时间。对于在某一会话(Session)中的某一用户还可以根据具体情况,通过使用hint (格式为/*+PRIORITY(‘priority_value’)*/), 决定该SQL运行级别(即对应的优先级),可以根据这一方式对于同一用户提交不同类型的作业再进行优先级的个别指定,例如对于同一用户,可以使用这一方式对查询、增删改或者加载任务进行优先级的细化管理。
图 GBase 8a MPP Cluster的任务调度策略设计
下面列举不同优先级任务执行时,MPP数据库系统内部的任务调度策略和资源管理策略。
图 实时数据装载和查询同时实行的内部实现机理例子
1)不同级别的任务执行时,MPP数据库系统会根据其所属的优先级别分划到不同任务队列。
2)MPP数据库内嵌的任务调度引擎,会根据一定的预先设置的任务调度策略,按照优先权重所决定的“随机数空间”确定从哪个任务队列中选择任务进行执行。
3)MPP数据库会根据任务的所属的资源管理组对本次执行任务分配资源,并控制任务所消耗资源在一定的范围内。
除上述的GBase 8a MPP Cluster基于优先级的工作负载管理机制外,GBase 8a MPP Cluster 数据库采用协调节点(即接收SQL请求的客户端)集群和运算节点集群的两级联邦式集群架构实现基于内部轮询的负载均衡机制将系统的任务负载均衡分布到各个节点,以实现工作负载的有效管理。
8a的资源隔离采用多vc或基于cgroup的资源管理,资源管理对IO的隔离效果不好。最佳实践将结合业务(分database)+多磁盘可以做IO物理隔离,如业务1对应db1,使用磁盘设备/dev/sdb1,可以到达百分百IO隔离的效果。