原文  http://blog.eood.cn/rate-limiting

Rate limiting 在 Web 架构中非常重要,是互联网架构可靠性保证重要的一个方面。

从最终用户访问安全的角度看,设想有人想暴力碰撞网站的用户密码;或者有人攻击某个很耗费资源的接口;或者有人想从某个接口大量抓取数据。大部分 人都知道应该增加 Rate limiting,做请求频率限制。从安全角度,这个可能也是大部分能想到,但不一定去做的薄弱环节。

从整个架构的稳定性角度看,一般 SOA 架构的每个接口的有限资源的情况下,所能提供的单位时间服务能力是有限的。假如超过服务能力,一般会造成整个接口服务停顿,或者应用 Crash,或者带来连锁反应,将延迟传递给服务调用方造成整个系统的服务能力丧失。有必要在服务能力超限的情况下 Fail Fast。

另外,根据排队论,由于 API 接口服务具有延迟随着请求量提升迅速提升的特点,为了保证 SLA 的低延迟,需要控制单位时间的请求量。这也是 Little’s law 所说的。

还有,公开 API 接口服务,Rate limiting 应该是一个必备的功能,否则公开的接口不知道哪一天就会被服务调用方有意无意的打垮。

所以,提供资源能够支撑的服务,将过载请求快速抛弃对整个系统架构的稳定性非常重要。这就要求在应用层实现 Rate limiting 限制。

常见的 Rate limiting 的实现方式

Proxy 层的实现,针对部分 URL 或者 API 接口进行访问频率限制

Nginx 模块

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {location /search/ {limit_req zone=one burst=5;}

详细参见: ngx_http_limit_req_module

Haproxy 提供的功能

详细参见: Haproxy Rate limit 模块

Java、Scala JVM 系应用层实现

Google Guava 提供了一个 RateLimiter 实现。使用方式简单明了,在自己的应用中简单封装即可,放到 HTTP 服务或者其他逻辑接口调用的前端。

final RateLimiter rateLimiter = RateLimiter.create(2.0); // rate is "2 permits per second"void submitTasks(List<Runnable> tasks, Executor executor) {for (Runnable task : tasks) {rateLimiter.acquire(); // may waitexecutor.execute(task);}}

详细参见: Google Guava RateLimiter

基于 Redis 功能的实现

这个在 Redis 官方文档有非常详细的实现。一般适用于所有类型的应用,比如 PHP、Python 等等。Redis 的实现方式可以支持分布式服务的访问频率的集中控制。Redis 的频率限制实现方式还适用于在应用中无法状态保存状态的场景。

参见: Redis INCR rate limiter

架构必备:Rate limiting 的作用和常见方式相关推荐

  1. [转]架构必备:Rate limiting 的作用和常见方式

    转载文章,原文地址:https://blog.eood.cn/rate-limiting Rate limiting 在 Web 架构中非常重要,是互联网架构可靠性保证重要的一个方面. 从最终用户访问 ...

  2. 架构必备「RESTful API」设计技巧经验总结

    转载自   架构必备「RESTful API」设计技巧经验总结 [译者注]本文是作者在自己的工作经验中总结出来的RESTful API设计技巧,虽然部分技巧仍有争议,但总体来说还是有一定的参考价值的. ...

  3. 高可用服务设计之二:Rate limiting 限流与降级

    <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <nginx限制 ...

  4. 空的宏定义作用及常见用法

    空的宏定义作用及常见用法 我们学习宏定义的第一个概念是,宏定义作为替换作用. 例如: #define SIZE 32 // 接下来代码使用SIZE就相当于32 宏定义是编译器在编译时,将程序中所有SI ...

  5. windows hosts 作用以及常见问题解决

    windows hosts 作用以及常见问题解决 参考文章: (1)windows hosts 作用以及常见问题解决 (2)https://www.cnblogs.com/sesna/p/host_t ...

  6. Kong Rate Limiting 插件详解

    Rate Limiting插件 基本描述: 属性 描述 插件作用域 服务.路由.全局 适用协议 http.https 配置信息: 属性 描述 参数 描述 name 插件名称.此处为rate-limit ...

  7. kong插件之Rate Limiting

    文章来源:http://blog.csdn.net/qq_26656329/article/details/78842005 关于Response Rate Limiting插件 说明 插件实现是在每 ...

  8. kong的插件: Response Rate Limiting

    简述 这也是一种限流的插件和Rate Limiting相似,但是有一定的区别.Response Rate Limiting是由后端服务控制频率的减少,而Rate Limiting是由Kong完成的. ...

  9. API Gateway/API 网关(三) - Kong的使用 - 限流rate limiting(redis)

    一.前言 Kong的限流支持三种方式,分别是本地限流(Local).数据库限流(Cluster)和Redis限流,这三种限流方式采用的限流算法都是计数器法.支持按照秒/分/小时/日/月/年等不同时间单 ...

最新文章

  1. sharepoint开机启动禁止
  2. 解决pl/sql devloper 中数据库操作语句中文乱码的问题
  3. C++ 11 nullptr关键字
  4. 图像目标分割_3 SegNet + U-Net
  5. java range类_Java即时类| range()方法与示例
  6. 精通ASP.NET MVC ——视图
  7. Memcache简介
  8. C++之顺序性容器vector、list、deque的五种定义方式
  9. html缎带按钮,6款丝带蝴蝶结系法图解_乌托家家居网
  10. 分享一款挡字幕小工具,自带翻译功能,方便看剧学英语、日语
  11. win10一键激活,解除SymantecEndpointProtection的自动拦截
  12. 七层网络协议模型(ISO模型)
  13. 关于MD5和salt盐值加密后破解方法
  14. 优化实现Mobile/Bumped Diffuse
  15. CrackMe160 学习笔记 之 024
  16. ABAQUS中的文件类型及功能
  17. python爬虫实现股票数据存储_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...
  18. C语言程序设计教程(第三版)课后习题6.11
  19. marvell万兆交换机内核编译总结
  20. 全球12个典型区域的surface runoff subsrf runoff比较

热门文章

  1. 计算机图形学学习:GAMES101
  2. 关于树莓派屏幕显示不全的问题
  3. Dazdata BI之PDF魔幻输出
  4. 四年开发,待业半年本想放弃Java,抱着试试的心态面试某C轮金融科技公司居然过了!
  5. ZOJ 3755 Mines
  6. c++ 高效位运算函数之 __builtin_
  7. IM 去中心化概念模型与架构设计
  8. ubuntu桌面幻灯片_如何在Ubuntu中创建墙纸幻灯片
  9. na5tr1 测距芯片调试小结
  10. 使用for循环打印星星