研报正文总结
背景介绍
调度系统分为资源调度和任务调度两种类型。资源调度主要管控和分配物理资源,提供资源抽象和编程模型接口;任务调度则专注于大数据计算框架、在线服务运维管理,支持丰富的任务类型、精准的调度和便捷的工作流管理。调度系统作为数据开发任务的基石和中枢,负责静态血缘构建推送、任务App信息串联、SqlDDL推送、多类型任务和调度模式支持、多类型任务依赖管理、资产统计、调度执行、数据安全扫描、数据探查、实例状态变化信息订阅以及调度操作接口等功能。与Airflow、Oozie、Azkaban等社区调度系统相比,数帆数据中台调度系统在流程定义、HA扩展性、调度模式、UI、外部事件触发、实例下发模式、身份验证等方面具有优势。
架构设计
总体架构包括APIServer(接入层)、TaskManager(作业管理)、Master(调度管理)、Executor(Flow推进和Job执行)、SubmitServer(统一提交能力)以及其他组件如日志、报警消息推送。Master采用Active/Secondary NameNode和JournalNode的HA架构,通过队列降级、时间参数约束、冲突检查、数据校准等措施保证高可用性。Executor高可用架构通过原生缺陷修复、关键数据持久化、故障恢复流程、ExactlyOne租约机制、明确流程、基于可靠组件的分布式锁、完善的迁移、准确的故障发现、上下配合兜底、冲突检查与解决、租约监督机制等保证高可用性和一致性。
关键技术点
任务高可用通过DispatchQueue、状态汇报、实例下发、事件队列、Alarm级队列、优先级、重试、资源缓存等技术实现。扩展性方面,通过服务无状态、存储可扩展、基于集群情况调度任务切片、跨集群event trigger依赖、可水平扩展任务类型、插件化管理、公共能力抽象等技术实现。高性能方面,通过纯内存资源缓存、双层DAG、内存无锁运行、调度执行实例内存队列、Executor本地缓存、提交服务缓存镜像文件等技术实现。提交服务技术架构通过统一提交服务集群、集群实例、任务提交/获取/取消、任务结果/日志获取、监控更新任务状态、其他信息上报/获取、文件存储系统、MySQL、Zookeeper等技术实现。提交K8S和Job容器化提交通过统一提交服务集群、任务提交/获取/取消、任务结果/日志获取、监控更新任务状态、其他信息上报/获取、文件存储系统、MySQL、Zookeeper、NODE日志服务、Daemon Set、Ingress、Pod、Job、磁盘日志文件、缓存文件、Pod、镜像仓库、Hadoop Image、Spark Image、S3存储、Control Plane、Scheduler、Controller、ETC、ApiServer、K8S集群、NODE等技术实现。提交唯一性通过异步队列恢复异常、分布式锁+心跳判断节点存活、watch+回调保证状态恢复上线、提价服务无状态、基于TaskPod规避重复提交、基于资源版本watch保证状态恢复上线、调用方提供唯一标识、不允许重复提交、调用方需失败重试、Exec_Flow_Job_Att任务ID唯一等技术实现。
产品效果
数据沙箱测试发现任务污染了线上数据、任务发布忘记修改测试库、开发模式下调试任务不小心写入线上数据、测试任务影响了线上任务运行、开发模式到生产模式不用改代码、生产、测试集群物理隔离、开发模式禁止写入生产集群、测试集群承担灰度集群功能、开发模式读取线上模式数据等问题,因此需要数据沙箱。数据沙箱离线开发平台通过调度架构和底层架构的隔离和适配实现数据沙箱功能,代码与数据解耦,根据运行环境自动适配,对用户透明,不需要修改代码。Flow编排通过写代码一样编排Job、Flow之间的Job点相互依赖、自然时间和周期时间锚定方案、条件节点、引用节点、参数传递、上下游节点输出输入、Job、Flow、Schedule、参数组、父Flow等多参数传递、系统内置宏、时间函数、参数模板化、任务资源集中管理、通用的任务框架模板、任务插件化管理、多种类型的跨流依赖控制节点、参数组和公共资源等技术实现。跨流依赖通过依赖计算、自然依赖、周期依赖、强弱依赖等技术实现。支持更好的任务运维通过寻找任务链路瓶颈、优化关键任务、保障数据按时产出等功能实现。