`
ncs123
  • 浏览: 103324 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Dubbo之调度Dispatcher

阅读更多

一、Dispatcher介绍
    对于Dubbo集群中的Provider角色,有IO线程池和业务处理线程池(默认200)两个线程池,所以当业务的并发比较高,或者某些业务处理变慢,业务线程池就很容易被“打满”,抛出“RejectedExecutionException: Thread pool is EXHAUSTED! ”异常。

<dubbo:provider version="1.0" delay="-5000" timeout="5000" dispatcher="all" threads="400" loadbalance="leastactive" actives="400" />




二、源码分析


    dubbo默认dispatcher=all,threadpool=fix,Provider在收到请求时会调用AllChannelHandler.received方法,如果业务线程池满了会抛出RejectedExecutionException异常,异常处理会调用AllChannelHandler.catch方法,catch方法也需要线程处理,同样抛出RejectedExecutionException异常,但是没有返回信息给Consumer,Consumer会一直等待,直到timeout。我们修改源码,在异常时返回错误信息给Consumer。



三、Dubbo参数

  参数名 作用范围 默认值 说明

备注

actives consumer 0 每服务消费者每服务每方法最大并发调用数 0表示不限制
connections consumer   对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数 dubbo时为1,及复用单链接
accepts provider 0 服务提供方最大可接受连接数 0表示不限制
iothreads provider cpu个数+1 io线程池大小(固定大小)  
threads provider 200 业务线程池大小(固定大小)  
executes provider 0 服务提供者每服务每方法最大可并行执行请求数 0表示不限制
tps provider   指定时间内(默认60s)最大的可执行次数,注意与executes的区别 默认不开启

 

  注意表中参数与图中的对应关系:

        1、当consumer发起一个请求时,首先经过active limit(参数actives)进行方法级别的限制,其实现方式为CHM中存放计数器(AtomicInteger),请求时加1,请求完成(包括异常)减1,如果超过actives则等待有其他请求完成后重试或者超时后失败;

        2、从多个连接(connections)中选择一个连接发送数据,对于默认的netty实现来说,由于可以复用连接,默认一个连接就可以。不过如果你在压测,且只有一个consumer,一个provider,此时适当的加大connections确实能够增强网络传输能力。但线上业务由于有多个consumer多个provider,因此不建议增加connections参数;

        3、连接到达provider时(如dubbo的初次连接),首先会判断总连接数是否超限(acceps),超过限制连接将被拒绝;

        4、连接成功后,具体的请求交给io thread处理。io threads虽然是处理数据的读写,但io部分为异步,更多的消耗的是cpu,因此iothreads默认cpu个数+1是比较合理的设置,不建议调整此参数;

        5、数据读取并反序列化以后,交给业务线程池处理,默认情况下线程池为fixed,且排队队列为0(queues),这种情况下,最大并发等于业务线程池大小(threads),如果希望有请求的堆积能力,可以调整queues参数。如果希望快速失败由其他节点处理(官方推荐方式),则不修改queues,只调整threads;

        6、execute limit(参数executes)是方法级别的并发限制,原理与actives类似,只是少了等待的过程,即受限后立即失败

 

  • 大小: 203.1 KB
  • 大小: 129.8 KB
  • 大小: 83.1 KB
  • 大小: 66 KB
  • 大小: 32.4 KB
分享到:
评论

相关推荐

    Dubbo之《尚硅谷》学习笔记.md

    Dubbo之《尚硅谷》学习笔记

    dubbo资源 dubbo-admin dubbo demo

    Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能,是阿里巴巴开源的重要组件之一。在这个资源包中,我们关注的焦点是Dubbo-admin,它是Dubbo服务治理的核心工具,以及一个基础的Dubbo示例...

    基于Dubbo的分布式任务调度系统.zip

    《基于Dubbo的分布式任务调度系统详解》 在现代企业级应用开发中,分布式任务调度系统扮演着至关重要的角色,它能够有效地管理大量的后台任务,提高系统的并发处理能力,优化资源利用率。本篇文章将深入探讨一个...

    dubbo示例代码dubbo-sample

    【Dubbo 示例代码详解】 Dubbo 是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它主要提供了RPC(远程过程调用)服务,并且包含了服务注册与发现、负载均衡、容错处理、监控等全面的服务治理功能。本示例...

    dubbo-dubbo-2.7.3.rar

    dubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo...

    incubator-dubbo-dubbo-2.6.1

    【标题】"incubator-dubbo-dubbo-2.6.1" 是一个Apache Incubator项目Dubbo的特定版本,这里的2.6.1表示该版本是Dubbo的稳定分支之一。 【描述】提到的"incubator-dubbo-dubbo-2.6.1"表明这是Apache孵化器中的Dubbo...

    dubbodubbo.zip

    《Dubbo技术详解与实战应用》 Dubbo是一款由阿里巴巴开源的高性能、轻量级的服务治理框架,它致力于提供一个简单、高效的分布式服务解决方案。在Java世界里,Dubbo已经成为了微服务架构的重要组成部分,其核心特性...

    dubbo admin jdk1.8

    【标题】"dubbo admin jdk1.8" 指的是使用Java开发工具包(JDK)1.8版本运行的Dubbo管理控制台。Dubbo是阿里巴巴开源的一个高性能、轻量级的服务治理框架,它提供了服务注册、服务发现、调用监控等功能。在JDK1.8...

    Dubbo入门之HelloWorld

    在IT行业中,分布式服务框架是构建大型互联网应用的关键技术之一,Dubbo作为阿里巴巴开源的一款高性能、轻量级的Java RPC框架,受到了广泛的关注和使用。本文将基于"Dubbo入门之HelloWorld"的主题,深入探讨如何从零...

    Dubbo入门之hello world(简单测试版和使用注解加强版)

    用maven构建项目使用spring和multicast广播注册中心方式实现Dubbo入门之hello world(用maven构建项目使用spring和multicast广播注册中心方式实现Dubbo入门之hello world(简单测试版)文档说明以及源码

    dubbo视频教程|基于Dubbo的分布式系统架构实战

    Dubbo是阿里巴巴开源的分布式服务化治理框架(微服务框架),久经阿里巴巴电商平台的大规模复杂业务的高并发考验,到目前为止Dubbo仍然是开源界中体系最完善的服务化治理框架,因此Dubbo被国内大量的的互联网公司和...

    Dubbo入门_实战

    Dubbo正是这样一种资源调度和治理中心。 ##### 4.2 Dubbo的架构图 Dubbo的架构主要涉及以下几个组件: - **服务容器**: 负责启动、加载和运行服务提供者。 - **服务提供者**: 在启动时向注册中心注册自身提供的...

    Dubbo高级视频教程

    - **服务路由**:基于条件和服务分组的路由规则,实现灵活的服务调度。 - **服务降级与限流**:当服务不可用或响应慢时,采用服务降级策略来保障整体系统的稳定性和可用性;同时实施服务限流措施防止过载。 #### 五...

    Dubbo监控系统配置

    ### Dubbo监控系统配置详解 #### 一、Dubbo监控系统概述 Dubbo是一款高性能、轻量级的开源服务框架,旨在提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo提供了包括服务自动注册与发现、...

    springboot+quartz集群:通过动态配置调度dubbo接口/http接口代码实现

    在项目中,我们可以通过Quartz来调度Dubbo接口,使得定时任务能够调用远程服务。HTTP Job则是通过HTTP请求来执行任务,这种方式更加灵活,可以调用任何暴露HTTP接口的服务。 要实现动态配置,我们需要一个用户界面...

    尚硅谷最新dubbo视频

    本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...

    dubbo-admin包

    【标题】"dubbo-admin包"是Dubbo框架的一个重要组成部分,主要用作服务治理的管理界面。这个压缩包包含了运行Dubbo管理控制台所需的所有文件,使得开发者和运维人员可以方便地监控、管理和配置Dubbo服务。 【描述】...

    dubbo监控dubbo-monitor

    【标题】:Dubbo监控——Dubbo-Monitor详解 【描述】:Dubbo-Monitor是Dubbo框架中的一个重要组成部分,它提供了对服务治理的实时监控功能。作为一个强大的微服务治理工具,Dubbo-Monitor能够帮助开发者和运维人员...

    dubbo xsd的支持

    在IT行业中,Dubbo是一个非常知名的Java开源框架,主要用于实现分布式服务治理。它由阿里巴巴开发并维护,旨在提供高性能、轻量级的服务间调用方案。"dubbo.xsd"文件是Dubbo框架中用于XML配置文件解析的重要组成部分...

    Dubbo分布式服务框架视频教程(18G)

    一套完整的Dubbo分布式服务框架视频教程(18G+),内部另有strom从入门到精通视频教学、大数据strom实战项目教学、mycat视频教学、Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)、小象学院-Redis从入门...

Global site tag (gtag.js) - Google Analytics