xxl-job--03--分片广播 动态分片

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • xxl-job通过分片广播模式
    • 前言
    • 1.定义
        • 什么是分片广播:即xxl-job调度中心发出一次调度,==所有相关节点全部执行一次==
      • 采用分片广播调度优点
    • 2.API介绍
      • 如何获取分片信息
      • 数据分片方案
        • 用户id % totalCount = index
  • 案例
    • 示例1
    • 示例2
  • 3.总结


xxl-job通过分片广播模式

前言

xxl-job 是一个分布式任务调度平台,支持定时任务和分片任务。其中,分片任务可以将一个大任务拆分成多个小任务,分布式地执行,提高任务的执行效率和可靠性。分片任务中,有一种特殊的任务类型叫做分片广播任务,可以将一个任务广播到所有的执行器节点上执行,本质上是一种并行执行的方式。

1.定义

什么是分片广播:即xxl-job调度中心发出一次调度,所有相关节点全部执行一次
  • 采用传统轮询调度缺点:轮询调度只会调度某一台节点,也就是这100W数据都会冲击到1台节点执行,显然效率不合格。

采用分片广播调度优点

  • 优点1:发动所有节点同时执行,即100W的用户数据,均匀分配到所有节点,每个节点只需要执行部分数据即可,当然具体分片策略需要在代码逻辑中进行编写,调度中心做的只是让所有节点全部执行

  • 优点2:xxl-job会为每个注册节点分配一个index,这个index是xxl-job自行分配的,可以获取到,并且xxl-job也可以记录注册节点的总个数,总个数也可以获取到

2.API介绍

  • 在调度中心创建任务的时候,选择路由策略为:分片路由

在这里插入图片描述

如何获取分片信息

ShardingUtil.ShardingVO shardingVo = ShardingUtil.getShardingVo();
// 获取当前分片
int index = shardingVo.getIndex();
// 获取总分数量
int total = shardingVo.getTotal();

分片参数属性说明:

  • index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
  • total:总分片数,执行器集群的总机器数量;

数据分片方案

  • 通过获取注册节点总个数totalCount 与 每个节点对应的index。 我们采用【用户id % totalCount = index】的方式,
  • 即余数=1,该条数据的重置就在对应index=1的节点上执行
用户id % totalCount = index

案例

示例1

xxl-job 分片广播任务的代码示例:

@XxlJob("broadcastJob")
public void broadcastJob() {int shardCount = 10; // 分片总数int shardIndex = XxlJobHelper.getShardIndex(); // 当前分片项// 执行任务逻辑for (int i = 0; i < 100; i++) {if (i % shardCount == shardIndex) {// 当前分片项需要执行的任务逻辑System.out.println("Shard " + shardIndex + " is running: " + i);}}
}

上述示例中,使用了 xxl-job 的注解 @XxlJob 标记了一个分片广播任务。任务的名称是broadcastJob,任务的执行逻辑在 broadcastJob 方法中实现。

  1. 首先获取了分片总数和当前分片项,然后根据分片参数执行具体的任务逻辑。任务逻辑是循环输出数字,并根据分片参数判断是否需要执行。
  2. 这里使用了 xxl-job 的工具类 XxlJobHelper 来获取分片参数。getShardIndex方法用于获取当前分片项,getShardTotal 方法用于获取分片总数。在任务执行时,xxl-job会自动传入分片参数,无需手动设置。

示例2

广播分片处理16个数据库,每个库有32 张表

@XxlJob("broadcastJob")
public void broadcastJob() {int shardCount = 24; // 分片总数int shardIndex = XxlJobHelper.getShardIndex(); // 当前分片项// 数据库列表String[] databases = {"db1", "db2", "db3", "db4", "db5", "db6", "db7", "db8", "db9", "db10", "db11", "db12", "db13", "db14", "db15", "db16"};// 处理每个数据库for (String database : databases) {// 表列表String[] tables = {"table1", "table2", "table3", "table4", "table5", "table6", "table7", "table8", "table9", "table10", "table11", "table12", "table13", "table14", "table15", "table16", "table17", "table18", "table19", "table20", "table21", "table22", "table23", "table24", "table25", "table26", "table27", "table28", "table29", "table30", "table31", "table32"};// 处理每张表for (String table : tables) {if ((shardIndex + table.hashCode()) % shardCount == shardIndex) {// 当前分片项需要处理的表System.out.println("Shard " + shardIndex + " is processing database " + database + ", table " + table);// 执行具体的任务逻辑,例如从数据库中读取数据并进行处理// ...}}}
}

