技术文档

使用zookeeper让定时任务串行执行

1.1.前言

由于系统历史问题,在系统中有着许多的定时任务。小到每5分钟一次,大到每天一次。由于这种定时任务的无限增多,当达到时间的最小公倍数的时候就会许多个任务同时跑起来,这样就会让MySQL发生抖动。就会发现时不时的MySQL性能会变差。

1.2.原因

使用zookeeper让定时任务串行执行

1、可能是定时任务的SQL太复杂,这一点可以从慢SQL中看出。

2、发生这样的原因是每个定时任务并发的对数据库进行操作。

1.3.解决思路

1、排查优化定时任务的SQL

2、将并发任务改成串行任务去执行。

这边我们讨论如何让定时任务串行执行。

1.4.zookeeper的引入

要让并行的任务串行起来,这我就想到了MySQL的mutex。在对资源进行操作的时候需要对资源加上一把锁,如果有其他>

但是,我们不可能去实现或使用MySQL中的mutex,这是我们就需要使用到 “分布式锁”,这边我更喜欢将他叫做 “全局资源锁”。因此我们就需要引入zookeeper,用他来实现我们的”全局资源锁”的功能。当定时任务执行的时候都需要获取这个”全局资源锁”,当定时任务执行完之后再释放”全局资源锁”,从而让其他并发的定时任务去争抢”全局资源锁”,并运行定时任务。

1.5.kazoo的使用

kazoo>

 

1.6.zookeeper环境

这边我就不说需要如何搭建一个zookeeper集群了有需要自行去>

我这边使用的是zookeeper单机伪集群

主要配置如下

1
©2020-2024   万云SSL证书  (www.sslssl.com.cn)  万云科技   豫ICP备2020034358号-10