技术特征:
1.一种基于声明式api的数据传输系统资源调度的方法,其特征在于,该方法具体如下:自定义api资源类型crd:分别定义数据传输系统的采集端资源、入库端资源和消息中间件资源的资源类型crd;其中,资源类型crd的组为dts;应用对应资源类型crd的资源描述文件对采集端资源、入库端资源和消息中间件资源进行调度,并通过自定义控制器捕获应用的资源文件实现对应的资源调度工作;通过对资源文件的定义完成底层物理资源与业务逻辑资源的抽象,并通过自定义控制器实现对业务资源的调度。2.根据权利要求1所述的基于声明式api的数据传输系统资源调度的方法,其特征在于,所述数据传输系统包括采集组件、消息中间件和入库组件,采集组件读取数据后写入消息中间件,消息中间件对读取的数据进行缓存,以保证数据的完整性,并将采集组件与消息中间部署在一个pod中;采集组件和消息中间件分别定义一个类型dtsreader的资源类型crd,入库组件定义一个类型dtswriter的资源类型crd;其中,采集组件用于从源端数据库读取数据;消息中间件用于数据的保存与传输;入库组件用于将采集的数据写入目的数据库。3.根据权利要求2所述的基于声明式api的数据传输系统资源调度的方法,其特征在于,所述dtsreader与dtswriter的资源类型crd的字段具体如下:taskid:数据传输任务的唯一标识;version:产品版本号,后台数据库采集组件和入库组件的版本号与产品版本号一致;isavailable:资源是否可用;dbinfo:数据源信息,源端或目的端数据库的连接信息;task:任务配置信息,任务配置信息包括表信息、字段信息及相关的传输策略参数;resources:资源信息,资源信息包括需要拉起的pod的cpu信息、内存信息及存储信息。4.根据权利要求1所述的基于声明式api的数据传输系统资源调度的方法,其特征在于,自定义控制器是指为资源类型crd创建一个对应的cdr控制器,实现当crd对象发生变化时,触发crd控制器里面的业务逻辑代码;具体如下:数据传输系统创建自定义控制器dts-operator;自定义控制器dts-operator使用reflector的listandwatch方法获取并监听对象实例的变化;当任何一个实例有任何变化,reflector均会收到事件通知,并收到通知后把对象实例对应的事件和对象的组合存入一个先进先出的队列中;自定义控制器dts-operator使用informer不断从先进先出的队列中读取对象,并判断事件的类型是dtsreader或dtswriter:确定事件的类型后,根据事件的类型创建dtsreader或dtswriter所需要的资源。5.根据权利要求4所述的基于声明式api的数据传输系统资源调度的方法,其特征在于,创建dtsreader所需的资源具体如下:自定义控制器dts-operator创建采集组件所依赖的消息中间件nats的pod及service资源;
在消息中间件nats中,创建jetstream及consumer资源;在消息中间件nats资源部署完成后,部署采集组件的pod、service及存储资源;通过监控对应事件,并可将物理资源及业务配置均按自定义的逻辑进行处理;当处理完成后,数据传输任务所需的采集组件便可正常工作;创建dtswriter所需的资源具体如下:自定义控制器dts-operator创建入库组件所需要的pod及service物理资源以及生成数据传输任务相关的配置文件;将消息中间件nats相关的信息写入到配置文件中;通过监控对应事件,并可将物理资源及业务配置均按自定义的逻辑进行处理;当处理完成后,数据传输任务所需的入库组件便可正常工作。6.根据权利要求4或5所述的基于声明式api的数据传输系统资源调度的方法,其特征在于,自定义控制器dts-operator依靠informer的代码块从kubernetes的apiserver里获取dtswriter对象和dtsreader对象,informer与api对象一一对应,数据传输过程中传递给自定义控制器dts-operator的是一个network对象的informer;其中,创建informer工厂时,为informer工厂传递一个networkclient,network informer使用networkclient与apiserver建立连接,维护network informer与apiserver连接的是informer所使用的reflector包中的listandwatch机制,listandwatch机制用于获取并监听network对象实例的变化;在listandwatch机制下,一旦apiserver端有新的network实例被创建、删除或者更新,reflector均会收到对应network实例的事件通知,该事件及该事件对应的api对象组合就被称为增量delta,并放入一个增量先进先出队列中;同时,inform会不断地从增量先进先出队列读取增量,每读取一个增量,informer便会判断该增量里的事件类型,并创建或更新本地对象的缓冲。7.根据权利要求6所述的基于声明式api的数据传输系统资源调度的方法,其特征在于,informer具有如下功能:
①
、同步本地缓存;informer自带缓存和索引机制;触发handler的客户端库,本地缓存在kubernetes中被称为store,索引被称为index;informer使用reflector包,reflector包通过listandwatch机制获取并监视api对象变化的客户端封装;reflector包和informer之间用一个增量先进先出队列进行协同;
②
、根据事件类型,触发实现注册好的resourceeventhandler;通过监听到的事件变化,informer实时地更新本地缓存,并且调用事件对应的eventhandler,每经过resyncperiod指定的时间,informer维护的本地缓存均会使用最近一次list返回的结果强制更新一次,从而保证缓存的有效性;其中,创建自定义控制器dts-operator时,注册给resourceeventhandler对应的informer;informer在编写的控制循环前,使用一个工作队列来进行协同;其中,informer控制循环的逻辑具体如下:等待informer完成一次本地缓存的数据同步操作;通过goroutine启动一个或多个无限循环任务;在每一个循环周期中,执行的就是数据传输业务逻辑代码;
若控制循环在informer缓存中获取不到相应的对象的信息,则说明要执行删除逻辑;若从缓存中获取到对象信息,则执行控制器模式对比期望状态和实际状态,期望状态来自于etcd实际状态来自于集群本身。8.根据权利要求1所述的基于声明式api的数据传输系统资源调度的方法,其特征在于,自定义api资源类型crd还包括如下内容:进行api对象的initializer操作和validation操作:validation操作验证对象中各个字段的合法性,验证后保存到registry数据结构中,一个api对象的定义能在registry里能查到,则说明该api对应是一个有效的k8sapi对象;把superversion对象转换成用户提交版本的对象序列化后保存到etcd中。9.根据权利要求1所述的基于声明式api的数据传输系统资源调度的方法,其特征在于,所述数据传输系统定义一个管理端服务dts-service,管理端服务dts-service用于接收前端发送的用户指令,通过声明式api方式与后端自定义控制器dts-operator交互,实现对数据传输任务资源的创建和任务的操作逻辑控制;其中,资源的创建具体如下:用户通过在前端界面创建任务,前端界面通过http请求调用管理端服务dts-service创建数据传输任务方法;管理端服务dts-service通过访问kubernetes的api,按顺序应用该数据传输任务dtsreader及dtswriter的资源类型crd,资源类型crd中的name字段与任务编号一致用来区分不同任务的资源类型crd;应用的资源类型crd会由自定义控制器dts-operator监听到并执行对应的创建资源逻辑;资源创建后,数据库的采集组件、入库组件和消息中间件nats自动完成初始化工作;管理端服务dts-service检测到任务的采集组件和入库组件资源已成功分配且正常初始化后,返回给用户创建成功消息;业务的操作逻辑控制具体如下:用户通过在前端界面进行数据传输任务的启动、停止、暂停、续传、变更密码及删除操作;前端界面通过http请求调用管理端服务dts-service中对应的方法;管理端服务dts-service分别组装该数据传输任务对应的dtsreader及dtswriter的资源类型crd,资源类型crd的name字段与任务编号一致用来区分不同任务的资源类型crd;在组装的资源类型crd中的operation字段对应用户的操作;管理端服务dts-service通过访问kubernetes的api,分别应用该任务dtsreader及dtswriter的资源类型crd;管理端服务dts-operator监听到资源类型crd版本变化后,对operation字段的内容进行分析来判断用户的操作,根据操作类型分别调用采集组件及入库组件对应操作的grpc接口,从而完成用户的操作。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序可被处理器执行以实现如权利要求1至9中任一项所述的基于声明式api的数据传输系统资源调度的方法。
技术总结
本发明公开了基于声明式API的数据传输系统资源调度的方法及存储介质,属于Kubernetes环境下资源调度技术领域,本发明要解决的技术问题为如何利用Kubernetes资源编排能力实现对数据传输系统资源的方便快捷调度,采用的技术方案为:该方法具体如下:自定义API资源类型CRD:分别定义数据传输系统的采集端资源、入库端资源和消息中间件资源的资源类型CRD;其中,资源类型CRD的组为dts;应用对应资源类型CRD的资源描述文件对采集端资源、入库端资源和消息中间件资源进行调度,并通过自定义控制器捕获应用的资源文件实现对应的资源调度工作;通过对资源文件的定义完成底层物理资源与业务逻辑资源的抽象,并通过自定义控制器实现对业务资源的调度。务资源的调度。务资源的调度。
技术研发人员:赵锦 邓光超 孙兴艳
受保护的技术使用者:浪潮云信息技术股份公司
技术研发日:2022.07.07
技术公布日:2022/10/18