原标题:爬虫系列之基于Redis分布式锁的任务调度
在分布式大批量数据采集过程中,信源的管理尤为重要。为保证同一任务在同一时间,只能被一个采集器处理,必须保证任务调度的唯一性。通常我们在进行分布式数据采集时,一般情况下都会有一个调度模块,其主要的职责就是负责采集任务的分发,同时保证任务的唯一性。
由于是分布式,涉及到多台服务器(多机),每台服务器又涉及到多个采集器(多进程),每个采集器又有可能涉及到多线程,所以,任务调度模块中的锁机制显得尤为重要。一般情况下,锁的实现方式,按照应用的实现架构,可能会有以下几种类型:
如果处理程序是单进程多线程的,在 python下,就可以使用 threading 模块的 Lock 对象来限制对共享变量的同步访问,实现线程安全。
单机多进程的情况,在 python 下,可以使用 multiprocessing 的 Lock 对象来处理。
多机多进程部署的情况,就得依赖一个第三方组件(存储锁对象)来实现一个分布式的同步锁了。
由于调度模块是多机多进程多线程的处理机制,所以符合第三种方式。
分布式锁实现方式
目前主流的分布式锁实现方式有以下几种:
基于数据库来实现,如 mysql
基于缓存来实现,如 redis
基于 zookeeper 来实现
每种实现方式各有千秋,综合考量,Redis是最为合适的选择。主要原因是:
redis 是基于内存来操作&#x