什么是 API 限流?

API 限流是限制用户在一定时间内 API 请求数量的过程。应用程序编程接口 (API) 充当用户和软件应用程序之间的网关。例如,当用户单击社交媒体上的发布按钮时,点击该按钮会触发 API 调用。此 API 与社交媒体应用程序的网络服务器进行交互,并执行发布操作。此用户可以是人,也可以是其他软件应用程序。

API 限流示意图

组织出于各种目标使用 API 限流,例如安全性、可扩展性、性能、货币化、身份验证和可用性。

企业中 API 限流的真实示例

假设某人正在通过 OTA(在线旅行社)网站搜索航班。OTA 网站收集用户的信息,包括出发地,目的地和旅行日期。然后,它使用 API 从诸如 Sabre 或 Amadeus 之类的 GDS(全球分销系统)获取航班信息。

为什么企业需要 API 限流?

API 是组织最大的资产之一。API 可帮助网站或移动应用程序的用户完成任务。随着用户数量的增加,网站或移动应用程序开始出现性能下降的迹象。因此,拥有更好连接或更快界面的用户可能会获得比其他用户更好的体验。API 限流是一种巧妙的解决方案,可帮助组织确保其 API 的合理使用。

API 限流还有助于抵御拒绝服务 (DoS) 攻击,在 DoS 攻击中,恶意用户发送大量请求以使网站或移动应用程序崩溃。随着在线用户数量的增加,企业需要实施 API 限流机制,以确保公平使用、数据安全并防止恶意攻击。

API 限流的工作原理

虽然 API 限流有多种算法,但以下是所有 API 限流算法的基本步骤:

  1. 客户端/用户调用与网络服务或应用程序交互的 API。
  2. API 限流逻辑会检查当前请求是否超过允许的 API 调用次数。
  3. 如果请求在限制范围内,API 将照常执行并完成用户的任务。
  4. 如果请求超出限制,API 会向用户返回错误响应。
  5. 用户必须等待预先约定的时间段,或者付费才能进行更多的 API 调用。
API 限流成功指南
API 产品经理的权威成功指南
通过 7 部分成功指南了解公司如何创建 API 程序以发展数字业务,充分发挥 API 的强大性能!

有哪些主要的 API 限流算法?

漏桶 API 限流算法

该算法使用先进先出 (FIFO) 队列来保存传入的请求。队列会有特定大小。当收到新的 API 调用/请求时,将其添加到队列的末尾。每隔一段时间,该算法会从队列前面删除请求并对其进行处理。如果队列已满时出现新请求,则该请求将被丢弃。该算法与令牌桶算法密切相关。

漏桶的优点

  • 易于实施
  • 以固定的速率处理请求。即使请求激增,系统也不会过载。从某种意义上说,漏桶算法可以在出现不稳定的输入流时使输出流趋于平滑。

漏桶的缺点

  • 由于漏桶算法使用先进先出队列,因此存在请求不足的可能性。这意味着当队列已满并且请求需要更多时间处理时,较新的请求可能会被丢弃。出现此问题的原因是处理请求的顺序。

固定窗口 API 限流算法

固定窗口允许用户在特定时间段内进行 N 次 API 调用。例如,固定窗口算法允许每分钟两个请求。时间范围被划分为固定段,每段持续一分钟。一分钟开始时,计数器被设置为零。随着每个用户的请求,计数器都会增加。如果计数器在时间窗口结束之前达到上限,则新请求将被拒绝。每分钟开始时,计数器将重置为零。

在固定窗口算法的典型实现中,每个用户都有一个唯一的密钥和一个与密钥关联的计数器。在固定时间窗口开始时,计数器被重置。

固定窗口的优势

  • 与漏桶算法不同,固定窗口算法不会导致新请求不足,因为计数器在每个时间窗开始时都会重置。

