Dubbo作为一个服务治理框架,功能相对来说比较完善,性能也挺不错。但很多同学在使用dubbo的时候,只是简单的参考官方说明进行配置和应用,并没有过多的去思考一些关键参数的意义,最终做出来的效果总是差强人意,接下来我们将给大家详细的介绍Dubbo调优的常用参数以及原理。
一、Dubbo调用模型
二、常用性能调优参数
三、源码以及原理分析
上面的第二节讲解了每个参数的含义,那么接下来我们一起看看具体的源码实现。
3.1 threads 参数目标类:FixedThreadPool.java
目标类:LimitedThreadPool.java
其中,Constants.DEFAULT_QUEUES=200。thread参数配置的是业务处理线程池的最大(或核心)线程数。
3.2 iothreads 参数目标类:NettyServer.java
3.3 queues 参数分别在 FixedThreadPool.java、LimitedThreadPool.java 和 CachedThreadPool.java 中使用,代码详情见上面的章节。 由代码可见,默认值为 0,表示使用同步阻塞队列;如果 queues 设置为小于 0 的值,则使用容量为Integer.MAX_VALUE 的阻塞链表队列;如果为其他值,则使用指定大小的阻塞链表队列。
3.4 connections 参数目标类:DubboProtocol.java
目标类:Dubbolnvoker.java
以上可见,默认值为0,表示针对每个 Provider,所有客户端共享一个长连接;否则,建立指定数量的长连接。在调用时,如果有多个长连接,则使用轮询方式获得一个长连接。
3.5 actives参数目标类: ActiveLimitFilter.java
Consumer 调用时,统计服务和方法维度的调用情况,如果并发数超过设置的最大值,则阻塞当前线程,直到前面有请求处理完成。
3.6 accepts参数目标类: AbstractServer.java
当连接数大于最大值时,关闭当前连接。
3.7 executes参数目标类: ExecuteLimitFilter.java
Provider处理请求时,统计方法维度的调用情况,如果并发数超过设置的最大值,则阻直接抛出异常。
四、总结
希望本文能够帮助大家掌握Dubbo常用的调优参数,同时也希望大家能够通过源码的进一步了解Dubbo底层的实现,让我们对Dubbo的了解不止于应用。如果大家对Dubbo的其他实现感兴趣也可以访问:https://github.com/apache/dubbo 获取所有代码进行深入的研究。