惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
GbyAI
GbyAI
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
B
Blog
博客园 - 叶小钗
V
Visual Studio Blog
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
博客园 - 聂微东
S
SegmentFault 最新的问题
Engineering at Meta
Engineering at Meta
博客园 - Franky
V
V2EX
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
IT之家
IT之家
T
The Blog of Author Tim Ferriss
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Check Point Blog
N
Netflix TechBlog - Medium
博客园 - 【当耐特】

博客园 - Birdshover

express-partials与express4.x不兼容问题 选择结构(if..else..,switch,try..catch..)的拆分 该省代码的地方要省,反之亦然。 dell笔记本的Broadcom 802.11b/g 无线网卡ubuntu 9.10下安装 四步完成跨平台调用——thrift的开发应用 facebookde 的 NoSQL数据库cassandra的配置与调用(java&&c#) VirtualBox 虚拟机 Debian系统上安装Cassandra步骤及遇到的问题 大道化简,重构的艺术 读自己的书,走自己的路 jre6的webservice使用Php类库nusoap调用的问题 - Birdshover - 博客园 mysql master/slave 使用感受 java开发守护进程 实现高效易用的java操作mysql包装 部分NLuke版本源码更新(2009-11-1) 单件模式的陷阱 一个不必要的设计 网站、数据库的衍变之路(六) 网站、数据库的衍变之路(五) ASP.NET Forms验证的安全性问题研究——为什么加密代码需要配置为服务
厨师炒菜与网站反爬虫问题
Birdshover · 2010-02-07 · via 博客园 - Birdshover

上周部门同事中午一起吃饭时,有同事提到一个问题。具体这个问题干啥的忘记了,只记得是要你设计一个餐馆的工作流程。工作流程就啥也不说了,只是那天中午,我想到到的是合并炒菜。合并炒菜就是指,当某段时间内,如果有人要了同样的菜,那个这个菜就优先炒。当时就想,这在编程中和连接池很相似。

而12月份在公司的挖宝任务中,就有一个关于反某IP在单位时间内访问次数的任务。当时想到的方法是在内存中建立一个列表,每次访问都会根据这个列表的数据确定该IP是否有响应。一直觉得这个方案对高访问量来说不太妥当。

而今天突然想到,要是在原方案的基础上引入异步机制,可以极大改善性能。而这个性能是访问的性能,不是总体性能。

如果在内存中建立一张表A,这张表有多大,是否需要分布式,由访问量决定。每当有访问时,往该表插入数据。同时由另外一个线程或者进程,来对该表的数据进行分析。把分析结果更新到另外一张内存表 B。B表的数据量一般来说是小于A表。

比如,当A表存在某个IP,并且记录数大于3条,而且是在5秒钟以内。那么就会在B表中增加一条记录。

在访问时,如果B表中存在访问者IP的记录,那么就会中断响应。当然如何从B表中移除记录,还需要设计一套方案。

而上面的关于5秒内3条记录这种方式过于简单一些。完全可以任务,在10分钟内,如果请求数超过某个值,将出现一个手动输入的验证码。这样就可以规避掉很大的性能问题。我记得google的搜索,在一些条件下,也会需要输入验证码的。而完全中断响应的不太近人情,呵呵。