dubbo 无法访问消费端_Dubbo高级特性应用之服务限流

本文详细介绍了Dubbo服务限流的实现方式,包括服务提供者端的executes、actives、accepts、connections限流,以及服务消费者端的actives、connections配置。此外,还讨论了延迟连接、粘滞连接和负载均衡策略作为间接限流手段。这些限流策略有助于保护系统稳定性和防止过载。
摘要由CSDN通过智能技术生成

概述

服务限流是指当系统资源不够,不足以应对大量请求,即系统资源与访问量出现矛盾的时候,我们为了保证有限的资源能够正常服务,因此对系统按照预设的规则进行流量限制或功能限制的一种策略。在Dubbo框架中,提供了很多用于控制服务集群访问量的属性,可以有效防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务失效甚至系统崩溃。

Dubbo中实现服务限流的方式较多,比如,在服务提供者端,限制每个服务的所有方法或某个方法最大可并行执行请求数(或占用线程池线程数),或限定服务提供者最大可接受连接数等。

在Dubbo中对服务进行限流,可以在服务提供者端设置,也可以在服务消费者端设置,或二者结合进行。

服务提供者端限流

  • executes限流

executes属性用于限制服务的每个方法或某方法最大可并发执行数(或占用线程池线程数),即对方法的并发调用次数。该属性仅能设置在提供者端。可以设置为接口级别,也可以设置为方法级别。

接口级别executes限流示例

方法级别executes限流示例

  • actives限流

actives属性用于限制每个消费服务者对服务的每个方法或某个方法最大并发执行数(或占用连接的请求数),即限制服务提供者的该服务最多可同时接受或处理来自同一个消费服务者的执行数或请求数。

actives与executes区别:

  1. executes限制的是所有服务消费者的并发执行数总和,而actives限制的是单个服务消费者的并发执行数
  2. actives还可以在消费服务者端设置

另外,服务消费者端与服务提供者端建立的连接类型不同,actives意义也稍有不同:

  1. 如果连接类型是长连接,actives表示当前这个服务上的一个长连接最多能够处理的请求个数,对长连接数量没有限制
  2. 如果连接类型是短连接,actives则表示当前这个服务上可以同时处理的短连接数量(每一次连接对应一次执行或一次请求)

针对同一个服务消费者,接口级别actives限流示例(假设是dubbo协议)

针对同一个服务消费者,方法级别actives限流示例(假设是dubbo协议)

  • accepts限流

accepts属性用于限制每协议服务提供者最大可接受连接数。该属性仅可设置在提供者端的与标签,限制当前服务提供者指定协议下所有服务的连接总数。

对使用dubbo协议的服务进行限流示例

  • connections限流

connections属性用于限制每个服务消费者对每个服务提供者在该服务上的最大连接数。connections属性还可以消费者端设置。

一般情况下,我们使用的是默认的dubbo长连接协议,所以,一般会让connections与actives搭配使用。connections限制长连接的数量,而actives限制每个长连接上的请求数量。

针对每个服务消费者,接口级别connections限流示例

针对每个服务消费者,方法级别connections限流示例

负载均衡限流

配置服务的loadbalance属性为最小活跃数leastactive策略,将流量导向负载较轻的服务提供者,本质上限定的是流向,但对于负载较重的服务提供者来说,某种程度上也达到限流(减少)的作用。loadbalance属性可以设置在消费者端,亦可设置在提供者端;可以设置在接口级别,亦可设置在方法级别。

接口级别负载均衡限流示例

方法级别负载均衡限流示例

服务消费者端限流

actives限流

参考服务提供者端,只是改成在dubbo:reference或其子标签dubbo:method配置actives属性。

connections限流

参考服务提供者端,只是改成在dubbo:reference或其子标签dubbo:method配置connections属性。

  • 延迟连接

设置延迟连接的属性为lazy,用于减少长连接数。当有服务消费者真正发起调用时,才会创建长连接。lazy属性仅可在服务消费端设置,不支持方法级别设置。主要,此延迟连接配置只对使用长连接的协议如dubbo协议生效。延迟连接并不会真正限制流量,而是延迟连接的时机,有机会为高负载的服务提供者争取减轻或降低负载的时间。

接口级别延迟连接设置示例

服务消费者端全局设置延迟连接示例

  • 粘滞连接

设置粘滞连接的属性为sticky,粘滞连接用于有状态服务,尽可能让服务消费者端总是向同一提供者发起调用,除非该提供者挂了,再连另一台。sticky属性仅可在服务消费者端配置。粘滞连接将自动开启延迟连接,以减少长连接数。粘滞连接不会真正限制流量,仅仅是限定流向以及有机会为高负载的服务提供者争取减轻或降低负载的时间。

Dubbo 支持方法级别的粘滞连接,如果你想进行更细粒度的控制,还可以这样配置。

  • 负载均衡限流

参考服务提供者端,只是改成在dubbo:reference上配置loadbalance属性。

总结

Dubbo中实现服务限流的方式较多,总体可以划分为两类:直接限流与间接限流。

直接限流,指的是通过对连接或执行调用的数量直接限制来达到限流的目的,超过限制则会让后续的请求等待,直到等待超时或获取到相应服务。直接限流的方式包括executes、actives、accepts、connections等4种。

间接限流,指的是通过非连接或执行调用数量设置的间接手段来达到限流的目的。间接限流的方式包括延迟连接、粘连连接、负载均衡等。

在产品环境中,可以在服务提供者端进行限流,也可以在服务消费者端进行限流;根据项目需求,使用直接或间接或二者结合的方式灵活配置。

#java开发工程师# #架构师#

ecbb9eb1a9b62be7619994e726af839d.png

微服务运维三大利器之服务限流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值