[系统设计Alex Xu] 限流器 Rate Limiter 学习笔记-上

什么是限流器

 

在网络系统中,速率限制器用于控制客户端或服务发送的流量速率

HTTP请求中,限流器 限制 在指定时间内允许发送的客户端请求数量。如果API请求计数超过速率限制器定义的阈值,所有超出的调用都将被阻止。

以下是一些例子:

• 用户每秒最多只能发布2篇帖子

• 您可以从同一IP地址每天最多创建10个帐户

• 您可以从同一设备每周最多领取5次奖励

限流器可以带来什么好处?

  1. 防止DDoS攻击
  2. 节约计算资源成本,比如产品里调用了第三方收费API
  3. 防止服务器过载

第一步 理解设计需求

以下对话用A代表面试者,B代表面试官

A: 我们需要设计何种限流器?在客户端 client-side 还是在服务端 server-side 限流?

B: Server-side 限流

A: 基于哪种限流?IP,user ID, 还是其他?

B: 这个需要灵活,保证不同的rules

A: 体量大吗?给初创公司还是有大量用户的大公司?

B: 大公司

A: 需要考虑分布式吗

B: 需要

A: 限流器作为一个单独的服务?还是集成在应用代码里面?

B: 这个你可以自己决定

A: 需要通知用户被限流了吗?

B:需要

需求总结

  • 低延迟。速率限制器不应该减慢HTTP响应时间
  • 使用尽可能少的内存
  • 分布式速率限制,速率限制器可以在多个服务器或进程之间共享
  • 异常处理。当用户的请求被限制时,向用户显示清晰的异常信息
  • 高容错性。如果速率限制器出现任何问题(例如,缓存服务器离线),它不会影响整个系统。

第二步 架构蓝图

客户端 or 服务端?

  • 客户端:不可靠。因为客户端请求可以被伪造,没有办法很好的把控具体实现。
  • 服务端:如下图。服务端相对客服端更为可靠。

除此之前,我们也可以独立创建一个 限流器中间件,如下图所示。

假如我们的APT允许 每秒2次请求,当用户在一秒内发送3次请求时,前两次会成功接受,第3次则会被限流,并返回HTTP 429 状态码。429: too many requests. 如下图。

云微服务中,通常在API 网关中包含 限流功能。 除此之外,网关还包含了 SSL中止(SSL Termination),认证(authentication), IP白名单,静态资源服务等等。

SSL终止是指将SSL加密的数据流量进行解密(或卸载)的过程。具有安全套接字层(SSL)连接的服务器可以同时处理许多连接或会话。 SSL连接使用证书进行身份验证,在终端用户的计算机和Web服务器之间发送加密数据。 SSL终止有助于加速解密过程,减轻后端服务器的处理负担。

到底应该放在哪里?

没有绝对的答案。以下有几条准则作为参考:

1. 判断公司当前的技术栈,如编程语言,缓存服务等等。确保当前语言能够快速的搭建服务端限流器

2. 找到合适的限流算法。如果自己在server-side实现,可以有更好把控。如果是第三方限流,则没有太多的选择

3. 如果已经是云微服务,且有一个API网关,可以直接在API网关里添加限流器

4. 自己建限流器比较耗费时间,如果没有足够的开发人员,采用商业API 网关比较方便

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值