API开发中如何使用限速应对大规模访问?

寒风


API作为应用程序编程接口提供给调用方使用,在设计时不光光要考虑到安全性,还要考虑其稳定性。而对于API而言,提供给调用方使用时一定要对调用次数做限制,防止API并发过高导致服务不可用。举个例子,像微博每次碰到某明星爆料一个热点,微博就会瘫痪一次,典型的过载导致的。

限流需要考虑的问题

1、阈值设定为多大

阈值过小会影响用户的正常访问,所以需要视具体情定确定阈值大小。

2、单位时间范围持续多久

可以按天、小时、分钟等时间段计时。

3、何时重置阈值,重新计数

达到阈值后,该用户发出的请求不再处理,但需要在一段时间后恢复访问,重新计数,避免服务一直不可用。

限流处理模式

1、延迟处理(队列机制)

我们在系统前端设置一个缓冲池,所有的请求全部进入这个缓冲池,但不立即处理请求。由后端程序依次从缓冲池里取出请求进行处理,这样就减小了后端的处理压力。

2、服务降级

将整个系统各个功能模块设置一个等级,当核心API负载过大时,将一些等级不高的服务进行降级处理(停止服务),这样就相当于把资源节省给核心API使用了,保证核心业务的正常运行。像一般电商平台推出活动时,都会有服务降级机制。

3、熔断

当API出现问题时,若短时间内无法修复及恢复服务,那就需要开启熔断开关,拒绝后续的流量请求,避免一个API的故障导致连锁反应。

限流方案

1、借助Nginx实现限流

通过Nginx limit_req 模块可以方便的基于特定IP、请求来做限流。

2、基于Redis实现限流(推荐)

比如根据用户IP创建一个Key,每次请求时就将此键值加1,当特定时间段内达到阈值后禁用服务访问,等Key过期后又重新计数。


从限流实现成本上说,Redis方案最易控制和实现,大家可以试下。


以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!


分享到:


相關文章: