访问限流

当前支持针对 dubbogo 消息的以下内容进行访问限流:

消息类型dubbo消息内容路由规则请求类型
消息头attachment请求头(HEADER)
RPC方法method路径(PATH)

环境准备

参考 dubbogo 官网文档

dubbogo.yaml 配置文件

在 dubbogo 中启用 Polaris 的 TpsLimiter,具体开启配置参考如下

  1. dubbo:
  2. registries:
  3. polaris-1:
  4. protocol: polaris
  5. address: ${北极星服务端IP}:8091
  6. namespace: ${北极星命名空间信息}
  7. token: ${北极星资源鉴权 token} # 如果北极星服务端开启了针对客户端的鉴权,则需要配置该参数
  8. provider:
  9. services:
  10. UserProvider:
  11. interface: org.apache.dubbo.UserProvider.Test
  12. tps.limiter: polaris-limit # 配置 tps.limiter 为 polaris-limiter 即可

说明:

  • Polaris 的访问限流能力是工作在 Provider 侧的。
  • 在使用访问限流能力时,需要先启用 Polaris 在 dubbogo 中的注册发现功能。

如何配置服务限流参数

dubbogo 中的 PolarisMesh TpsLimiter 扩展点实现,能够根据用户配置的限流规则,自动的从当前 RPC 调用上下文以及请求信息中识别出需要参与限流的请求标签信息。

比如对 dubbogo 中的 GetUser 方法,对请求参数 Name 为 Alex 的请求进行限流,速率为10/s。

访问限流 - 图1

  • 请求匹配规则为 请求参数(QUERY)
    • 标签来源: RPC 调用中方法的入参,即 Invoaction.Arguments()
    • 标签键规则
      • 方法仅有一个入参: param.$.${fieldName}, param. 为固定前缀,后面的表达式为标准的 JSONPath expressions,参考文档
      • 方法有多个参数: param[${index}].$.${fieldName}, param[${index}]. 为固定前缀,${index} 代表是方法入参中的第几个参数,下标起始位置从 0 开始;后面的表达式为标准的 JSONPath expressions,参考文档
  • 请求匹配规则为 请求头(HEADER):
    • 标签来源: RPC 调用的额外标签信息,即 Invoaction.Attachments()

验证

可根据 dubbogo example 开展