给我的朋友写了一个 API 限流组件

💡 原文中文,约9100字,阅读约需22分钟。
📝

内容提要

本文介绍了如何使用手写的限流组件,通过定义抽象类接口、创建者和执行者来管理限流对象,并使用缓存类记录流量信息。最后将限流功能封装为一个组件,并以中间件的方式进行注入。通过添加配置和测试,实现了一个易扩展的 API 限流组件。

🎯

关键要点

  • 文章介绍了如何手动开发一个限流组件,以满足特定业务需求。
  • 限流组件需要支持IP限流、用户限流和特殊权限的情况。
  • 首先定义了一个抽象类接口IRateLimiting,包含限流行为和属性。
  • 为了应对复杂的业务场景,建议创建多个限流对象,如ICodeRateLimiting和IAccountRateLimiting。
  • 使用创建者模式来管理限流对象的实例化,定义了IRateLimitingCreator接口。
  • 执行者IRateLimitingExecute用于更新限流信息并检查是否限流。
  • 实现了IRateLimiting接口的抽象类RateLimiting,提供了基本的限流逻辑。
  • 通过继承RateLimiting类,可以实现不同的限流策略,如按分钟、小时或天数限流。
  • 使用IRateLimitingCreator实例化具体的限流对象,如MinuteRateLimiting。
  • 提供了两种限流实现方式:按IP限流和按IP+请求ID+请求路径限流。
  • 流量记录可以使用数据库、Redis或内存缓存等方式,推荐使用ConcurrentDictionary进行线程安全存储。
  • 将限流功能封装为组件,并以中间件的方式进行注入。
  • 提供了配置选项RateLimitingOption,允许用户自定义限流次数。
  • 实现了限流中间件RateLimitingMiddleware,记录访问日志并处理限流逻辑。
  • 通过服务注入和中间件配置,完成限流组件的集成。
  • 最终实现了一个手写且易扩展的API限流组件。
➡️

继续阅读