前言
大家好,今天开始给大家分享 — Dubbo 专题之 Dubbo 并发控制。在前一个章节中我们介绍了 Dubbo 负载均衡,Dubbo 为我们提供四种负载均衡算法分别是:加权随机算法、加权轮询算法、最少活跃调用数算法、一致性 Hash 算法。同时我们也例举了常见的使用场景并且进行了源码解析来分析其实现原理。有的小伙伴学习了负载均衡算法后可能会想:当我们有很多的消费线程时,如果服务提供端只有少数的实例,那么会不会把我们的服务提供端线程消费殆尽呢?或者超出了我们的业务处理线程池最大接收请求数又会发生什么呢?带着这些疑问我们开始本章节学习,我们会通过介绍什么是并发?怎样控制并发?Dubbo 中是怎样来解决这些问题。下面就让我们快速开始吧!
1. 并发控制简介
首先我们得理解什么是并发
,这里有另外一个概念并行
。下面是来自百科的解释:并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理器系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行即利用每个处理机来处理一个可并发执行的程序,这样多个程序便可以同时执行。下面通过示例图进行说明:
在上图中我们可以看到单核处理在多线程并发执行任务时,同一时刻只有一个线程在执行,在 CPU 时间片切换的时候会调度到其他线程进行执行这就叫做并发。同理当在多核处理器上多个线程同时执行且在不同 CPU 上的时,这就叫做并行执行,每一个线程都在一个CPU上执行且线程间互不影响。
2. 并发控制方式
在 Dubbo 中提供了两大类配置分别是:消费端控制配置、服务提供端控制配置。
2.1 服务端控制配置
- 限定服务的每个方法
<dubbo:service interface="com.muke.dubbocourse.common.api.BookFacade" executes="10" />
- 限定服务的某个方法
<dubbo:service interface="com.muke.dubbocourse.common.api.BookFacade">
<dubbo:method name="queryAll" executes="10" />
</dubbo:service>
2.2 消费端配置
1. 限定服务的所有方法
<dubbo:service interface="com.muke.dubbocourse.common.api.BookFacade" actives="10" />
或者
<dubbo:service interface="com.muke.dubbocourse.common.api.BookFacade">
<dubbo:method name="queryAll" actives="10" />
</dubbo:service>
-
限定服务的某个方法
<dubbo:reference interface