如何设置本地限流

    安装完成后,可以看到集群中增加了下面两个 NS,这两个 NS 中分别安装了基于 MetaProtocol 实现的 Dubbo 和 Thrift 协议的示例程序。 你可以选用任何一个程序进行测试。

    Aeraki 的限流规则设计直观而灵活,既支持对一个服务的所有入向请求进行限流,也支持按照不同的条件对一个服务器的请求进行细粒度的限流控制。

    下面的规则可以对 thrift-sample-server.meta-thrift.svc.cluster.local 服务的所有入向请求进行限流,限流设置为 2次请求/每分钟。

    1. apiVersion: metaprotocol.aeraki.io/v1alpha1
    2. kind: MetaRouter
    3. metadata:
    4. name: test-metaprotocol-thrift-route
    5. namespace: meta-thrift
    6. spec:
    7. hosts:
    8. - thrift-sample-server.meta-thrift.svc.cluster.local
    9. localRateLimit:
    10. fillInterval: 60s
    11. maxTokens: 2
    12. tokensPerFill: 2

    Aeraki 支持按照条件为服务设置多个限流规则,以满足细粒度的限流要求。例如按照用户或者对接口对请求进行分组,并对每个分组设置不同的限流规则。

    分组限流的匹配条件和路由匹配条件相同,任何可以从请求数据包中提取出来的属性都可以用于限流规则的匹配条件。

    例如下面的规则为 sayHello 和 ping 两个接口分别设置了不同的限流条件:

    1. apiVersion: metaprotocol.aeraki.io/v1alpha1
    2. kind: MetaRouter
    3. metadata:
    4. name: test-metaprotocol-thrift-route
    5. namespace: meta-thrift
    6. spec:
    7. hosts:
    8. - thrift-sample-server.meta-thrift.svc.cluster.local
    9. localRateLimit:
    10. conditions:
    11. - match:
    12. method:
    13. tokenBucket:
    14. fillInterval: 60s
    15. maxTokens: 10
    16. tokensPerFill: 10
    17. - match:
    18. attributes:
    19. method:
    20. exact: ping
    21. tokenBucket:
    22. fillInterval: 60s
    23. maxTokens: 100
    24. tokensPerFill: 100

    可以同时设置服务粒度的限流规则和按照条件的限流规则,这适用于需要对一个服务的所有请求设置一个整体的限流规则,同时又需要对某一组或者几组请求设置例外的情况。

    在向 Sidecar Proxy 下发的配置中, Aeraki 在 VirtualInbound Listener 中服务对应的 FilterChain 中设置了 MetaProtocol Proxy。

    Aeraki 会将 MetaRouter 中配置的限流规则翻译为 local rate limit filter 的限流配置,通过 Aeraki 下发给 MetaProtocol Proxy。

    可以通过下面的命令查看服务的 sidecar proxy 的配置:

    1. aerakictl_sidecar_config server-v1 meta-thrift |fx

    其中 Thrift 服务的 Inbound Listener 中的 MetaProtocol Proxy 配置如下所示: