zoukankan      html  css  js  c++  java
  • Dubbo服务限流

    为了防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务的失效,系统可以对访问流量进行控制,这种对集群的保护措施称为服务限流。
    Dubbo中能够实现服务限流的方式较多,可以划分为两类:直接限流间接限流

    • 直接限流:通过对连接数量直接进行限制来达到限流的目的。(官方方案汇总)
    • 间接限流:通过一些非连接数量设置来达到限制流量的目的。(我的偶像总结-Reythor雷)

    一、executes直接限流– 仅提供者端

    该属性仅能设置在提供者端。可以设置为接口级别,也可以设置为方法级别。限制的是服务(方法)并发执行数量。

     

    类级别,服务器端并发执行(或占用线程池线程数)不能超过 10 个

    <dubbo:service interface="com.foo.BarService" executes="10" />

    方法级别,服务器端并发执行(或占用线程池线程数)不能超过 10 个

    1. <dubbo:service interface="com.foo.BarService">
    2. <dubbo:method name="sayHello" executes="10" />
    3. </dubbo:service>

    二、accepts限流 – 仅提供者端

    该属性仅可设置在提供者端的<dubbo:provider/>与<dubbo:protocol/>。用于对指定协议的连接数量进行限制

    三、actives限流 – 两端

    该限流方式与前两种不同的是,其可以设置在提供者端,也可以设置在消费者端。可以设置为接口级别,也可以设置为方法级别

    A、提供者端限流

    根据消费者与提供者间建立的连接类型的不同,其意义也不同

    • 长连接:表示当前长连接最多可以处理的请求个数。与长连接的数量没有关系
    • 短连接:表示当前服务可以同时处理的短连接数量

    类级别

    <dubbo:service interface="com.foo.BarService" actives="10" />

    方法级别

    1. <dubbo:reference interface="com.foo.BarService">
    2. <dubbo:method name="sayHello" actives="10" />
    3. </dubbo:service>

    B、消费者端限流

    根据消费者与提供者间建立的连接类型的不同,其意义也不同:

    • 长连接:表示当前消费者所发出的长连接中最多可以提交的请求个数。与长连接的数量没有关系。
    • 短连接:表示当前消费者可以提交的短连接数量

    类级别

    <dubbo:reference interface="com.foo.BarService" actives="10" />

    方法级别

    1. <dubbo:reference interface="com.foo.BarService">
    2. <dubbo:method name="sayHello" actives="10" />
    3. </dubbo:service>

    四、 connections限流

    可以设置在提供者端,也可以设置在消费者端。限定连接的个数。对于短连接,该属性效果与actives相同。但对于长连接,其限制的是长连接的个数。
               一般情况下,会使connectons与actives联用,让connections限制长连接个数,让actives限制一个长连接中可以处理的请求个数。联用前提:使用默认的Dubbo服务暴露协议

    A、提供者端限流

    类级别

    方法级别

    B、消费者端限流

    类级别

    方法级别

    五、间接限流

    (1) 延迟连接 – 仅消费者端

    仅可设置在消费者端,且不能设置为方法级别。仅作用于Dubbo服务暴露协议。
    将长连接的建立推迟到消费者真正调用提供者时。
    可以减少长连接的数量

    1. <!--设置当前消费者对接口中的每个方法发出链接采用延迟加载-->
    2. <dubbo:reference id="userService" lazy="true"
    3. interface="com.dubbo.service.UserService"/>
    1. <!--设置当前消费者对所有接口中的所有方法发出链接采用延迟加载-->
    2. <dubbo:consumer lazy="true"></dubbo:consumer>

    六、粘连连接 – 仅消费者

    仅能设置在消费者端,其可以设置为接口级别,也可以设置为方法级别。仅作用于Dubbo服务暴露协议

              其会使客户端尽量向同一个提供者发起调用,除非该提供者挂了,其会连接另一台。只要启用了粘连连接,其就会自动启用延迟连接

            其限制的是流向,而非流量

    类级别

    方法级别

    七、负载均衡

    可以设置在消费者端,亦可设置在提供者端;可以设置在接口级别,亦可设置在方法级别。其限制的是流向,而非流量

    官方介绍

    http://dubbo.apache.org/zh-cn/docs/user/demos/concurrency-control.html

  • 相关阅读:
    javaweb基础笔记(2)
    javaweb基础笔记(1)
    java基础笔记(11)
    java基础笔记(10)
    java基础笔记(9)
    洛谷 P2648 赚钱
    AcWing 走廊泼水节 题解
    对于有向图多个点到一个点的求法
    分层图的四倍经验
    洛谷 P4822 [BJWC2012]冻结
  • 原文地址:https://www.cnblogs.com/edda/p/13260260.html
Copyright © 2011-2022 走看看