2 分布式Job如何解决幂等性
分类:
文章
•
2024-03-14 16:24:46
- 首先由一个现实的问题是,大多数的生产环境都是分布式或集群环境,那么这种情况下,如何保证定时任务不被重复执行?
一般的生产环境下,都会有Nginx做负载,那么在服务器集群下,就需要考虑如何解决job的幂等性问题,如图:
假设,我们在此处的两个tomcat服务器下,都部署了相同的war包。
那么就必然会面临两个服务器执行job遇到的幂等性问题。
- 解决方案:
a)使用分布式锁,zk或者redis,保证只有一台服务执行job
b)使用配置文件做一个开关 缺点发布后,需要重启.比如说在此处的两个tomcat服务器中,建立配置文件,配置文件中加入job开关
在执行job之前,先去读物开关的状态,再决定是否执行job。
这种方式的缺点很明显,已经失去了集群的意义,并且需要手动
c)数据库唯一约束,缺点效率低
比如此处的两个服务器中,每一个服务器上的job执行时,都忘数据库插入一条记录,需要保证记录id的唯一性。插入成功的时候,才可以执行job
d) 使用分布式任务调度平台XXLJOB
传统方式的缺点:
比如说某一个服务器执行job的时候,报错了,那么这个时候没有补偿机制,导致生产事故。
集群失去了意义
不支持路由策略(类似于负载)
统计问题: 比如说大公司,每天有很多的job在执行,需要统计哪些job成,那些job失败,这个就没法实现
报警邮箱
状态监控
…