[Java 探索者之路] 一个大厂都在用的分布式任务调度平台

news2024/10/1 3:23:07

分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统,在此环境下,各个任务可以在独立的节点上运行。它有助于提升资源利用率,增强系统扩展性以及提高系统对错误的容忍度。


文章目录

    • 1. 分布式任务调度平台
      • 1. 基本概念
        • 1.1 任务调度
        • 1.2 分布式计算
      • 2. 分布式任务调度平台的功能
      • 3. 分布式任务调度平台的应用场景
      • 4. 简而言之
    • 2. 什么是 xxl-job
      • 2.1 XXL-JOB的架构
    • 3. xxl-job 的简单使用
      • 1. 源码拉取
      • 2. 启动 db
      • 3. 初始化调度中心数据库
      • 4. 修改调度中心的数据库配置以及 logback 的日志地址
      • 5. 成功启动调度中心
      • 6. 打开调度中心的 web 页面
      • 7. 启动示例执行器代码
      • 8. 随便找一个任务注册
      • 9. 查看日志信息,发现执行结果失败了
      • 10. 回去看一眼源码,发现是


1. 分布式任务调度平台

1. 基本概念

1.1 任务调度

任务调度,是指在多任务的环境下,合理地分配系统资源,调度各个任务在什么时候,由哪一个处理器处理,以达到满足用户需求、提高系统资源利用率、提高系统吞吐量的目的。

1.2 分布式计算

分布式计算是指多个计算机系统之间通过网络连接,共享系统资源来实现高性能计算的技术。这种计算技术可以应对大数据量、高并发量、高I/O的场景。

2. 分布式任务调度平台的功能

分布式任务调度平台主要用于管理和调度任务,其主要功能包括:

  • 任务调度:按照预设的规则(如:时间点、时间间隔等)触发任务的执行。
  • 负载均衡:根据系统的负载情况,自动调整任务在各节点间的分配,均衡各节点的负载。
  • 容错处理:当某个节点出现故障时,能自动将该节点上的任务转移到其他节点上执行。
  • 任务监控:能够实时监控任务的运行状况,如运行时间、运行结果等。

3. 分布式任务调度平台的应用场景

以下是一些常见的应用场景:

  • 定时任务:在特定时间执行某项任务,例如每天晚上12点备份数据库。
  • 周期性任务:周期性地执行某项任务,例如每隔一小时统计网站的访问量。
  • 流量控制:在系统流量大量增长时,分布式任务调度平台可以按照预定的规则,调度更多的资源来处理任务,以应对流量峰值。

总的来说,分布式任务调度平台是大型分布式系统不可或缺的一部分,是分布式环境中任务管理的关键组件。

4. 简而言之

分布式调度平台,就是有个老大决定一个定时任务在多台机器中的哪一台机器执行

2. 什么是 xxl-job

XXL-JOB是一个全功能、高扩展性的开源分布式任务调度框架,也是一个优秀的定时任务调度平台,给开发者带来便捷的定时任务管理和控制能力。它的核心目标是开发迅速、学习简单、轻量级、易扩展。

2.1 XXL-JOB的架构

XXL-JOB的系统架构设计清晰明了,可以粗略的分为三层:

  • 调度中心:调度中心是XXL-JOB的核心,负责触发调度操作,同时提供操作界面。
  • 执行器:执行器是任务运行的载体,负责接收调度中心的触发信号并执行相应的任务。
  • 调度数据库:用于记录调度信息,如任务信息、调度日志等。

值得一提的是,XXL-JOB支持自定义任务处理逻辑,得益于这一点,它能用于各种场景,例如常见的数据同步、数据清洗等。
image.png

3. xxl-job 的简单使用

进入(xxl-job 的官网) ,如果想了解下的可以了解下,不想了解的就直接开始吧。

因为是开源项目,所以我接下来也是直接拉取的源码进行实验。如果是线上环境建议使用容器进行集群部署。

