百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

分布式时间槽elastic timeslot架构设计

ccwgpt 2024-11-09 11:23 17 浏览 0 评论

背景

调度引擎是关键的基础设施,不但是定时执行任务,更是大规模分布式任务引擎,分布式并行处理平台,管理计算节点集群,提供高吞吐的可伸缩的数据处理能力。

同时,分布式调度引擎也是 dataxsentinel dashboard分布式改造的核心技术

根据场景,调度引擎分为分布式定时任务,处理大规模数据任务;分布式时间槽,处理大量任务

本文介绍分布式时间槽的架构设计,分布式特性依赖《分布式服务支撑平台》

时间轮/时间槽 时间轮是由时间槽组成的环形队列,时间槽内存放作业链表,秒针如时钟秒针一样,一个时间间隔走过一个时间槽,执行时间槽内任务

时间轮算法优势,以较少资源代价管理大量任务,缺点触发时间不支持cron,分布式化困难,因此本组件采用分布式作业分片的机制,实现分布式时间槽

术语

无中心/有中心分布式 有中心分布式设置中心节点负责集群协调和元数据保存等工作,例如 xxl-job 的 admin/executor,dolphin-scheduler master-worker 都是有中心分布式设计;真正无中心设计很少,大部分是节点平等,都可以通过选举成为主节点,也就是,任何一个节点都可以成为中心

脑裂 无中心分布式设计,当网络出现问题,节点分割成多个集群,集群间因不能通讯而不能达到状态一致,通常解决方案是集群节点数奇数,节点数少于总数的集群中一半停止工作

分片/容错 分片是调度平台很重要的特性,调度处理大规模数据,需要分片执行,分片执行带来新的问题,分片失败,平台回收分片,转移到其他节点执行

参考

分布式支撑平台 《分布式支撑服务平台设计说明书.docx》

设计原理

技术架构

作业命名空间 时间槽,定义作业类型,触发时间,可看成调度器

作业实例 分片执行主体,依赖elastic平台,实现分布式特性

分片 实际是作业,有自己的独立配置,是作业类型的实例

管理台 client提交/撤销作业,写入分片

  • znode设计

在分布式支撑服务平台的基础上,增加对时间槽的扩展

Znode用途参考《分布式支撑服务平台设计说明书.docx》

/sharding

/config 存放作业(分片)的业务配置

P.S. /config存放调度配置

详细设计

*这是现在分布式时间槽的状态,以后考虑与调度作业的融合

下面详细介绍每个模块

作业注册

spring boot starter机制初始化

ElasticJobLiteAutoConfiguration spring boot自动配置主入口,import 其他的自动配置

ElasticJobBootstrapConfiguration 初始化 JobBootstrap,从 ElasticJobProperties 获取 ElasticJob 实例,构建 JobBootstrap,注册到 SingletonBeanRegistry,spring bean 工厂可获取

ScheduleJobBootstrapStartupRunner CommandLineRunner 实现,从spring bean 工厂获取Sch

eduleJobBootstrap 实例,注册到本地quartz作业

作业调度

JobScheduler 作业调度器,作业执行环境初始化,构建和初始化 quartz scheduler

AppRegistryContext 单例,应用上下文,持有JobScheduleController

JobScheduleController quartz 调度器的封装

ScheduleJobBootstrap/OneOffJobBootstrap 使用JobScheduler 调度作业

作业设计

ElasticJob 标记类

ElasticJobExecutor 作业执行逻辑,使用 JobItemExecutor 执行作业,在5.2 作业注册和调度进一步分析

JobItemExecutor 两类作业,Typed/Classed,Typed 类型作业实现远程调用执行器, 如 http,feign,不用实现作业类,作业进程是通用的执行节点,不会依赖作业业务;Classed 实现执行器/作业

SimpleJobExecutor/SimpleJob 简单作业实现,平台提供其他常用作业实现,如,script,http,dataflow,这是一对配套实现

作业执行设计

