celery 是由python开发的 ,简单、灵活、可靠的分布式任务处理框架,celery本身不提供队列服务,对接用Redis或RabbitMQ实现队列服务
celery 的5个角色-
Task:就是任务,有异步任务和定时任务
-
Broker:中间人,接收生产者发来的消息即Task,将任务存入队列。任务的消费者是Worker。
-
Worker:执行任务的单元,它实时监控消息队列,如果有任务就获取任务并执行它。
-
Beat:定时任务调度器,根据配置定时将任务发送给Broker。
-
Backend
celery分布式任务处理模块
任务处理
-
获取监控项
-
获取数据库日志
-
对比数据库日志和监控项阈值,如果超出范围就发邮件告警
部署celery
#安装celery pip install celery #python 里连接redis的模块库 pip install redis #以下三个文件部署完成后启动worker [root@nginx-kafka01 flask_log]#celery -A app.celery_app worker --loglevel=INFO -n node1#启动beat [root@nginx-kafka01 flask_log]# celery -A celery_app beat --loglevel=INFO
config.py
from celery.schedules import crontab
#配置消息中间件的地址
BROKER_URL = "redis://192.168.174.134:6379/1"
#配置结果存放地址
CELERY_RESULT_BACKEND = "redis://192.168.174.134:6379/2"
#启动celery时,导入任务
CELERY_IMPORTS = {
'celery_tasks'
}
#时区
CELERY_TIMEZONE = "Asia/Shanghai"
#设置定时任务
CELERYBEAT_SCHEDULE = {
'log-every-minute':{
'task' : 'celery_tasks.scheduled_task',
'schedule' : crontab(minute='*/1')
}
}
app.py
from celery import Celery
#实例化celery对象,传入一个名字即可
celery_app = Celery('celery_app')
celery_app.config_from_object('config')
celery_tasks.py
from app import celery_app
@celery_app.task
def scheduled_task(*args,**kwargs):
print("this is schedule task")
redis
redis是一种键值存储的数据库(0-15)。
部署redis
##############安装redis yum install epel-release -y yum install redis -y #修改监听ip vim /etc/redis.conf bind 0.0.0.0 启动默认绑定127.0.0.1,外界访问不进来 #启动redis [root@nginx-kafka01 ~]# systemctl start redis [root@nginx-kafka03 ~]# redis-cli 127.0.0.1:6379> select 1 #字符串赋值 127.0.0.1:6379[3]> set a 123 OK #字符串取值 127.0.0.1:6379[3]> get a "123" #列表存值 127.0.0.1:6379[3]> LPUSH sanchuang cali (integer) 1 127.0.0.1:6379[3]> LPUSH sanchuang 1 (integer) 2 127.0.0.1:6379[3]> LPUSH sanchuang nnn (integer) 3 127.0.0.1:6379[3]> LPUSH sanchuang yyy (integer) 4 #先进先出,左右 127.0.0.1:6379[3]> lrange sanchuang 0 10 1) "yyy" 2) "nnn" 3) "1" 4) "cali" #删除最后一个,返回被删除的值 127.0.0.1:6379[3]> rpop sanchuang "cali" 127.0.0.1:6379[3]> lrange sanchuang 0 10 1) "yyy" 2) "nnn" 3) "1"
memcached vs redis
memcached只是在内存中运行的redis可以固化,可以把数据写到磁盘里面去,redis是一种键值存储的数据库。
redis开启持久化的两种模式:
-
AOF 全持久化模式 每一次操作都会同步到磁盘(每一次操作的日志,如果丢失可以根据日志恢复)
-
RDB 半持久化模式 定时的将内存内容快照写入磁盘(每次写入都会覆盖之前的快照--备份)