1. 源码拉取

  1. 打开 github 官网,选择 realease 版本,因为 master 可能存在不稳定代码,但是实验嘛,其实也无所谓。https://github.com/xuxueli/xxl-job/
  2. 获取到下载链接进行下载

image.png

  1. 拉取到的项目结构大概是以下这样,其中 docker目录是我 docker-compose的数据库相关文件,方便测试。

image.png
以下是我的 docker-compose相关文件信息
image.png

2. 启动 db

进入到指定目录 docker 目录, 一键启动目录
image.png

3. 初始化调度中心数据库

复制源码文件中的 db 文件到数据库中执行初始化。
image.png
我这里就直接到 http://127.0.0.1:3307phpmyadmin 进行数据库操作了。
执行前后
image.png

4. 修改调度中心的数据库配置以及 logback 的日志地址

image.png
image.png

5. 成功启动调度中心

image.png

6. 打开调度中心的 web 页面

浏览器打开 http://127.0.0.1:8080/xxl-job-admin/, 输入初始账号 admin 密码 123456
image.png
登录成功
image.png

7. 启动示例执行器代码

image.png
可以看到启动了两个服务分别在 9998的无框架服务以及 9999spring 项目。回到调度中心的 web 页面,你会发现两个执行器已经自动注册到了调度中心。
image.png
在数据库中的表现为
image.png
此时,假如我们去修改其中一个调度器的名称,重新启动会怎样呢?
image.png
可以看到只剩 9999 的服务
image.png
这时候我们需要手动把新的执行器添加上。
image.png
刷新可以看到新的执行器自动注册
image.png

8. 随便找一个任务注册

image.png
image.png
启动任务
image.png

9. 查看日志信息,发现执行结果失败了

image.png

10. 回去看一眼源码,发现是

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1484979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

snakeyaml1.x升级2.x导致项目启动报错

snakeyaml1.x升级2.x,修复漏洞 1.背景 在工作中,经常会有漏洞扫描,有一次看到了snakeyaml的漏洞: 项目框架:springBoot 版本:2.2.6.RELEASE snakeyaml 中央仓库信息 snakeyaml中央仓库地址:https://m…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介绍 Stable Diffusion 作为当下最流行的开源 AI 图像生成模型在游戏行业有着广泛的应用实践,无论是 ToC 面向玩家的游戏社区场景,还是 ToB 面向游戏工作室的美术制作场景,都可以发挥很大的价值,如何更好地使用 Stable Dif…

程序项目打包发布方法,采用InstallShield软件

