前言
官网
https://github.com/alibaba/Sentinel/wiki/集群流控
首先,通过流控规则
,我们已经可以实现集群流控。那么控制台最下方的集群流控Token Server
与Token Client
是干嘛的呢?
官方介绍
为什么要使用集群流控呢?假设我们希望给某个用户限制调用某个 API 的总 QPS 为 50,但机器数可能很多(比如有 100 台)。这时候我们很自然地就想到,找一个 server 来专门来统计总的调用量,其它的实例都与这台 server 通信来判断是否可以调用。这就是最基础的集群流控的方式。
另外集群流控还可以解决流量不均匀导致总体限流效果不佳的问题。假设集群中有 10 台机器,我们给每台机器设置单机限流阈值为 10 QPS,理想情况下整个集群的限流阈值就为 100 QPS。不过实际情况下流量到每台机器可能会不均匀,会导致总量没有到的情况下某些机器就开始限流。因此仅靠单机维度去限制的话会无法精确地限制总体流量。而集群流控可以精确地控制整个集群的调用总量,结合单机限流兜底,可以更好地发挥流量控制的效果。
集群流控中共有两种身份
- Token Client:集群流控客户端,用于向所属 Token Server 通信请求 token。集群限流服务端会返回给客户端结果,决定是否限流。
- Token Server:即集群流控服务端,处理来自 Token Client 的请求,根据配置的集群规则判断是否应该发放 token(是否允许通过)。
官方demo
sentinel-demo-cluster 提供了嵌入模式和独立模式的示例:
- 独立模式 Demo
https://github.com/alibaba/Sentinel/blob/master/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterServerDemo.java - 嵌入模式 Demo,以 Web 应用为示例,可以启动多个实例分别作为 Token Server 和 Token Client。数据源的相关配置可以参考 DemoClusterInitFunc。
https://github.com/alibaba/Sentinel/tree/master/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded
实现
token-server
和token-client
- 文档1:http://www.mianshigee.com/tutorial/sentinel-v1.7/39e61ead78232553.md
- 文档2:https://blog.csdn.net/weixin_42073629/article/details/106450575
白话文:
比如有一个dubbo消费端,三个dubbo服务端。这时候要做集群流控,实现token-server和token-client。
首先,我们要把三个dubbo服务端都注册到sentinel控制台。
要求:-Dproject.name的值一样才能注册到一块;或者如果不加它,那么启动类的名字要一样也可以。这里特别说明一下,如果项目是springcloud,不加-Dproject.name配置的话,好像默认是服务名称。如果不是,可以通过源码中的sentinel-core中的SentinelConfigLoader来查看配置,逐步修改然后,添加token-server
剩余问题
- 集群限流 - Token Server 列表中的qps总览数值变化
- 集群限流时,如果当前服务已被限流,则可以自动 failover 到其它机器
- Token Server 自动管理(分配/选举 Token Server)
最后
不写了,从入门,到放弃。 免费的(sentinel)和收费的(ahas)就是不一样。问题太多。
备注
教程1:https://blog.csdn.net/qq_26323323/article/details/103935230
版权声明:本文为s1441101265原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。