分布式环境下定时任务重复执行问题解决方案
现在为了提高服务的响应时间,避免单点故障,一般项目都会做集群部署,最少两个节点。集群部署的时候就会暴露出一些单节点下不会遇到的问题,比如session问题、缓存不一致问题等。还有一种情况是,定时任务重复执行的问题。
对于分布式环境下定时任务重复执行问题,常见的几种解决方案有下面这几种。
一、分布式锁
分布式锁是最常用的一种方式,需要对定时逻辑加上一些判断,防止在同一时间重复执行。分布式锁常见的有三种:数据库唯一索引、redis分布式锁、zookeeper分布式锁。
数据库唯一索引,比较好理解:就是在定时表里面加一个添加了唯一索引的字段,一个任务执行前先更新锁定这个字段,然后再执行定时任务,执行完成后,更新释放这个字段。
redis分布式锁,是通过setnx来实现的,和数据的过程差不多:更新前先查询有没有,没有的话锁定后执行定时任务,执行完成后释放锁。优点是内存数据库比传统数据库更快,不需要改数据库,代码改动相对较小,推荐。
二、定时任务单节点执行
单节点执行就是把项目中的定时任务逻辑都单独拎出来作为一个单独的微服务来执行,并且不做集群,单节点执行。这样就避免了集群重复执行的问题,优点是简单直接,不是很重要的定时任务可以选择此方法。缺点很明显:单节点故障。
三、Quartz集群
如果是使用的quartz框架的话,也可以考虑quartz本身提供的集群功能,搭建集群环境下的定时任务。缺点,quartz的集群实现比较复杂,需要额外的11张配置表。但是如果场景需要或者想做个公司内部通用的服务的话,可以考虑搭建一个定时任务集群的话也是可以考虑的,可以单出拎出来作为一个定时任务中心来使用。
分布式环境下定时任务重复执行问题解决方案相关推荐
- 多服务环境下定时任务重复执行问题解决方案
当一个服务部署在多台服务器上时,定时任务可能出现多次执行的情况,就是每个服务上执行一次.有以下两种思路,一是固定死只有某服务器执行定时任务,二是随机暂停几秒,某一服务执行了,其他就不再执行. 1.固定 ...
- 集群服务器定时任务重复执行的解决方案
集群服务器定时任务重复执行的解决方案 服务器采用了负载均衡,有两台服务器,部署的代码一样,所以里面的定时任务在某一时间会被同时执行,这就导致了很多其他意外的发生,想要解决的问题基本就三个:单点执行,故 ...
- java 支付重复问题_Airbnb支付系统如何在分布式环境下避免重复打款
原文链接:https://medium.com/airbnb-engineering/avoiding-double-payments-in-a-distributed-payments-system ...
- 集群部署中解决定时任务重复执行的问题-redis分布式锁应用
背景描述 有小伙伴私信我,关于存在定时任务的项目在集群环境下部署如何解决重复执行的问题,PS:定时任务没有单独拆分. 概述:之前的项目都是单机器部署,所以定时任务不会重复消费,只会执行一次.而在集群环 ...
- 基于Redis实现分布式锁,避免重复执行定时任务
Spring提供了定时任务的功能,但是在多个实例的集群中,会出现定时任务重复执行多次的情况. 使用Qutaz框架自带的分布式定时任务可以很好的解决这个问题,但是讲道理功能有些过于强大,对于需求不高,乃 ...
- 分布式环境下,互斥性与幂等性问题,分析与解决思路
欢迎关注方志朋的博客,回复"666"获面试宝典 随着互联网信息技术的飞速发展,数据量不断增大,业务逻辑也日趋复杂,对系统的高并发访问.海量数据处理的场景也越来越多.如何用较低成本实 ...
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- SpringMVC的定时任务重复执行两次的问题
我们知道springmvc项目进项包扫描的时候要避免Controller和Service被重复扫描导致创建两个实例.办法就是在applicationContext.xml中配置 <context ...
- 分布式精华问答:分布式环境下如何保持数据一致性的?| 技术头条
分布式开发的时代实际上早已悄悄地成为了时代的主流,今天,我们就来看看关于分布式的精华问答吧! 1 Q:分布式系统中主要是用到了服务化,消息中间件,数据库拆分,便于横向扩展和维护,但分布式系统中的拆分的 ...
最新文章
- android读取大图片并缓存
- 拖尾因子大怎么调整_乳房松弛下垂怎么改善?怎么快速调整乳房松弛下垂?
- 掘金专访 - 收藏集 - 掘金
- leetcode538 把二叉搜索树转换成累加树
- 如何打印出给定尺寸的方格_打印给定号码的表格| 8086微处理器
- java 保存 设置_java – 保存设置的实现
- 位图缩放代码,如何伸拉图片,图片处理
- iOS 检测内存泄漏Analyze的一些解决办法
- android scrollview listview显示不全
- python实现无刻度3升水和5升水准确得到4升水的代码步骤
- hdu5820 Lights
- WebSocket实战之一
- 图像拼接和图像融合技术(基于Opencv)
- 学生宿舍管理系统毕业设计(python)
- 第十周 项目二 小刚破译加密密码
- 在Excel里面,单元格里输入公式后只显示公式本身,不显示结果,怎么办
- 红点奖设计概念奖设计之星奖
- 知识图谱入门学习笔记(一)-概念
- 模电学习第三天--三极管梳理
- ubuntu16.04下安装新版QQ