示例中,使用了 xxl-job 的注解 @XxlJob 标记了一个分片广播任务。任务的名称是 broadcastJob,任务的执行逻辑在 broadcastJob 方法中实现。首先获取了分片总数和当前分片项,然后根据分片参数处理每个数据库中的每张表。

  • 在本例中,任务逻辑是输出需要处理的表的信息,并执行具体的任务逻辑,例如从数据库中读取数据并进行处理。这里使用了 hashCode方法将表名转换为整数,然后根据分片参数判断是否需要处理。这种方式可以保证每张表的处理任务分布均匀,不会因为表名的特殊性导致某些分片项的负载过大

3.总结

分片广播是 xxl-job 的一种任务类型,适用于一些需要并行执行的任务场景。在生产环境中,分片广播通常用于以下场景:

  • 数据处理任务:例如对大量数据进行清洗、分析、转换等操作,可以将任务拆分成多个小任务,分布式地执行,提高任务的执行效率和可靠性。
  • 分布式计算任务:例如对大规模数据进行机器学习、深度学习等计算,可以将计算任务拆分成多个小任务,分布式地执行,加速计算过程。
  • 并发请求任务:例如对多个服务进行并发请求,可以将请求拆分成多个小请求,分布式地执行,提高请求的并发处理能力。分片广播适用于需要将一个任务拆分成多个小任务,分布式地执行的场景,可以提高任务的执行效率和可靠性,同时降低单个节点的负载压力。

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

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

相关文章

基于 ESP-AT 固件从外部服务器获取文件,使用分段续传的方式

**可使用 ATHTTPCGET 指令获取 HTTP\HTTPS 的资源&#xff0c;将返回资源的 Size 和 Data ** AT 指令序列如下&#xff1a; ATRESTOREATCWMODE1 //设置 WiFi Station 模式ATCWJAP"cc2.4","12345678" //连接 WiFi ATHTTPCHEAD…

JAVA全球美业新风尚国际版同城美容美发到店上门一体化服务系统小程序源码

全球美业新风尚&#xff0c;美丽触手可及&#xff01;✨ &#x1f30d; 开篇&#xff1a;引领国际美业新潮流 在这个追求个性与美丽的时代&#xff0c;美容美发已不再是简单的日常护理&#xff0c;它成为了我们展现自我、追求品质生活的一种方式。而“全球美业新风尚国际版同…

qt 图形视图框架 事件处理

Qt 的图形视图框架&#xff08;Graphics View Framework&#xff09;提供了一套丰富的类来管理大量的自定义 2D 图形项&#xff08;QGraphicsItem&#xff09;&#xff0c;以及这些图形项之间的交互和事件处理。在这个框架中&#xff0c;事件处理是一个关键部分&#xff0c;它允…

如意控物联网项目-ML307R模组软件及硬件调试环境搭建

软件及硬件调试环境搭建 1、 软件环境搭建及编译 a) 打开官方SDK&#xff0c;内涵APP-DEMO&#xff0c;通过vscode打开程序&#xff0c; 软件程序编写及编译参考下边说明文档链接 OneMO线上服务平台 编译需预安装python3.7以上版本&#xff0c;安装完python后&#xff0c;打开…

微信小程序使用scroll-view 加上enable-flex之后高度变得特别长

横向滚动给scroll-view标签加上了display:flex的样式后高度变得很长。 可以在设置align-items: flex-start;可解决这个问题。 或者给scroll-view下的标签加上height: fit-content;

普密斯在线图像测量仪:为质量把关助力

质量是企业的生命线&#xff0c;普密斯在线图像测量仪是质量把关的得力助手。 在产品生产过程中&#xff0c;它持续不断地对产品进行测量监控。一旦发现尺寸偏差超出允许范围&#xff0c;就会及时发出警报。 在塑料制品生产中&#xff0c;它可以确保每个塑料制品的厚度、长度等…

Altium Designer板框提取工具

这个工具用于提取Altium Designer的PCB文档的边框&#xff0c;支持输出为PCBDOC、SVG、AI、VSDX、PDF、DWG、DXF、HTML这几种矢量格式的图形文件&#xff0c;JPG、PNG、BMP、GIF、EMF这几种非矢量格式的图像文件&#xff0c;CSV和TXT格式的点阵文件。可以将PCB的廓落提取出来复…

【最新发布】Win10 22H2 19045.4957 正式版免费下载!

今日系统之家小编给大家分享2024年9月第二次更新的Windows10 22H2正式版系统&#xff0c;该版本系统基于最新Windows10 22H2 19045.4957 64位专业版进行离线制作&#xff0c;安全无毒&#xff0c;修复了使用某些环绕声技术时某些媒体的播放可能会停止等多项问题&#xff0c;系统…

pyQt 退出报:进程已结束,退出代码为 -1073740791 (0xC0000409)

