sentinel,kong,envoy关于限流的比较
- Sentinel
Sentinel 是阿里巴巴开源的一款强大的流量控制组件,它主要提供以下几种维度的限流:
-
资源维度:这是 Sentinel 最基本的限流维度。在 Sentinel 中,所有的流量控制规则都是基于资源的。一个资源可以是任何你想保护或者限制的东西,例如一个方法,一个 API,甚至是一个系统功能。
-
来源维度:Sentinel 也可以根据调用的来源进行限流。例如,你可以设置规则来限制来自特定 IP 地址的流量。
-
QPS (Queries Per Second) 维度:Sentinel 可以设置每秒查询次数的限流规则,以防止系统被过载。
-
并发线程数维度:Sentinel 可以限制通过某个资源的并发线程数量,这对于保护那些不支持高并发的资源非常有用。
-
关联资源维度:在某些情况下,你可能希望当一个资源达到阈值时,限制另一个资源的流量。Sentinel 支持这样的关联资源限流。
-
簇点链路:Sentinel 不仅支持对单个资源进行限流,还支持对整个调用链路进行限流。
-
系统负载维度:Sentinel 还可以根据系统的负载情况,如 CPU 使用率,总体入口 QPS,系统平均 RT,入口流量等进行动态的流量控制。
这些维度可以组合使用,以创建非常灵活和强大的流量控制策略。
- kong
Kong 是一个开源的 API 网关,其限流插件提供了多种维度的限流支持,包括:
-
Consumer 维度:Kong可以对每个 Consumer(也就是API的消费者,通常是一个客户端应用)进行限流。
-
Credential 维度:如果你使用了身份验证插件,Kong也可以对每个凭证进行限流。
-
IP 维度:Kong可以对每个IP地址进行限流。
-
Service & Route 维度:Kong可以对每个Service或者Route进行限流。
限流的具体规则可以基于以下几个参数:
Second:每秒请求数量限制。
Minute:每分钟请求数量限制。
Hour:每小时请求数量限制。
Day:每天请求数量限制。
Month:每月请求数量限制。
Year:每年请求数量限制。
这些参数可以单独使用,也可以组合使用,以达到更精细的限流控制。
此外,Kong 还提供了一个"滑动窗口"的限流计数器,这种计数器可以更平滑地处理突发流量,而不会在每个限流周期的开始产生流量峰值。
- envoy
Envoy 是一个高性能的开源代理,提供了强大的网络功能,包括动态服务发现,负载均衡,TLS 终止,HTTP/2 和 gRPC 代理,断路器,健康检查,分段/故障注入等。Envoy 的速率限制服务(Rate Limit Service, RLS)提供了一种通用的 HTTP 速率限制框架,可以在多个维度进行限流。
以下是 Envoy 提供的限流维度:
-
远程地址:可以根据请求的远程(客户端)IP地址进行限流。
-
请求头:可以根据请求头中的任意字段(例如 "User-Agent")进行限流。
-
请求路径:可以根据 HTTP 请求的路径进行限流。
-
请求方法:可以根据 HTTP 请求方法(例如 GET,POST 等)进行限流。
-
任意环境变量:可以根据 Envoy 中的任意环境变量进行限流。
-
来源服务:可以根据调用服务的身份进行限流。
这些维度可以单独使用,也可以组合使用,以满足各种复杂的限流需求。
需要注意的是,Envoy 的限流服务需要你自己实现并部署一个独立的 Rate Limit Service 来进行实际的速率限制决策。这意味着你可以在自己的 Rate Limit Service 中定义任何你需要的自定义限流维度。