alibaba / Sentinel

A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)
https://sentinelguard.io/
Apache License 2.0
22.34k stars 8.01k forks source link

【疑问】系统自适应限流规则中的入口流量QPS具体包含哪些请求? #3260

Open allen-kaiser-cai opened 11 months ago

allen-kaiser-cai commented 11 months ago

我司的SaaS系统采用Spring Cloud Alibaba作为基础架构,其中限流与熔断的实现选用了Sentinel组件。为了确保系统能正常提供基本服务,我配置了系统规则,入口qps限流3000,如下图所示。

截屏2023-11-06 16 58 13

生产环境部署了12台gateway-service,预期是系统能承载12*3000=36000QPS的http请求,因为所有的页面请求和第三方系统请求都会通过Nginx转发到网关,网关再转发到具体微服务。但实际上当Nginx的峰值QPS到达3000左右时,系统规则的限流就触发了,这我预期的36000QPS存在巨大的差异。我分析了单台网关的限流日志文件gateway-service-metrics.log.2023-11-06,发现当Nginx的峰值qps为3977(都是http请求)时,单台网关的峰值QPS是3492。

截屏2023-11-06 17 06 33 截屏2023-11-06 17 06 57

不是我理解的3977/12约等于330qps。我从文档:https://github.com/alibaba/Sentinel/wiki/%E7%B3%BB%E7%BB%9F%E8%87%AA%E9%80%82%E5%BA%94%E9%99%90%E6%B5%81 看到了入口 QPS的定义:单台机器上所有入口流量的 QPS 。

我想确认一下,所有入口流量的意思是不仅包含了入口的http请求,还包含其它tcp/udp的请求(如tcp握手包等)么?

huang-gz commented 11 months ago

确认一下是所有的 Gateway-service 都触发限流, 还是说只有一个,如果只有一个的话排查一下是不是 nginx 转发有问题。

allen-kaiser-cai commented 11 months ago

确认一下是所有的 Gateway-service 都触发限流, 还是说只有一个,如果只有一个的话排查一下是不是 nginx 转发有问题。

是所有网关实例都触发了。我抽查了几个网关,同一时间点日志中记录的请求数还是比较均衡的

allen-kaiser-cai commented 11 months ago

以今天上午七点的数据为例子,Nginx上2023-11-09 07:00:01.000的峰值QPS是4167(只统计http请求),我查了4台网关的gateway-service-metrics.log.2023-11-09,2023-11-09 07:00:01的QPS分别是3333、3354、3344、3273。

截屏2023-11-09 11 40 03 截屏2023-11-09 11 38 57 截屏2023-11-09 11 39 11 截屏2023-11-09 11 39 24 截屏2023-11-09 11 39 42

所以我觉得应该是网关上的QPS统计方式不一样了。

liudaac commented 11 months ago

有没有考虑Options类型的请求

allen-kaiser-cai commented 11 months ago

有没有考虑Options类型的请求

我通过工具对某台网关进行抓包分析过,所有的http请求加起来(包括各种请求类型)的数量也没有到这个量级的。 这是我在11月1日13:45:23在一台网关上看到的日志,1秒内的总请求数有250个。

截屏2023-11-01 16 42 19

我抓包后分析,发现13:45:23秒内的http协议包是43个,与上面sentinel日志的250差距很大。

截屏2023-11-09 13 59 17

如果统计请求包中13:45:23秒的入口tcp请求数量,大约240个左右,接近上面sentinel日志的数量。

截屏2023-11-06 15 17 24