摘要 我在调试pyQT的时候发现结束线程后会出现&#xff0c;进程已结束&#xff0c;退出代码为 -1073740791 (0xC0000409)&#xff0c;这个错误&#xff0c;排查了一星期才发现问题在哪里&#xff0c;特此记录 解决方案 进程已结束&#xff0c;退出代码为 -1073740791 (0xC00…

探索 DaPy:Python 中的 AI 数据处理新贵

文章目录 探索 DaPy&#xff1a;Python 中的 AI 数据处理新贵背景介绍DaPy 是什么&#xff1f;如何安装 DaPy&#xff1f;DaPy 的简单函数使用方法加载数据数据筛选数据聚合数据可视化自定义函数 DaPy 在实际场景中的应用数据预处理数据分析数据处理与集成 常见 Bug 及解决方案…

【JavaEE“多线程进阶”】——各种“锁”大总结

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c; 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;乐观锁和悲观锁 1&#xff1a;乐观锁 2&#xff1a;悲观锁 3&#xff1a;总结 二&am…

【工具分享】BarRax勒索病毒解密工具

前言 BarRax勒索软件首次出现于2017年&#xff0c;迅速在全球范围内扩散&#xff0c;主要针对Windows操作系统用户进行攻击。它通过使用AES-256和RSA-2048加密算法对受害者的文件进行加密&#xff0c;使文件变得不可访问。BarRax通常通过恶意电子邮件附件或伪装的软件下载进行…

【LeetCode】每日一题 2024_9_29 买票需要的时间(模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 昨天的每日一题是线段树二分&#xff0c;题目难度远超我的能力范围&#xff0c;所以更不出来了 题目&#xff1a;买票需要的时间 代码与解题思路 func timeRequiredToBuy(tickets []int, k int) (sum in…

VisualGLM-6B——原理与部署

VisualGLM-6B技术原理介绍 VisualGLM-6B 是一种多模态预训练模型&#xff0c;它旨在将视觉和语言模型进行结合&#xff0c;使得语言模型能够理解图像信息并与文本对话无缝结合。为了更好地理解 VisualGLM-6B 的内容&#xff0c;我们可以从以下几个方面来解析它的原理、结构、训…

Mac小白必看,快速帮助新手入门的五款软件

刚转MacOS的小白是不是还不知道如何选择软件&#xff0c;MacOS与win有着很大的区别&#xff0c;对于新手来说&#xff0c;想要快速上手Mac的使用&#xff0c;少不了一款好的软件工具&#xff0c;今天给大家推荐五款适合刚转Mac的小白使用的好用工具。 1. iShot&#xff1a;截图…

IPD变革中,数据治理是关键

IPD变革中&#xff0c;数据治理是关键 2024-09-29 14:41汉捷咨询 华为轮值董事长徐直军先生在回顾IPD变革时&#xff0c;提到&#xff1a;“华为IPD变革前期&#xff0c;对数据的关注不够&#xff0c;没有系统梳理产品的信息架构和数据标准&#xff0c;也没有对业务流中的数据…

国内旅游:现状与未来趋势分析

在当今社会快速发展的背景下&#xff0c;国内旅游更是呈现出蓬勃的发展态势。中国&#xff0c;这片拥有悠久历史、灿烂文化和壮丽山河的广袤土地&#xff0c;为国内旅游的兴起与发展提供了得天独厚的条件。 本报告将借助 DataEase 强大的数据可视化分析能力&#xff0c;深入剖…

数据库入门不再难:克服学习障碍的实用技巧与演示

文章目录 摘要引言常见的学习困难及解决方法理解抽象的数据库概念SQL语句的构建与优化理解事务与并发控制 实用的学习技巧与工具推荐推荐学习资源数据库设计与实践的常用技巧 实战演练常见问题解答总结未来展望参考资料 摘要 数据库学习对于初学者来说&#xff0c;往往会面临诸…

优思学院|六西格玛黑带是什么?取得六西格玛黑带证书有何作用?

1. 六西格玛黑带是什么&#xff1f; 六西格玛黑带&#xff08;Black Belt&#xff09;是六西格玛项目中的高级专业人员&#xff0c;负责领导跨职能团队&#xff0c;使用统计分析工具和方法&#xff0c;深入分析业务流程中的问题并制定改进方案。黑带要具备扎实的六西格玛知识&…

HTTP协议代码实现

目录 一. 服务端模块实现 二. HTTP协议模块实现 2.1 HTTP请求部分&#xff1a; 2.2 HTTP响应部分&#xff1a; 2.3 工厂类部分&#xff1a; 2.4 HTTP服务端部分&#xff1a; 2.5 回头处理业务处理函数&#xff1a; 三. 调用服务端模块实现 四. 具体效…