总篇第91篇 2020年第15篇1、之家分布式任务调度背景? ?任务调度系统在大数据平台当中是一个核心的基础设施,由于数据处理流程常常具有很长的依赖链条,因此依赖单机的crontab等单纯依赖时间调度的方式,往往存在很大的弊端,如依赖不清晰,出错难以查找等问题。?2、之家分布式调度的优势1、可视化的任务管理,依赖管理,运行历史以及日志查看。2、在线更新和执行任务,实时更新,实时生效。3、多种调度方式:支持手动,定时,依赖,定时+依赖。4、分布式部署,保证系统高可用,可伸缩,支持失效转移提高了容错性。5、任务,运行记录,日志持久化,避免了宕机和数据丢失带来的隐患,同时有完善的任务失败重做机制和详细的任务跟踪及告警策略。6、支持跨周期依赖。7、集成了Datax,一个Datax数据同步任务作为调度的一个Job来进行调度,提供web页面,并支持在线动态配置,实时修改实时生效。3、之家调度系统介绍3.1、分布式任务调度技术选型Spring-boot 社区活跃的开发框架。用于快速开发,快速迭代。Mybatis:一款优秀的持久层框架,支持定制化 SQL,存储过程以及高级映射。用于简化持久层开发。Hbase:Hadoop文件系统之上的分布式面向列的数据库,调度中主要是日志,脚本和数据订阅结果存储Zookeeper:久经考验的注册中心。用来解决调度中心高可用,分布式一致性,事件触发等问题。Netty:一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端,用来解决调度Master与Worker通讯问题。Protobuf:序列化框架,主要用在Master与Worker通讯数据进行序列化Apache Curator:封装较好的zk客户端Quartz:开源调度框架,调度中使用其作为定时任务的调度DataX:阿里巴巴开源,任意异构数据系统离线数据交换的工具?3.2、设计思想? ? 用户通过WebUI的任务操作事件通过zk触发,事件统一注册到event节点下,集群master监听event节点来处理相应的任务触发事件,达到任务实时更新(任务信息,调度信息,依赖信息),和任务执行操作。调度集群基于ZK来实现高可用,master启动时会将自身ip和端口注册到/group,worker启动时获取并建立长连接,使用netty作为通讯框架,数据交互格式统一使用protobuf。任务统一由master来进行分发,master内存中维护执行机器的分组,任务可选择执行组来指定机器。worker会定时以心跳的方式将任务运行情况机器内存cpu上报到master,master依赖这些信息来均衡分配任务。考虑到异常情况,master会检查worker连接情况,连接断开时master会kill问题机器上的任务,重新分配其他可用执行机器。? ?3.3、调度的几个核心概念1、任务(job):基本执行单元,执行器与master通过消息来下发执行任务。2、事件(event):可理解为操作类型,例如任务的curd,启用禁用,定时触发,依赖触发,成功事件,失败时间。3、批次(batch):由若干个顺序执行的任务组成,多个任务之间存在依赖关系。4、监听器(listener):每个类型类型的event都有一个对应的监听器处理。5、任务调度中心(scheduler):根据每个的作业的执行周期进行调度。6、任务执行器(Executer):任务执行器,接收消息并执行任务操作。?3.4、Master-Slave架构我们采用在大数据领域常见的Master-Slave架构Master: 负责处理event,任务调度,批次调度,任务分发。Worker:接收调度请求并执行任务任务注册中心(Zookeeper):协调任务和执行器HBase:日志存储3.5、模块划分主要有3个大的模块,调度前端管理,Master 和 Wokrer,下面分别介绍3个模块的职责1)WEBUI主要负责任务,脚本,监控等的维护? ? 任务管理:包含任务CRUD,启动/停用,任务依赖关系管理,手动执行,查看运行历史,查看运行日志等等一系列任务任务操作? ? 脚本管理:任务实际执行的脚本维护? ? SLA:批量任务的报警管理? ? 执行节点(executor)管理:动态上线线,调整机器任务数,切换机器分组? ? 批次管理:先解释下批次:由若干个顺序执行的任务组成,多个任务之间存在依赖关系。而这里是针对整个批次的处理,支持DGA图查看运行状态,支持批量kill2)Master为调度的核心模块,复制主要的工作? ? 定时调度:定时任务的调度? ? 任务依赖:监听成功事件,记录任务上游完成情况,基于条件启动任务? ? 事件监听:监听Zookeeper上事件节点,触发任务执行。? ? 任务分发:判断执行机器状态,cpu内存,任务运行数据,均衡的分配任务到执行机。? ? 失效恢复:当执行机器异常,kill任务,重新分发到可用机器。? ? 扩容伸缩:支持水平的动态添加执行机器3)Worker 为调度实际执行任务的模块? ? 任务执行:支持Shell,Python,Zip,Java等形似。同时支持Datax任务? ? 心跳上报:定时上报心跳,包含机器运行状态,任务数据,cpu,内存? ? 参数处理:对用户配置的任务相应参数进行处理,封装新的脚本,生成启动命令? ? DataX:对用户配置的交换数据源信息进行组装生成 datax标准的json格式和启动命令4)HBase日志和脚本存储5)Zookeeper注册中心:? ? 事件发布:基于Zookeeper监听机制,进行任务的发布。? ? 注册中心:调度Master和Worker都以Zookeeper作为注册中心;数据以节点及节点内容的形式注册,master定时将全部执行机器情况注册到Zookeeper上!? ? 元数据存储:注册中心不仅仅提供注册服务,并且存储每个执行器的信息,以及事件信息。?4、集成IDE看下图,调度系统对外提供4个接口:? ? 1、任务执行:调度将IDE请求包装为一个临时任务,提交到集群执行并返回任务唯一ID? ? 2、任务取消:基于任务ID取消任务,调度前端将注册取消事件到ZK触发集群取消正常运行的任务进程? ? 3、日志查询:基于ID,调度前端将获取任务执行的机器直接读取机器运行日志? ? 3、数据导入:多IDE提交的数据进行包装,生成一个数据导入任务,发布到集群客户机器执行总的来说,之家IDE目前是基于调度系统实现,例如常用的操作 执行,取消,日志查询,数据导入等均是以HTTP接口的形式通过调度来实现的,每一次执行会在调度系统生成一个临时任务,和IDE以ID进行关联。?5、总结作为汽车之家自研的统一调度系统,调度系统定义了大数据计算和处理的逻辑与规则,对所有任务的执行顺序进行编排管理,实现了任务的有序和高效执行。同时,调度系统可便捷的实现任务的执行、重跑、终止等操作,能方便的查看执行日志,及时监控管理任务执行情况。 ?6、后续计划1、Master目前为单机模式,存在瓶颈,需要优化2、Master和Worker为长连接,存在断开的风险,可考虑改使用RPC框架或者Http来替换。