发布网友 发布时间:2022-10-23 12:37
共1个回答
热心网友 时间:2024-12-12 17:16
关于集群限流的功能,官方文档写的非常详细: 集群流控官方文档
官方文档中有demo,但是隐藏了太多细节,且依赖了nacos,我这里自己写了一个demo。
demo地址: https://github.com/shxz130/sentinel-demo
首先启动一个Server端:
在初始化规则的时候,指定集群 or 单机模式,指定限流规则,指定限流类型qps or threads ,最后,加载单机规则,集群NameSpace以及nameSpace对应的集群规则。
在初始化Server的时候,指定TokenServer的Ip和端口,并加载nameSpace信息到Cluster。
初始化客户端的时候,实质是指定客户端规则,配置服务端地址和IP。
最后,启动服务,则是将上面配置的Server信息对外暴漏服务。
这里的端口号是设置服务端的端口号,单独启动Server,这里配置1s中10个QPS,模拟1s中10个请求,能看到运行结果如下:
结果都是通过的,但并不代表限流生效。将1s中请求10个改为20,也就是超时时间由100改为50,运行结果一半通过,一半阻塞 。
可以看到,单机限流是生效了。
为了模拟集群环境,启动一个客户端,客户端的配置和服务端区别在于最后启动的不是Server,而是Client。
设置客户端方式和服务端一致。
先启动服务端。后启动客户端,可以看到服务端日志:
可以看到,当服务端启动的时候,只有服务端一个节点,所以请求全部通过,当客户端联通服务端之后,因为有了客户端连接,所以服务端有block的请求了。
再看一下客户端的日志:
可以看到,在同1s的时间里,客户端和服务端的请求通过数加起来就是集群QPS数。
集群限流生效。