首页 > 其他分享 >分布式任务调度系统设计(01)--分布式锁

分布式任务调度系统设计(01)--分布式锁

时间:2023-11-06 18:33:56浏览次数:28  
标签:info 01 log 订单 任务 定时 任务调度 分布式

2 分布式锁

Quartz集群模式可水平扩展,也可分布式调度,但需业务方在数据库中添加对应表,有强侵入性。

于是有人探索分布式锁模式。

2.1 超时关单

通常做定时任务每2min检查前半小时的订单,将待支付订单列表查出,然后对订单中的商品进行库存的恢复,然后将该订单设置为无效。

Spring Schedule定时任务。

@Scheduled(cron = "0 */2 * * * ? ")
public void doTask() {
   log.info("定时任务启动");
   //执行关闭订单的操作
   orderService.closeExpireUnpayOrders();
   log.info("定时任务结束");
 }

单服务器运行正常,考虑到高可用,业务量激增,架构演进成集群模式,在同一时刻有多个服务执行一个定时任务,可能导致业务紊乱。

2.2 解决方案

任务执行时,Redis分布式锁:

Explain@Scheduled(cron = "0 */2 * * * ? ")
public void doTask() {
    log.info("定时任务启动");
    String lockName = "closeExpireUnpayOrdersLock";
    RedisLock redisLock = redisClient.getLock(lockName);
    // 加锁,最多等3s,上锁后300s自动解锁
    boolean locked = redisLock.tryLock(3, 300, TimeUnit.SECONDS);
    if(!locked){
        log.info("没有获得分布式锁:{}" , lockName);
        return;
    }
    try{
       //执行关闭订单的操作
       orderService.closeExpireUnpayOrders();
    } finally {
       redisLock.unlock();
    }
    log.info("定时任务结束");
}

1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.

Redis读写性能极好,分布式锁也比Quartz数据库行级锁更轻量级。

小型项目定时任务框架(Quartz/Spring Schedule)和 分布式锁(redis/zookeeper)不错。

2.3 问题

  • 定时任务在分布式场景下有空跑情况,而且任务也无法做到分片
  • 想手工触发任务,须添加额外代码

标签:info,01,log,订单,任务,定时,任务调度,分布式
From: https://blog.51cto.com/JavaEdge/8215567

相关文章

  • HttpClient报错 org.apache.http.NoHttpResponseException : 10.1.1.0:13001 failed t
    一、问题描述使用HttpClient并发调用http接口,并发量稍微大一点就会报错org.apache.http.NoHttpResponseException:10.1.1.0:13001failedtorespond 二、排查过程最开始怀疑是服务端连接过多,拒绝请求了,监控发现服务端并没有多少连接找运维搭建了一个新环(只有我们请求服务端),......
  • [NOI2016] 区间
    [NOI2016]区间题目描述在数轴上有$n$个闭区间从$1$至$n$编号,第$i$个闭区间为$[l_i,r_i]$。现在要从中选出$m$个区间,使得这$m$个区间共同包含至少一个位置。换句话说,就是使得存在一个$x$,使得对于每一个被选中的区间$[l_i,r_i]$,都有$l_i\leqx\leqr_i$。对......
  • 01神经网络
    主要还是有了初步的了解吧。1.ReLU函数(线性整流函数)前面为0后面为直线2.神经网络堆叠一些简单的神经元,可以获得一个稍微大的神经网络。 输入特征值x,根据输入参数中间的小圈叫做神经网络中的隐藏神经元。给定足够多的训练实例x,y,神经网络就可以很好拟合出函数建立x与y的关......
  • VS 2017需要登陆
      解决方法:以管理员身份运行VS2017  检查更新的许可证,创建账号 用QQ邮箱就行,然后就可以使用了。因为我的是社区版。......
  • [Leetcode] 0118. 杨辉三角
    118.杨辉三角题目描述给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例1:输入:numRows=5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入:numRows=1输出:[[1]] 提......
  • 01.Git环境配置
    1.Git简介Git是目前世界上最先进的分布式版本控制系统。Git优点:适合分布式开发,强调个体。公共服务器压力和数据量都不会太大。速度快、灵活。任意两个开发者之间可以很容易的解决冲突。离线工作。2.Git安装官网下载地址:https://git-scm.com/downloadWindows:点击下载......
  • 01_二叉树的递归遍历
    二叉树的递归遍历递归算法的三要素确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件:写完了递归算法,运行的时候,经常会遇到栈溢出的错误,就是没写终......
  • Redis分布式缓存、AOF与RDB详解
    分布式缓存单点Redis的问题1.数据丢失问题Redis是内存存储,服务重启可能会丢失数据2.并发能力问题单节点Redis并发能力虽然不错,但也无法满足如618这样的高并发场景3.故障恢复问题如果Redis宕机,则服务不可用,需要一种自动的故障恢复手段4.存储能力问题Redis基于内存,单节点能存储的数据......
  • 【刷题笔记】101. Symmetric Tree
    题目Givenabinarytree,checkwhetheritisamirrorofitself(ie,symmetricarounditscenter).Forexample,thisbinarytree[1,2,2,3,4,4,3]issymmetric:1/\22/\/\3443Butthefollowing[1,2,2,null,3,null,3]isnot:1......
  • C++_01_初步认识C++语言 - 重写版
    一、认识“C++语言”一、首先聊聊什么是语言?语言是一套具有“语法”、“词法”规律的系统,是思维的工具。计算程序设计语言是计算机可以识别的语言,用于描述解决问题的方法,供计算机阅读和执行。语言由低级到高级依次分为4类:1、机器语言     (由......