随着 Serverless 技术的发展和应用场景的不断扩大,前端项目从传统的单独部署演变为基于云函数的较为灵活的 Serverless 应用。然而,Serverless 应用由于架构的特殊性质,容易遭受请求量暴增的攻击,导致系统崩溃或运行缓慢。为了解决这个问题,我们需要对 Serverless 应用进行请求限流和防刷的操作。
什么是请求限流和防刷?
请求限流是指设置一定的请求速率限制,来限制并发请求进入系统,在限定时间内只允许通过每秒最大请求数限制的数量请求,防止恶意攻击和系统崩溃。
防刷则是对过多请求做出一个保护机制,例如限定已知用户的有效请求频率、增加校验、增加人工干预等。
Serverless 应用的限流和防刷实现
在 Serverless 应用中,我们可以通过一些技术手段来进行请求限流和防刷的实现。
1. 云函数平台的限制规定
首先,在大部分云函数平台中,我们可以通过控制台、API 等方式设置函数请求的并发、超时、流量等限制规定。这可以帮助我们限定并发数量,从而减少请求时间,从而有效实现限流。
2. 使用 Redis 数据库记录请求信息
在 Redis 中,我们可以使用 incr
命令来记录请求数量,根据数量限制请求的速率。另外,我们可以使用 expire
命令来设置缓存过期时间,存储过期时间内的请求。
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------ - -------------------- ----- ------------ ----- ----------- --- -- -- ----- --------------- - ----- ------- -- - ----- --- - ----------- ----- -- - --------------------------------------- -- ------ -------- --------------- ----- ---- -- - -- ---- - --- - -- -------- ------ ------------- ---- ----------- - -- -------- -- ----- - -------------------- - ----- - ---- - ----------------- --- -------------- ----------- - -- -
3. 借助 API Gateway 的工具实现
API Gateway 提供了很多工具帮助我们直接实现请求限流和防刷,例如:
- 限流请求速率:可以通过
throttling
来控制请求的速率与并发数量,保护我们的系统并减轻服务端的压力; - 恶意攻击监测:可以通过
WAF
(Web 应用程序防火墙)检测恶意攻击,并进行限制; - 用户验证系统:可以通过
Cognito user pool
等认证系统将请求划分为已知用户和未知用户,从而为已知用户赋能更多的权限。
4. 使用第三方服务
另外,我们还可以通过一些第三方服务来实现请求限流和防刷,例如 CloudFlare、Akamai、Fastly 等 CDN 服务,他们除了做到网络加速之外,还提供了非常好用的 DDoS 防护和 Web 应用防火墙(WAF)服务,能够提供全方位的解决方案。
总结
以上是 Serverless 应用如何实现请求限流和防刷的几种方法,不同的方法有不同的实现复杂度,可以根据自己业务的实际情况选择不同的方案。在 Serverless 应用开发中,不仅要注重功能和性能,更要注重安全性和稳定性,这些都是 Serverless 最核心的价值所在。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64af61e548841e9894b6d54f