阿里 sentinel —— cluster 模块浅析

  • 阿里 sentinel —— core 模块浅析 一文中介绍了 sentinel 组件的功能和一些核心概念,项目中只需依赖 sentinel-core 模块便可实现单体应用的限流、熔断等核心功能
  • 本文介绍 seninel-cluster 模块,主要介绍它的功能及应用

1 sentinel-cluster 模块的作用

  • sentinel-cluster 主要提供微服务中一个应用部署多个实例的全局限流功能(只提供 qps 限流)
  • 开启全局限流模式后,client 会向 server 请求 token,限流功能统一有 server 来管理
  • server 端提供了两种全局限流策略,每种策略对应一种情景的解决
  • 通过 设置 FlowRule.clusterMode = true 对某个资源开启 cluster 模式,默认为 local 模式

2 全局限流中两种策略讨论

  • 通过 设置 FlowRule.clusterConfig.thresholdType = 1 对某个资源开启 全局阈值 策略,默认为 阈值均摊 策略
2.1 阈值均摊策略
  • cluster 模式下,设置 阈值均摊 策略后,全局 qps 的值为:n * v,n 为实例数,v 为资源对应的 qps 阈值
  • 解决的情景:local 模式下,多实例中,请求分布不均导致的全局通过流量低于多实例总体的总值
2.2 全局阈值策略
  • cluster 模式下,设置 全局阈值 策略后,全局的 qps 为定值:v,为资源对应的 qps 阈值

  • 解决的情景:local 模式或 cluster 阈值均摊模式下,随着应用实例的增加,全局 qps 也会不断提高,这样可能会导致应用的下游(如数据库)承担不了太多请求


3 cluster 模式配置

  • cluster 模式又可按 server 的性质分为 独立 server 模式、嵌入 server 模式
  • 独立 server 模式:server 只用来管理 client 端来的 token 请求,可以管理多个应用
  • 嵌入 server 模式:server 端是一个应用中多个实例的一个,可以方便的切换 server,但只能管理它对应的应用,耦合性高
3.1 独立 server 模式
1 server 需要监听如下几个配置
  • namespaceSet: 一般每个应用对应一个 namespace,server 需要监听它管理的所有应用

    • namespaceSet 初始化的时候,会去注册每个 namespace 对应的 flowRules 和 paramFlowRules 的监听。注册的关键是:ClusterFlowRuleManager.propertySupplier 属性
    • 所以,需要在 namespaceSet 监听前,设置 ClusterFlowRuleManager.propertySupplier 属性
    //setPropertySupplier 要在 registerNamespaceSetProperty 之前
    ClusterFlowRuleManager.setPropertySupplier(namespace -> {
         
        ReadableDataSource<String, List<FlowRule>> ds = 配置远端数据源(namespace);
        return ds.getProperty();
    });// 同理 paramFlowRules
    ReadableDataSource<String, Set<String>> namespaceDs = 配置远端数据源;
    ClusterServerConfigManager.registerNamespaceSetProperty(namespaceDs.getProperty());
    
  • ServerTransportConfig

    • port:设置 server 端接收 client 端 token 的端口
    • idleSeconds:设置服务端定期断开客户端闲置超过 idleSeconds 的连接
    • 只有 port 改变时,才会重启服务
    ReadableDataSource<String, ServerTransportConfig> transportConfigDs = 配置远端数据源;
    ClusterServerConfigManager.registerServerTransportProperty(transportConfigDs.getProperty());
    
  • ServerFlowConfig

    • maxAllowedQps:服务端最大 qps,为了保护服务端,默认为 30000
    • exceedCount:这个参数乘以 全局阈值,才是正真的全局阈值,默认为 1.0
    • maxOccupyRatio:和流量整型模式中的等待请求数有关吧,默认为 1.0
    • intervalMs/sampleCount:窗口大小/窗口的桶个数,用于统计,默认为1000/10
    ReadableDataSource<String, ServerFlowConfig> ServerFlowConfigs = 配置远端数据源;
    ClusterServerConfigManager.registerGlobalServerFlowProperty(ServerFlowConfigs.getProperty())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值