流量控制共分2步,首先在CGI框架对用户的ip作限制,第二限制每个CGI的流量。

 
一、基于IP的流量控制
用共享内存(shm)的方式保存基于ip的访问信息。
配置文件中 <variable name="ip_limit_default" limit_int="60" shm_key="1653" recal_int="300" max_count="600" >
shm_key是共享内存的id,limit_int是用户超过限制后的冷冻时间,recal_int是统计时间,max_count是统计时间内允许的最大请求次数。
 
httpd启动后,首次被访问的cgi进行shm的初始化,申请一段连续的空间并初始化为0. shm结构如下图所示:
当一个请求到来时,根据用户ip做hash,我们的算法很简单,取ip地址最末一个字节,将ip散列到256个段(如上图所示),再在每个段内根据key(ip地址)进行顺序查找,查找时会统计所过结点的最小count。如果没找到,首先用空结点,其次用24小时未更新过的结点,最后用访问次数最少(即最小count的结点)。这样总会返回一个结点。
 
每recal_int时间对count和time重置,如果count超过了max_count就对用户冷冻limit_int时间,limit_int时间过后再将time和count重置。
 
这里面所有的更新都是基于用户请求的到来,系统不会根据time对shm结点做老化处理
 
二、基于CGI的流量控制
利用CKV的超时来统计CGI的流量。
在CKV建立两个key, LockKey用于统计时间,LimitKey用于统计次数。
LockKey会根据设置的expire时间自动过期。
每个请求到来时,取Limitkey加1,未达上限就继续访问,达到上限时要检查LockKey是否过期,如果过期则重置LimitKey并放行,未过期则限制访问。

xx通CGI流量控制的更多相关文章

  1. 上传.cgi在252板子上跑

    1.windows下写好.c程序 2.进入linux,准备交叉编译 arm-hisiv600-linux-gcc -g -Wall -o xxx.cgi xxx.c(交叉编译工具取决于板子) 3.把. ...

  2. A WebBrowser Toy

    原文:A WebBrowser Toy 记得上大学时,某老师为了防止学生上课不听讲,只准学生在课堂上看他放映的PPT,不准学生拷贝,而考试的内容恰恰是PPT上的内容,于是一个同学来找我,我就用VB写了 ...

  3. java程序员面试经历(不忘初心,永不放弃,方得始终)。

    其实一直想静下心好好写一点博客,记录下青春,但一直忙于学习,写bug.....转眼间2017只剩下最后几天,岁月无情划过,不留痕迹,唯有稀疏地中海.哈哈,本篇文章主要是想分享下刚毕业入门找工作的一点小 ...

  4. 收集点小文,讲CGI,FASTCGI,PHP-CGI,PHP-FPM之间通透点的文章

    http://blog.csdn.net/meegomeego/article/details/36180343 http://www.opsers.org/linux-home/server/php ...

  5. 面试北京XX数通总结

    软件架构师何志丹 1             总括 1.1     面试时间 2019年1月21号. 1.2     公司概况 员工近20人,其中开发人员6人,全部objectarx(C++),全部老 ...

  6. PHP安装模式cgi、fastcgi、php_mod比较

    先了解一下普通cgi的工作流程: web server收到用户请求,并把请求提交给cgi程序,cgi程序根据请求提交的参数作相应处理,然后输出标准的html语句返回给web server,web se ...

  7. php的几种运行模式CLI、CGI、FastCGI、mod_php

    1.CLI:就是命令行,例如可以在控制台或者是shell中键入命令: php -f index.php 然后获取输出 2.CGI:以下是不同的说法与理解 公共网关接口”(Common Gateway  ...

  8. [工具开发] 一信通 Web 短信发送客户端

    一.简介 为了协助公司运营部对几家短信平台进行测试,我根据各自的接口文档编写了几个简单的短信发送客户端: 下面是一信通 Web 短信发送客户端,使用 HTTP GET 方法. 二.效果图 1. 首页 ...

  9. 十分钟搞懂什么是CGI

    原文:CGI Made Really Easy,在翻译的过程中,我增加了一些我在学习过程中找到的更合适的资料,和自己的一些理解.不能算是严格的翻译文章,应该算是我的看这篇文章的过程的随笔吧. CGI真 ...

随机推荐

  1. 谷歌 google

    google Google是搜索引擎名,也是一家美国上市公司名称.Google公司于1998年9月7日以私有股份公司的形式创立,以设计并管理一个互联网的搜索引擎.Google公司的总部称作“Googl ...

  2. Asp.Net Webapi路由基本设置

    1.直接在Global.asax中添加配置 如: using MvcApplication4.App_Start; using System; using System.Collections.Gen ...

  3. motan源码分析一:服务发布及注册

    motan是新浪微博开源的服务治理框架,具体介绍请看:http://tech.sina.com.cn/i/2016-05-10/doc-ifxryhhh1869879.shtml. 本系列的文章将分析 ...

  4. Android dp和px之间转换 及 获取坐标

    dp.px.sp转换 public class DensityUtil { /** * 将px值转换为dip或dp值,保证尺寸大小不变 * * @param pxValue * @param scal ...

  5. hdu 1685 Booksort (IDA*)

    Booksort Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Tot ...

  6. Android android-common 常用功能和工具集合

    本文内容 环境 android-common 项目结构 演示 android-common 参考资料 android-common 主要包括如下内容: 缓存,包括图片缓存.预取缓存.网络缓存. 公共 ...

  7. UVA 12378 Ball Blasting Game 【Manacher回文串】

    Ball Blasting Game Morteza is playing a ball blasting game. In this game there is a chain of differe ...

  8. ServletContextListener 解析用法

    ServletContext 被 Servlet 程序用来与 Web 容器通信.例如写日志,转发请求.每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享.因为Context可 ...

  9. AngularJs学习之ng-repeat

    ng-repeat用来遍历一个集合或为集合中的每个元素生成一个模板实例.集合中的每个元素都会被赋予自己的模板和作用域.同时每个模板实例的作用域中都会暴露一些特殊的属性. $index:遍历的进度(0 ...

  10. pointer-events属性

    pointer-events的风格更像JavaScript,它能够: 1.阻止用户的点击动作产生任何效果.阻止缺省鼠标指针的显示3.阻止CSS里的hover和active状态的变化触发事件4.阻止Ja ...