2 分布式Job如何解决幂等性

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

    报警邮箱
    状态监控