Dubbo性能调优配置

此系列文章将会描述Java框架 Spring Boot、服务治理框架 Dubbo、应用容器引擎 Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。
   本文为服务治理框架Dubbo性能调优配置

本系列文章中所使用的框架版本为Spring Boot 2.0.3-RELEASE,Spring 5.0.7-RELEASE,Dubbo 2.6.2。

Dubbo性能调优配置

本系列文章使用Spring boot集成Dubbo,故只需设置spring.profiles.active属性即可选择对应前缀的配置文件,详见Profile运行环境配置

映射规则

若使用properties文件,只需将 XML 配置的标签名,加属性名,用点分隔,多个属性拆成多行(yml文件注意缩进即可)

如果 XML 有多行同名标签配置,可用 id 号区分,如果没有 id 号将对所有同名标签生效

XML

Properties

<dubbo:application name="foo" />

dubbo.application.name=foo

<dubbo:protocol id="rmi" name="rmi" port="1099"/>

dubbo.protocol.rmi.port=1234

properties配置

application.properties:

dubbo.application.name=foo
dubbo.application.owner=bar
dubbo.registry.address=10.20.153.10:9090
XML配置

application.xml:

<dubbo:application name="foo" owner="bar" />
<dubbo:registry address="10.20.153.10:9090" />
YAML配置

application.yml:

dubbo:
  application:
    name: foo
    owner: bar
  rigistry:
    address: 10.20.153.10:9090

覆盖策略

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dr54RvCY-1648187426452)(http://dubbo.apache.org/docs/zh-cn/user/sources/images/dubbo-properties-override.jpg)]

  1. JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
  2. XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效
  3. Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。

性能调优配置说明及使用

在Provider端多配置Consumer端属性官方推荐

  • 作为服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数,等等
  • 在 Provider 配置后,Consumer 不配置则会使用 Provider 的配置值,即 Provider 配置可以作为 Consumer 的缺省值。否则,Consumer 会使用 Consumer 端的全局设置,这对于 Provider 不可控的,并且往往是不合理的

以下配置使用properties文件配置为例,展示推荐性能调优配置的说明及使用

provider

属性

缺省值

作用

描述

timeout

1000

性能调优

远程服务调用超时时间(毫秒)

retries

2

性能调优

远程服务调用重试次数,不包括第一次调用,不需要重试请设为0

connections

100

性能调优

对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数

loadbalance

random

性能调优

负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮循,最少活跃调用

cluster

failover

性能调优

集群方式,可选:failover/failfast/failsafe/failback/forking

validation

jvalidation

性能调优

服务参数验证器(默认为JValidation )

filter

内置filter

性能调优

调用拦截器

Provider端推荐配置超时、重连及负载均衡等性能调优参数,即timeout/retries/loadbalance,如需使用参数验证只需配置validation = "true",要使用自定义验证器及拦截器见微服务框架(七)Dubbo实现自定义验证器及拦截器

具体配置如下:

## Provider
dubbo.provider.validation = true
dubbo.provider.timeout = 1500
dubbo.provider.retries = 1
dubbo.provider.loadbalance = random
dubbo.provider.threadpool = fixed
dubbo.provider.threads = 1000
consumer

consumer端的配置参数与provider端基本一致,推荐在provider端配置大部分参数。如有必要,亦可在consumer端配置对应参数,此配置会覆盖provider端配置。

service

属性

缺省值

作用

描述

interface

服务发现

服务接口名

ref

服务发现

服务对象实现引用

version

0.0.0

服务发现

服务版本,建议使用两位数字版本,如:1.0,通常在接口不兼容时版本号才需要升级

group

服务发现

服务分组,当一个接口有多个实现,可以用分组区分

timeout

1000

性能调优

远程服务调用超时时间(毫秒)

retries

2

性能调优

远程服务调用重试次数,不包括第一次调用,不需要重试请设为0

connections

100

性能调优

对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数

loadbalance

random

性能调优

负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮循,最少活跃调用

cluster

failover

性能调优

集群方式,可选:failover/failfast/failsafe/failback/forking

validation

jvalidation

性能调优

服务参数验证器(默认为JValidation )

filter

内置filter

性能调优

调用拦截器

Provider端推荐配置应用于项目下所有@Service,使服务配置统一,若无配置provider参数则具体配置如下:(Dubbo @Service注解)

@Service(version = "1.0.0", 
        timeout = 2000, 
        validation = "true",
        retries = 2,
        loadbalance = "random")

若已配置provider参数,则

@Service(version = "1.0.0")

注:在配置文件中需扫描Dubbo容器(如@Service/@Reference
dubbo.scan.basePackages = org.spring.boot.dubbo.provider

protocol

属性

缺省值

作用

描述

name

dubbo

性能调优

协议名称,可选值为rmi/thrift/memcached/rest等,详见 com.alibaba.dubbo.rpc.Protocol文件

port

dubbo缺省为20880,rmi缺省为1099,http和hessian缺省为80;如果配置为-1 或者 没有配置port,则会分配一个没有被占用的端口。

服务发现

服务端口(推荐配置)

threadpool

fixed

性能调优

线程池类型,可选:fixed(固定线程)/cached(缓存线程)

threads

100

性能调优

服务线程池大小(固定大小)

serialization

dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json

性能调优

协议序列化方式,当协议支持多种序列化方式时使用

transporter

dubbo协议缺省为netty

性能调优

协议的服务端和客户端实现类型,比如:dubbo协议的mina,netty等,可以分拆为server和client配置

推荐使用dubbo协议,同时自定义端口,协议的服务端和客户端实现类型使用netty4,最后根据线上服务的使用情况定义适合的threadpool和threads。具体配置如下:

dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 9900
dubbo.protocol.threadpool = fixed
dubbo.protocol.threads = 1000
dubbo.protocol.transporter = netty4

使用netty4通信模块需引入netty4依赖,如

        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.28.Final</version>
        </dependency>

参考资料:

  1. Dubbo官方文档

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值