elastic-timeslot 作业是分片执行,作业运行实例下线失效转移,支持弹性计算,新上线节点在新一轮调度分配任务

  1. 运行实例自身是quartz单机调度引擎,quartz调起执行LiteJob
  2. LiteJob(实现quartz Job)转到elastic-timeslot的作业执行器
  3. elastic-timeslot的作业执行器是主要的执行逻辑
  • 清理分片,包括清理上轮执行的completed标记,清除cancel标记的分片
  • 分片,elastic-timeslot采用eager模式分片,即,分配所有分配*
  • 获取本实例分配到的分配,执行
  • 检测是否有未完成的分片,若有,回到3.2;若没有,退出

*另一个分配模式,on_demand,按需分配,用于大任务

执行器设计

ListJob/JobItemExecutor/ElasticJob elastic-timeslot可以看作分布式 quartz,分片作业由 quartz Scheduler调起

ListJob 实现了 quartz 的 job 接口作为 quartz 与 elastic-timeslot 作业的桥接,用 quartz 的参数机制注入 ElasticJobExecutor

这样静悄悄地桥接到 elastic-timeslot 的执行器,执行elastic-timeslot的逻辑

设置服务设计

分布式时间槽设置服务包装分布式支撑平台的设置服务(初始化分布式服务),初始化自身的服务,包括回调机制,作业配置写入,作业触发服务

分布式事件回调/应用控制接口设计

应用与分布式支撑分离,这是设计的关键之一,相关两个设计:分布式的事件通知应用回调;应用的控制接口

InstanceShutdownCallback 实例关闭回调,关闭调度器

RegistryCenterConnetionDownCallback zookeeper下线回调,暂停调度器

RegistryCenterReConnetionCallback zookeeper重新上线回到,注册运行实例,重启调度器

诊断服务

分布式环境复杂,偶尔出现不一致状态,这些状态不能自动回复,需要额外检查恢复

7.6.1 作业超时检测(TBD)

分布式时间槽分片是独立作业,但作业命名空间调度是一个整体,即所有分片结束整个调度才结束,如果出现其中一个分片超时(可能是代码问题,连接数据库等),其他作业跟着超时,对于大规模作业不可接受,超时检测发现作业超时未完成,强制终止作业,并撤销,待开发者处理后重新提交

7.6.2 作业分配给下线运行实例

查找分配给已下线实例的分片,注销分配即可,需要增加主节点选举latch

作业管理台

作业配置管理,作业管理,作业统计,服务节点与实例统计,分片操作,分片统计

代码库

百度百学习,付费后百度网盘下载

分布式支撑平台:https://wx.baixuexi.com/coursedetail?type=9&couId=139124&courseType=4&marketType=0&jump_to=6&shopId=11733

分布式时间槽:https://wx.baixuexi.com/coursedetail?type=9&couId=139125&courseType=4&marketType=0&jump_to=6&shopId=11733

附录

规划

  • 定时任务和时间槽架构融合

实现两大目标,应用与分布式服务平台分离,时间槽和调度作业共享基础组件最大化

相关推荐

定时任务工具,《此刻我要...》软件体验

之前果核给大家介绍过一款小众但实用的软件——小说规则下载器,可以把网页里的小说章节按照规则下载到本地,非常适合喜欢阅读小说的朋友。有意思的是,软件作者当时看到果核写的体验内容后,给反推荐到他的帖子里去...

前端定时任务的神库:Node-cron,让你的项目更高效!

在前端开发中,定时任务是一个常见的需求。无论是定时刷新数据、轮询接口,还是发送提醒,都需要一个可靠且灵活的定时任务解决方案。今天,我要向大家介绍一个强大的工具——Node-cron,它不仅能解决定时任...

Shutter Pro!一款多功能定时执行任务工具

这是一款可以在电脑上定时执行多种任务的小工具,使用它可以根据时间,电量等来设定一些定时任务,像定时打开程序、打开文件,定时关机重启,以及定时弹窗提醒等都可以轻松做到。这是个即开即用的小工具,无需安装,...