重点: 1.程序项目做出来了,需要打包发布给用户。如何打包是关键。 2.采用InstallShield软件进行发布。 步骤一:创建一个依赖三方库配置环境的bat文件的项目。 (主要测试三方库打包 和如果有bat文件,需要先创建环境&…

YOLOv9独家原创改进|使用DySample超级轻量的动态上采样算子

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、DySample论文摘要 尽管最近的基于内核的动态上采样器如CARAFE、FADE和SAPA取得了令人印象深刻的性能提升,但它们引入了大量的工作量&…

Canvas笔记03:Canvas元素功能、属性、获取、原理等一文讲透

hello,我是贝格前端工场,最近在学习canvas,分享一些canvas的一些知识点笔记,本期分享canvas元素的知识,欢迎老铁们一同学习,欢迎关注,如有前端项目可以私信贝格。 Canvas元素是HTML5中的一个重…

加密隧道技术

在现在的互联网上传输数据,首要考虑的就是安全。这关乎到你的隐私,个人信息,财产安全等等重大问题。如果你的程序本身传输的信息没有加密,也可以通过其他辅助方式让你的通信加密。一些工具的就是为了解决这样的场景的,…

【二分】第k个缺失的数

第K个缺失的数 链接 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/kth-missing-positive-number/ 题目 题解 二段…

【GPU驱动开发】-mesa简介

前言 不必害怕未知,无需恐惧犯错,做一个Creator! 一、mesa介绍 Mesa 是一个开源的3D图形库,它实现了多种图形API,包括 OpenGL、Vulkan 和 OpenCL。Mesa 的目标是提供一个开源、跨平台的图形库,使得开发者…

Qt/自定义控件的封装

新建文件,选择Qt设计师界面类 创建空界面 这是自己控件封装的文件,双击跳转到设计界面进行设计 跳转到其他的ui界面,创建一个widget 右键,选择提升为 在提升的类名称输入刚刚创建的类名,添加后选择提升,勾选…

WINDOWS内存管理 - 返回状态值

DDK大部分函数的返回值类型是NTSTATUS类型。查看DDK.h文件,可以看到 typedef LONG NTSTATUS; NTSTATUS的定义和LONG等价。为了函数的形式统一,所有函数的返回值都是NTSTATUS类型。NTSTATUS就是一个32位的整数,其每位有着不同的含义&#xf…

FCIS 2023网络安全创新大会:洞察前沿技术,探索安全新境界(附大会核心PPT下载)

随着信息技术的飞速发展,网络安全问题日益凸显,成为全球关注的焦点。作为网络安全领域的重要盛会,FCIS 2023网络安全创新大会如期而至,汇聚了全球网络安全领域的顶尖专家、学者、企业家和政策制定者,共同探讨网络安全的…

并查集学习: leetcode 2368. 受限条件下可到达节点的数目

现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 ,共有 n - 1 条边。 给你一个二维整数数组 edges ,长度为 n - 1 ,其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restricted 表示…

LeetCode_Java_动态规划系列(2)(题目+思路+代码)

131.分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1: 输入:s "aab" 输出:[["a&qu…

Redis的高性能之道

前言:做码农这么多年,我也读过很多开源软件或者框架的源码,在我看来,Redis是我看过写得最优美、最像一件艺术品的软件,正如Redis之父自己说的那样,他宁愿以一个糟糕的艺术家身份而不是一名好程序员被别人记…

【双指针】删除有序数组中重复元素,双指针原地修改数组

删除有序数组中重复元素 链接 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-duplicates-from-sorted-array/…

Programming Abstractions in C阅读笔记:p308-p311

《Programming Abstractions in C》学习第76天&#xff0c;p308-p311总结&#xff0c;总计4页。 一、技术总结 1.快速排序伪代码 #include <stdbool.h>static int Partition(int array[], int n);/** Implementation notes: SortIntegerArray* ----------------------…

实践航拍小目标检测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

关于无人机相关的场景在我们之前的博文也有一些比较早期的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测&#xff0c;基于yolov…

Django后端开发——中间件

文章目录 参考资料中间件注册中间件settings.pymiddleware/mymiddleware.pymysite3/views.pymysite3/urls.py 练习 参考资料 B站网课&#xff1a;点击蓝色字体跳转 或复制链接至浏览器&#xff1a;https://www.bilibili.com/video/BV1vK4y1o7jH?p39&vd_source597e21cf34f…

嵌入式Linux中GPIO设置的一些基本指令和步骤

一、GPIO的介绍 嵌入式Linux中的GPIO&#xff08;General Purpose Input/Output&#xff0c;通用输入/输出&#xff09;是一种常用的接口&#xff0c;允许开发者直接控制硬件设备的某些引脚&#xff0c;进行诸如LED控制、传感器读取、设备状态监测等任务。 二、设置步骤和示例…

08 yum和git

什么是软件包 安装软件&#xff0c;一个通常的办法就是下载程序的源代码进行编译。这种太麻烦&#xff0c;于是一些人把常用软件编译好&#xff0c;做成软件包放在服务器上&#xff0c;通过包管理器可以很方便的得到这个软件包安装&#xff0c;就好比手机上的应用商店 yum&am…