发包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形成的任务发送到不同的队列中(这样好看点)

面向搜索引擎编程,找到了解决方法

Celery 任务分多队列运行

待续

最新文章

  1. 一个服务器要绑定多个HTTPS站点
  2. [转]pyhon之Tkinter实例化学习
  3. 2015-11-04 报表 (asp.net 部分)
  4. git/ TortoiseGit 在bitbucket.org 使用证书登陆
  5. webapp开发经验和资料
  6. 一步步教你css3手风琴效果的实现
  7. 类作为返回类型 ,具有java特点-封装等 而且应用起来很方便。
  8. ProducerConsumerDemo
  9. asp.net mvc项目远程发布到windows server服务器
  10. checkbox 全选或取消
  11. jar包安装到本地仓库
  12. include
  13. Dajngo的CBV和FBV
  14. c# 协变与抗变
  15. C++编译与链接(0)-.h与.cpp中的定义与声明
  16. 使用jQuery仿淘宝商城多格焦点图滚动切换效果
  17. linux下设置 git ssh 代理
  18. 史上最全的Angular.js 的学习资源
  19. WPF MVVM
  20. markdown你的生活 | markdown编辑器简介

热门文章

  1. Jenkins+maven+gitlab自动化部署之gitLab搭建(二)
  2. 剑指offer58:对称的二叉树。判断一颗二叉树是不是对称的,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的
  3. Thinking In Java 4th Chap6 访问权限控制
  4. python学习-23 函数
  5. Python之数字的四舍五入(round(value, ndigits) 函数)
  6. MongoDB进阶之路:不仅仅是技术研究,还有优化和最佳实践--转载
  7. 15_IO流
  8. substr函数索引创建测试
  9. poj 2915
  10. Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form ResumeForm needs updating.