弹性资源组件elastic-resource设计(四)-任务管理器和资源消费者规范

简介

弹性资源组件提供动态资源能力,是分布式系统关键基础设施,分布式datax,分布式索引,事件引擎都需要集群和资源的弹性资源能力,提高伸缩性和作业处理能力。

本文介绍弹性资源组件的设计,包括架构设计和详细设计,指导开发人员代码开发,设计基于《flink原理源码分析(一) 集群与资源@k8s》,抽出**++作业管理器++** ,包括其内部的调度器,通用化为**++资源消费者++**,标准化与资源管理器和任务管理器的交互接口;增加约束,如,组件间通讯rpc组件,高可用组件,心跳组件等,最大程度使用原flink代码,后续的迭代不断标准化,抽象化交互接口,支持不同的实现。

本文是弹性资源组件设计最后一章,描述任务管理器的设计和资源消费者规范

技术架构

弹性资源组件的技术架构图,其中作业管理器接入系统提供,需实现与资源管理器和任务管理器的交互, 还有一些技术要求。

总体架构是master-worker,master的高可用是k8s的复制机制提供,选主机制k8s提供,作业管理器和资源管理器参与选主,作业管理器/任务管理器接入资源管理器主节点监听,获取最新资源管理器;作业管理器接入作业管理器主节点监听,获取最新的作业管理器主节点

数据架构,资源是组件的核心数据,分两条线a线 现有资源,b线 待定资源

  1. 4资源请求->5a 分配可用资源-> 6a 请求使用资源-> 7a 提供资源->8a 提交任务
  2. 4资源请求->5b 分配待定资源-> 6b 请求新worker-> 7b 启动任务管理器->8b 注册/报告资源

a线是分配现有资源;b线请求新资源,新资源注册后是现有资源,在a线分配

组件架构

上图弹性资源组件架构,作为SDK,提供RPC,slot池,心跳,高可用等组件支持,这些组件有约束的,有可选用的

任务管理器模块

任务管理器,资源的拥有者,负责报告资源槽,执行任务

《提供资源》是《请求使用资源》的关联用例,任务管理器向资源消费者确认提供资源消费者所需资源

请求使用资源/提供资源

++资源管理器++ 分配资源,匹配了合适的空闲资源slot,++资源管理器++ 请求资源所在的**++任务管理器++** 使用资源,++任务管理器++ 确认使用后,通知**++资源使用者++**

  1. ++资源管理器++ 向资源所在的**++任务管理器++**TaskExecutor发出使用请求requestSlot
  2. TaskExecutor调用allocateSlotForJob,登记资源使用,登记信息包括jobId, slotId, allocationId, resourceProfile, targetAddress等
  3. TaskExecutor rpc-offerSlots通知ResourceConsumer确认提供该资源
  4. ResourceConsumer转交SlotPool的offerSlots处理,同样,最终处理是DeclarativeSlotPool
  5. DeclarativeSlotPool的matchOfferWithOutstandingRequirements匹配offerSlot与未完成的资源请求,构建AllocatedSlot
  6. 最后AllocatedSlot放入分配池AllocatedSlotPool,返回接收的offerSlots给TaskExecutor处理,没有匹配部分没有使用,无需返回

本节描述基于**++资源消费者++** 使用弹性资源提供的slot池组件,管理获提供的资源,**++资源消费者++**也可自行实现资源管理

提交任务/载入和启动任务

**++资源消费者++**获得资源后,提交任务配置,包括任务的类型和参数,任务管理器启动任务

资源消费者规范

本节介绍系统使用弹性资源组件的规范,系统接入弹性资源组件,提供资源消费者实现

  1. ++资源消费者++ 需接入弹性资源的高可用机制,++任务管理器++ 监听**++资源消费者++**主节点变更
  2. **++资源消费者需++**使用弹性资源的rpc组件实现规范的输入和输出接口
  3. ++资源消费者++ 与**++资源管理器++** 和**++任务管理器++**间的心跳(HeatBeat),以及实现心跳超时资源的释放,重连
相关推荐
Joren的学习记录14 小时前
【Linux运维大神系列】Kubernetes详解3(kubeadm部署k8s1.23高可用集群)
linux·运维·kubernetes
hanyi_qwe14 小时前
发布策略 【K8S (三)】
docker·容器·kubernetes
Cyber4K17 小时前
【Kubernetes专项】DockerFile、数据持计划、网络模式及资源配额
运维·网络·云原生·容器·kubernetes
Joren的学习记录18 小时前
【Linux运维疑难杂症】k8s集群创建calico网络失败
linux·运维·kubernetes
Zsr102318 小时前
K8s核心组件Pod:基础篇
云原生·容器·kubernetes
拔剑纵狂歌19 小时前
helm-cli安装资源时序报错问题问题
后端·docker·云原生·容器·golang·kubernetes·腾讯云
Joren的学习记录21 小时前
【Linux运维大神系列】Kubernetes详解2(kubeadm部署k8s1.27单节点集群)
linux·运维·kubernetes
lbb 小魔仙21 小时前
【Linux】K8s 集群搭建避坑指南:基于 Linux 内核参数调优的生产级部署方案
linux·运维·kubernetes
木二_21 小时前
附058.Kubernetes Gitea部署
ci/cd·kubernetes·gitea
没有bug.的程序员21 小时前
Kubernetes 与微服务的融合架构:调度、弹性、健康检查深度协同
jvm·微服务·云原生·架构·kubernetes·健康检查·弹性伸缩