扫描QPS控制——celery任务分多队列运行
发包QPS控制,有两个难点。
1. redis交互流量的限制。
假设每分钟有1000条流量任务生成,每条跑20个插件,每个插件发5个数据包,每分钟约发十万请求。
那么在发包处做QPS会遇到一个问题,如果每次发包时先问一下redis
“这条流量在不在QPS限定范围内?如果在,这一秒这一分钟的QPS是否已经达到上限不能发送了?如果
没达到我就发送顺便redis这个域名当前秒发送量也+1”,
至少每分钟与redis交互十万次以上,估计一下redis的kbps约提升10M以上。
之后会发现,该redis流量过大阻塞集群,小则影响自己的业务,多则影响了别人的集群,DBA夺命报警连环call。
应对:
1)不在发包处做QPS控制,再往上游控制
2)如果该链接对应的业务没有QPS控制需求,就没必要限制也没必要交互了。
2. 睡眠
当QPS超过限制的时候,怎么做?首先一般的选择是睡眠。
当一个业务的QPS极低而待扫描的流量又极大时,
可能会导致所有节点所有worker都因为该业务的流量正在睡眠中,
像幼儿园整个年级都躺在睡眠室里一样其乐融融,
因为该业务的QPS限制都在等待中运行不动了。
应对:
1)选择少量节点让其随便睡,再在最上游流量去重处做对应规则。
2)超过QPS的流量就丢弃。
3. 最终实验的方案:
流量将通过celery发送到worker时,根据流量业务的不同,将需调控的流量发送到另外的celery任务队列中。挑选少量节点专门用来执行该队列(需qps控制)的任务。
在调用func.delay时需要根据流量区别,将流量和同一func形成的任务发送到不同的队列中(这样好看点)
面向搜索引擎编程,找到了解决方法
待续
扫描QPS控制——celery任务分多队列运行的更多相关文章
- 实现celery中出现拥挤队列时,及时发邮件通知
里面有几个常用的功能,以后值得借鉴. 如获取脚本目录,IP,获取shell返回值,发送邮件等.. 上午写完,中午测试,下午上线~~ #!/usr/bin/env python # -*- coding ...
- setTimeout(f, 0)的应用&利用Deferred实现队列运行
任务:从mongodb中导出csv数据,输出内容如下userid username usergender points points表: { "userid" : 1022, &q ...
- python celery 多work多队列
1.Celery模块调用 既然celery是一个分布式的任务调度模块,那么celery是如何和分布式挂钩呢,celery可以支持多台不通的计算机执行不同的任务或者相同的任务. 如果要说celery的分 ...
- celery retry发送的队列
celery retry时,将发送到原有的队列,并在任务中加入执行的时间,以及当前重试的次数. worker立刻读取该任务,同时记录一条[任务]到 unacked中,表示该任务在worker中还未执行 ...
- 2.openstack之mitaka搭建控制节点数据库和消息队列
一:部署mariadb数据库 控制节点(192.168.11.103): yum install mariadb mariadb-server python2-PyMySQL -y 编辑: /etc/ ...
- PAT 甲级 1056 Mice and Rice (25 分) (队列,读不懂题,读懂了一遍过)
1056 Mice and Rice (25 分) Mice and Rice is the name of a programming contest in which each program ...
- 用supervisor控制celery时的脚本
注意启停的先后顺序及判断即可. 这样,在更改task之后,要重启就方便很多啦.. #!/bin/sh supervisord_count=`ps -elf | grep celery | grep - ...
- PAT A1029 Median (25 分)——队列
Given an increasing sequence S of N integers, the median is the number at the middle position. For e ...
- PAT A1017 Queueing at Bank (25 分)——队列
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...
随机推荐
- plsql中文乱码 显示问号
输入sql语句select * from V$NLS_PARAMETERS查看字符集,查看第一行value值是否为简体中文 解决方案: 新增环境变量 变量名: NLS_LANG 变量值: SIMPLI ...
- 【C++札记】引用
介绍 引用是C++中特有的语法,在C语言中不存在. 本质上引用(reference)就是指针,在类型名后面加上一个&号就是引用类型. 1.指针与引用的定义进行比较 指针定义: 引用定义: in ...
- linux下查看当前进程以及杀死进程
###linux下查看当前进程以及杀死进程 查看进程 ps命令查找与进程相关的PID号: ps a :显示现行终端机下的所有程序,包括其他用户的程序. ps -A :显示所有程序. ps c :列出程 ...
- 无线网卡SP-WL450U的驱动问题
修改win10的设备驱动为需要的驱动,SP-WL450U的驱动问题 解决SP-WL450U的驱动问题,在电脑上安装无线网卡后,总是用不上5G信号,只能选择2.4G.重新安装程序后也不行,在反复试用后发 ...
- docker 实践二:操作镜像
本篇我们来详细介绍 docker 镜像的操作. 注:环境为 CentOS7,docker 19.03 之前已经说过,容器是 docker 的核心概念之一,所以对应的就需要知道它的使用方法,接下来我们就 ...
- Solr综合案例深入练习
1. 综合案例 1.1. 需求 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序,并且实现分页功能. 界面如下: 1.2. 分析 开发人员需要 ...
- 06 ServletConfig、ServletContext_作用域对象
ServletConfig:表示servlet的配置信息,一个servlet对象对应一个servletconfig对象 方法: 1.获取初始化参数 config.getInitParameter( ...
- 13-MySQL DBA笔记-迁移、升级、备份、恢复数据库
第13章 迁移.升级.备份.恢复数据库本章将为读者讲述数据库的各种维护任务:迁移.升级.备份和恢复.因为每个人熟悉的工具不同,其对应的迁移.升级.备份和恢复的方式也都略有不同,本书将尽量对笔者认为最具 ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 视图模板页
https://www.cnblogs.com/xlhblogs/archive/2013/06/09/3129449.html MVC Razor模板引擎 @RenderBody.@RenderPa ...
- export default和export的使用方式
在node中使用 var 名称=require('模块标识符') 来导入 module.exports 和exports 来暴露成员 在ES6中,也通过规范的形式,规定了ES6中如何导入和导出模块 E ...