在业务中怎么使用分片广播让每个分片并行处理任务

对total 求余得到 分片序号 判断处理

如何防止任务重复执行

指的是 该任务还没有执行完成,调度中心再次推向执行器,重复执行。
可以通过高级配置中
调度过期策略中的忽略
阻塞处理策略中的 丢弃后续调度
来保证 但是并不能完全解决 还需要保证任务的幂等性

如何保证任务的幂等性

幂等性就是不管操作多少次保证结果都是一样的
解决方案:
数据库约束,唯一索引,主键
乐观锁 版本号
唯一序列号 判断是否与唯一序号相等

分布式锁

从理论上讲 前面已经保证了任务不被重复执行,但是如果机器发生故障或者弹性扩容,那么调度中心检测不到该任务已经被分配过了,就会在两个机器之间造成重复执行。
此外使用synchronized 无法保证同步,因为synchronized 只能保证同一个虚拟机中多个线程去争抢锁,ReentrantLock 一样。因此要使用分布式锁。

该锁不被虚拟机所有,单独分布式部署,由多个虚拟机所共享,这种锁称为分布式锁。
分布式锁的实现方案

  1. 基于数据库实现
    利用主键 唯一索引等,多个线程同时向数据库插入主键相同的数据 谁成功谁获取到所,多个线程同时更新相同的记录,谁更新成功谁获取到锁。
  2. 基于redis 实现分布式锁
    redis 提供了分布式锁的实现方案, SETNX redission 等
    SETNX 工作原理式 多个线程去set同一个不存在的key,只有一个线程设置成功,设置成功的线程拿到锁。
  3. 使用zookeeper
    zookeeper是一个分布式协调服务,主要解决分布式程序之间的同步问题,zookeeper的结构类似的文件目录,多线程向zookeeper创建一个子目录(节点)只有一个会创建成功,利用此特点实现分布式锁,谁创建该节点成功谁获取锁成功。

具体项目地址

https://gitee.com/jhj-coding/jhj-ultimate-project

GitHub 加速计划 / xx / xxl-job
27.16 K
10.79 K
下载
xxl-job: 是一个分布式任务调度平台,核心设计目标是开发迅速、学习简单、轻量级、易扩展。
最近提交(Master分支:3 个月前 )
e5d26ba2 - 3 个月前
977ad87b - 4 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