选择限流方式需要根据具体业务场景的特点和需求来决定,主要考虑以下几个关键因素:
核心原理:
令牌桶算法维护一个容量固定的"令牌桶",系统以恒定速率(如每秒100个)向桶中添加令牌。每个请求需要获取一个令牌才能被放行,当桶中令牌耗尽时,新请求将被拒绝或排队等待。
技术特点:
适用场景:
核心原理:
漏桶将请求视为水滴,以固定速率(如每秒100滴)从桶底漏出。当桶内水量达到容量上限时,新请求将被丢弃或排队。
技术特点:
适用场景:
核心原理:
将时间划分为固定长度窗口(如1秒),统计每个窗口内的请求数,超过阈值(100)即触发限流。
优缺点:
核心原理:
通过多个时间片(如10个100ms片)实现滑动窗口统计,精确控制任意1秒时间跨度内的请求量。
优缺点:
适用场景:
我做的是一个工作流系统,给插件调用添加限流功能。
工作流系统特征:
考量维度  | 令牌桶  | 漏桶  | 固定窗口  | 滑动窗口  | 
|---|---|---|---|---|
突发处理能力  | ★★★★★  | ★☆☆☆☆  | ★★★☆☆  | ★★★★☆  | 
工作流连贯性  | ★★★★★  | ★★☆☆☆  | ★★★☆☆  | ★★★★☆  | 
实现复杂度  | ★★★☆☆  | ★★★☆☆  | ★★★★★  | ★★☆☆☆  | 
资源利用率  | ★★★★★  | ★★☆☆☆  | ★★★☆☆  | ★★★★☆  | 
例如:工作流执行到支付环节时,需要并发调用风控插件、支付网关插件和日志记录插件,令牌桶允许这些插件同时获取令牌执行,确保支付流程的完整性,让一些高优先级的业务可以获取更多令牌,快速完成。
例如:在上述支付场景中,漏桶算法会强制将三个插件的调用串行化处理,可能使支付响应时间从200ms延长至600ms,严重影响用户体验。
例如:当工作流环节设置的100QPS即将耗尽时,第101个请求可能只延迟10ms获取令牌,而固定窗口会直接拒绝,造成业务中断。
例如:在订单履约工作流中,这种渐进式限流可以确保库存扣减、物流调度、通知发送等关键插件都能有序完成,避免因 abrupt限流导致订单状态不一致。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。