固定窗口的缺点

  • 在时间窗口开始时,用户请求可能会激增。例如,如果有 1000 个请求/小时的限制,则所有 1000 个请求都可能在窗口的第一分钟发出。这可能会使系统不堪重负。

滑动窗口 API 限流算法

此算法通过在发出请求时启动时间窗来解决固定窗口算法的请求突发问题。例如,它假定系统每分钟只允许用户发出两个请求。与固定窗口不同,时间窗口仅在用户实际发出第一个请求时才启动。第一个请求的时间戳用计数器保存,允许用户在这一分钟内再发出一个请求。

滑动窗口算法的优势

滑动窗口算法结合了漏桶和固定窗口算法的优点。它消除了其他两种算法的问题。在滑动窗口中,较新的请求不会出现不足。与固定窗口不同,请求的激增不会使系统不堪重负。

API 限流有什么好处?

API 限流是所有通过 API 公开其服务的组织必不可少的技术。

性能

API 限流通过限制 API 的过量使用来防止系统性能下降。如果应用程序拥有数百万用户,则系统每秒可能会收到大量的 API 请求。为所有这些 API 请求提供服务将减慢系统速度并影响其性能。API 限流可确保每个用户都能获得服务水平协议 (SLA) 中保证的性能。

安全性

API 限流系统充当 API 的网关。它有助于防止拒绝服务 (DoS) 攻击。在 DoS 中,攻击者发出大量服务请求,使合法用户无法使用该服务。通过限制服务请求的总数,API 限流有助于防止 DoS 攻击。

减少意外/恶意使用

如果 API 由于技术故障而泄露敏感信息,则 APO 限制将限制用户通过受损的 API 获得未经授权的数据访问。

计量和货币化

API 是组织最大的资产之一。通过 API 使用货币化带来了很大的利润。API 限流可帮助组织衡量其 API 的使用情况。例如,网络服务每小时可能提供 1000 次免费 API 调用,但如果用户每小时需要更多请求,则必须为此付费。

身份验证

API 限流不一定只限制调用次数。根据用户的访问权限,API 限流逻辑将允许他们访问 API 的选定部分。例如,根据请求者的权限,一些用户或许可以查找其他用户,而其他用户或许可以通过 API 编辑用户的详细信息。

API 限流免费试用
尝试 TIBCO Cloud Integration - 免费试用
让 TIBCO 云集成通过更方便快捷的 API 主导式集成为您的企业提供强劲支持。以集成方式实现简化。

API 限流的挑战是什么?

在分布式系统中实施 API 限流是一项具有挑战性的任务。当应用或服务在全球范围内有多台服务器时,应对分布式系统进行限流。来自同一用户的连续请求可以转发到不同的服务器。API 限流逻辑驻留在每个节点上,需要彼此实时同步。这可能会导致不一致和竞态条件。

在下面的示例中,用户已经用完了每秒五个请求限制中的四个请求。假设用户在同一秒再发出两个请求。这两个请求将发送到两台不同的服务器。速率限制器从数据库中检索当前计数器并看到计数=4;它允许调用。同时,第二个速率限制器还会从数据库中提取数据并看到计数=4。之所以发生这种情况,是因为第二个速率限制器在第一个速率限制器更新计数之前从公共数据库中提取数据。因此,两个请求都得到服务,用户就每秒获得 6 个请求。

解决方案:API 限流系统采用多种解决方案来解决不一致和竞态条件。在分布式系统中实施 API 限流的一种方法是使用粘性会话。在此方法中,来自用户的所有请求始终由特定服务器提供服务。但是,此解决方案是不均衡或容错的。

分布式系统中 API 限流的第二种解决方案是锁定。在上面的例子中,当第一个速率限制器访问数据库时,它会锁定计数。在解锁计数之前,第二个速率限制器将无法访问计数。当计数器更新为五时,第一个速率限制器会解锁计数。另一种流行的解决方案是放宽速率限制。此解决方案允许每秒一定比例的额外请求。