转载文章,原文地址:https://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 wait executor.execute(task); } }
基于 Redis 功能的实现
这个在 Redis 官方文档有非常详细的实现。一般适用于所有类型的应用,比如 PHP、Python 等等。Redis 的实现方式可以支持分布式服务的访问频率的集中控制。Redis 的频率限制实现方式还适用于在应用中无法状态保存状态的场景。
相关推荐
此外,我们将探索Kong提供的更多插件,例如: Rate Limiting , Prometheus和StatsD插件。项目图应用简单服务Spring Boot Java Web应用程序公开了两个端点: /api/public :任何人都可以访问,但不安全; /api/...
- **Token Bucket算法**:是一种常见的速率限制机制,通过预先定义的“桶”存储令牌,每当数据包通过时就消耗一个令牌。这种方法能够灵活地控制不同类型的流量,并支持突发流量。 - **通信成本**:涉及网络传输过程...
通过config.json(aka rate-limiting.conf)调整规范。 安全问题:确保您的请求缓存文件不能被公众访问。 用法: [1]编辑您的配置: 笔记: 如果“ die_on_rate_limit”为false,则访问者在受限时将被重定向到“ ...
《ICNIRP指南:2020年限制电磁场暴露》是国际非离子辐射防护委员会(International Commission on Non-Ionizing Radiation Protection, 简称ICNIRP)发布的一份重要指导文件,旨在为公众和专业人员提供关于电磁场...
**速率限制(Rate Limiting)** 速率限制是网络服务中常见的策略,用于防止滥用或保护系统资源。在"Amp-rate-limit.zip"中,可能包含了一个实现速率限制的库或组件,它可能使用令牌桶算法、漏桶算法或其他方法来控制...
composer require danharrin/livewire-rate-limiting 引入了速率限制改进功能后,此软件包至少需要Laravelv8.x。 用法 将DanHarrin\LivewireRateLimiting\WithRateLimiting特性应用于您的Livewire组件: <?php ...
藏经阁-In-Flux Limiting for a Multi-Tenant Logging Service 本文档主要介绍 Symantec 的内部云团队在构建多租户日志记录服务时遇到的挑战和解决方案。该服务使用 InfluxDB 作为时间序数据存储,旨在处理大量的...
haproxy-http-based-rate-limiting 基于HTTP头内容和其他具有HAProxy的高级信息的限速请求的以代码为中心的博客文章的示例配置。 有关如何使用它的详细信息,请参见
DDoS 攻击防御实践 DDoS(分布式拒绝服务)攻击是一种常见的网络攻击形式,其目的是使目标系统或网络无法提供服务,从而影响其正常运作。DDoS 攻击通常来自于僵尸网络...7. traffic filtering 和 rate limiting 等技术
PPAP的目的是用来确定供应商是否已经正确理解了顾客工程设计记录和规范的所有要求,以及其生产过程是否具有潜在能力,在实际生产过程中按规定的生产节拍满足顾客要求的产品。PPAP必须适用于提供散装材料、生产材料、...
安装redis_rate支持2个最新的Go版本,并且需要具有支持的Go版本。 因此,请确保初始化Go模块:go mod init github.com/my/repo 然后安装redis_rate / v9(在导入中注意v9 ;忽略它是一个普遍的错误):go get github...
**Dubbo服务治理**主要通过以下两种方式来确保服务的健壮性和系统的稳定性: 1. **限流**(Rate Limiting):通过控制服务的请求流量,防止服务过载。 2. **降级**(Circuit Breaker):在服务出现故障或响应时间过...
在Node.js环境中,速率限制(Rate Limiting)是一种重要的技术,用于控制应用程序接口(API)或服务的访问速度,防止恶意用户滥用系统资源,保护服务器免受DDoS攻击,以及维护服务的稳定性和可用性。"node-rate-...
* TCP: speed limiting, data logging, etc * TCP: passwording of tunnels * SMTP: antispam (DNS/RBL & greylisting) * SMTP: antivirus (using existing installation of Sophos AV or Grisoft AVG) * SMTP:...
使用rate_limiter我们可以比以往更轻松地将这些策略应用于常规的dart函数。 (灵感来自 ) 指数 冲洗 消除 安装 将以下内容添加到您的pubspec.yaml ,并将[version]替换为最新版本: dependencies : rate_...
部署方式为了使部署工作正常,您需要在创建一个免费帐户,并获取Redis的实例信息-REDIS_HOST,REDIS_PORT和REDIS_PASSWORD。 您必须将它们作为环境变量传递(在.env文件中或通过服务器配置,例如Heroku Config ...
藏经阁-In-Flux Limiting for a Multi-Tenant Logging Service 本文档主要介绍了 Symantec 公司的内部云团队在多租户日志记录服务中实现 In-Flux 限制的解决方案。该解决方案主要针对多租户日志记录服务中存在的...
云原生架构支持水平扩展(增加更多的实例来分散负载)和垂直扩展(增强单个实例的资源)两种方式。 ### 迁移策略 为了将现有的应用迁移到云原生架构,Matt Stine在书中提出了一系列的迁移策略,包括: - **文化...
它提供了一个灵活的方式来管理网络带宽、延迟和丢包率等网络性能参数,以满足不同应用场景的需求。 TC 的安装 TC 是 Linux 内置的流量控制工具,因此无需单独安装。但是,需要确保 Linux 系统中已经安装了 TC 相关...
6. **Rate Limiting(速率限制)**: 许多网站会限制同一IP地址的请求频率。当超过限制时,可能会返回特定的HTTP状态码或者直接阻塞请求。处理这类问题可以使用延时、更换IP、使用代理等方法。 7. **Session异常**: ...