深度解析 Redis 缓存击穿及解决方案

在当今互联网大厂的后端开发体系中,Redis缓存占据着极为关键的地位。其凭借高性能、丰富的数据类型以及原子性操作等显著优势,助力众多高并发系统从容应对海量用户的访问冲击,已然成为后端开发从业者不可或...

从零搭建体育比分网站完整步骤(比较好的体育比分软件)

搭建一个体育比分网站是一个涉及前端、后端、数据源、部署和维护的完整项目。以下是从零开始搭建的详细流程:一、明确项目需求1.功能需求:实时比分展示(如足球、篮球、网球等)支持多个联赛和赛事历史数据查询比...

告别复杂命令行:GoCron 图形界面让定时任务触手可及

如果你是运维人员或者经常接触一些定时任务的配置,那么你一定希望有一款图形界面来帮助你方便的轻松配置定时任务,而GoCron就是这样一款软件,让你的配置可视化。什么是GoCron从名字你就可以大概猜到,...

Java任务管理框架核心技术解析与分布式高并发实战指南

在当今数字化时代,Java任务管理框架在众多应用场景中发挥着关键作用。随着业务规模的不断扩大,面对分布式高并发的复杂环境,掌握其核心技术并进行实战显得尤为重要。Java任务管理框架的核心技术涵盖多个方...

链表和结构体实现:MCU软件定时器(链表在单片机中的应用)

在一般的嵌入式产品设计中,介于成本、功耗等,所选型的MCU基本都是资源受限的,而里面的定时器的数量更是有限。在我们软件设计中往往有多种定时需求,例如脉冲输出、按键检测、LCD切屏延时等等,我们不可能...

SpringBoot定时任务(springboot定时任务每小时执行一次)

前言在我们开发中,经常碰到在某个时间点去执行某些操作,而我们不能人为的干预执行,这个时候就需要我们使用定时任务去完成该任务,下面我们来介绍下载springBoot中定时任务实现的方式。定时任务实现方式...

定时任务新玩法!systemd timer 完整实战详解

原文链接:「链接」Hello,大家好啊!今天给大家带来一篇使用systemdtimer实现定时任务调度的详细实战文章。相比传统的crontab,systemdtimer更加现代化、结构清晰...

Celery与Django:打造高效DevOps的定时任务与异步处理神器

本文详细介绍了Celery这一强大的异步任务队列系统,以及如何在Django框架中应用它来实现定时任务和异步处理,从而提高运维开发(DevOps)的效率和应用性能。下面我们先认识一下Cele...

订单超时自动取消的7种方案,我用这种!

前言在电商、外卖、票务等系统中,订单超时未支付自动取消是一个常见的需求。这个功能乍一看很简单,甚至很多初学者会觉得:"不就是加个定时器么?"但真到了实际工作中,细节的复杂程度往往会超...

裸机下多任务框架设计与实现(gd32裸机配置lwip 网络ping不通)

在嵌入式系统中,特别是在没有操作系统支持的裸机环境下,实现多任务执行是一个常见的挑战。本文将详细介绍一种基于定时器的多任务框架设计,通过全局时钟和状态机机制,实现任务的非阻塞调度,确保任务执行中不会出...

亿级高性能通知系统构建,小白也能拿来即用

作者介绍赵培龙,采货侠JAVA开发工程师分享概要一、服务划分二、系统设计1、首次消息发送2、重试消息发送三、稳定性的保障1、流量突增2、问题服务的资源隔离3、第三方服务的保护4、中间件的容错5、完善...

运维实战:深度拆解Systemd定时任务原理,90%的人不知道的玩法

运维实战:深度拆解Systemd定时任务原理,90%的人不知道的高效玩法一、Systemd定时任务的核心原理Systemd定时任务是Linux系统中替代传统cron的现代化解决方案,通过...

取消回复欢迎 发表评论: