分布式定时任务需要考虑的问题

分布式定时任务问题

定时任务的多机分布会产生几个需要解决的问题:

  • 多台机器的时间一致性问题

如果多台机器的时区不一致,那锁基本上无从谈起了。 或者时区一致,但可能服务器时间相差几秒钟,那么也有可能导致锁丢失。

  • 锁未释放问题(服务器宕机怎么办)

那么如果serverA在加锁的过程中,出现宕机怎么办,是否会一直处于加锁状态

  • 命名空间问题

每个定时任务应该有不同的锁命名,防止出现同名锁。

  • 多个定时任务同时并发执行sendmail,key如何保证唯一?

可以使用实例的ip+端口做唯一key,这样能够保证多个实例的唯一性

  • 两台服务器时间差超过30s怎么办?

通过中间媒介来确定时间。或者在服务器中杜绝这个问题

  • 最重要的问题还是在于,两台服务器的时间有可能有细微差别,他们本身就有可能不是并发的
    这一点在分布式定时任务领域里很重要。

仅仅是加了一个同步锁是远远不够的

解决方案可以是根据业务的不同来设置不同的锁超时时间,例如某个业务定时任务,每天只可以执行一次,那么将超时时间设置为1个小时最保险,如果某个定时任务每分钟执行,执行操作时间大约20s,那你可以将超时时间设置成30s。

另一个解决方案是设置一个统一的、中心级别的定时任务,任务负责派发消息,通过消息队列的方式来做定时,这里就不细表,这种方式比较适合异构、或者跨网络、跨机房级别的分布式。

posted @ 2022-04-04 16:47  生活是很好玩的  阅读(213)  评论(0编辑  收藏  举报