天天看點

(十)Dubbo性能調優參數

Dubbo性能調優參數需要根據各自業務進行調整。

建議多在provider端配置屬性,原因如下:

  • 作為服務的提供方,比服務消費方更清楚服務的性能參數,如調用的逾時時間、合理的重試次數等
  • 在 Provider 端配置後,Consumer 端不配置則會使用 Provider 端的配置,即 Provider 端的配置可以作為 Consumer 的預設值 。否則,Consumer 會使用 Consumer 端的全局設定,這對于 Provider 是不可控的,并且往往是不合理的。

配置的覆寫規則:

    1. 方法級别配置優于接口級别,即小 Scope 優先
    1. Consumer 端配置優于 Provider 端配置

1、服務端

1.1、dubbo:service

<dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService"
    timeout="300" retries="2" loadbalance="random" actives="0" />
 
<dubbo:service interface="com.alibaba.hello.api.WorldService" version="1.0.0" ref="helloService"
    timeout="300" retries="2" loadbalance="random" actives="0" >
    <dubbo:method name="findAllPerson" timeout="10000" retries="9" loadbalance="leastactive" actives="5" />
<dubbo:service/>           

複制

建議在 Provider 端配置的 Consumer 端屬性有:

  1. timeout

    :方法調用的逾時時間
  2. retries

    :失敗重試次數,預設是 2 2
  3. loadbalance

    :負載均衡算法,
    • 預設是随機

      random

    • 還可以配置輪詢

      roundrobin

    • 最不活躍優先

      leastactive

    • 一緻性哈希

      consistenthash

  4. actives

    :消費者端的最大并發調用限制,即當 Consumer 對一個服務的并發調用到上限後,新調用會阻塞直到逾時,在方法上配置

    dubbo:method

    則針對該方法進行并發限制,在接口上配置

    dubbo:service

    ,則針對該服務進行并發限制

在 Provider 端配置合理的 Provider 端屬性:

<dubbo:protocol threads="200" /> 
<dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService"
    executes="200" >
    <dubbo:method name="findAllPerson" executes="50" />
</dubbo:service>           

複制

建議在 Provider 端配置的 Provider 端屬性有:

  1. threads

    :服務線程池大小
  2. executes

    :一個服務提供者并行執行請求上限,即當 Provider 對一個服務的并發調用達到上限後,新調用會阻塞,此時 Consumer 可能會逾時。在方法上配置

    dubbo:method

    則針對該方法進行并發限制,在接口上配置

    dubbo:service

    ,則針對該服務進行并發限制

1.2、dubbo:protocol

dubbo協定預設端口為

20880

,如果沒有配置port,則自動采用預設端口,如果配置為**-1**,則會配置設定一個沒有被占用的端口。Dubbo 2.4.0+,配置設定的端口在協定預設端口的基礎上增長,確定端口段可控。

建議使用固定端口暴露服務,而不要使用随機端口。

這樣在注冊中心推送有延遲的情況下,消費者通過緩存清單也能調用到原位址,保證調用成功。

1.3、dubbo:method

同時該标簽為

<dubbo:service>

<dubbo:reference>

的子标簽,用于控制到方法級。

屬性 對應URL參數 類型 是否必填 預設值 作用 描述 相容性
timeout .timeout int 可選 預設為的timeout 性能調優 方法調用逾時時間(毫秒) 1.0.8以上版本
retries .retries int 可選 預設為dubbo:reference的retries 性能調優 遠端服務調用重試次數,不包括第一次調用,不需要重試請設為0 2.0.0以上版本
loadbalance .loadbalance string 可選 預設為的loadbalance 性能調優 負載均衡政策,可選值:random,roundrobin,leastactive,分别表示:随機,輪詢,最少活躍調用 2.0.0以上版本
async .async boolean 可選 預設為dubbo:reference的async 性能調優 是否異步執行,不可靠異步,隻是忽略傳回值,不阻塞執行線程 1.0.9以上版本
sent .sent boolean 可選 true 性能調優 異步調用時,标記sent=true時,表示網絡已發出資料 2.0.6以上版本
actives .actives int 可選 性能調優 每服務消費者最大并發調用限制 2.0.5以上版本
executes .executes int 可選 性能調優 每服務每方法最大使用線程數限制,此屬性隻在dubbo:method作為dubbo:service子标簽時有效 2.0.5以上版本

2、用戶端

2.1、dubbo:consumer

<dubbo:registry address="zookeeper://${zookeeper.address:127.0.0.1}:${zookeeper.port:2181}"/>
<dubbo:registry id="register2" address="zookeeper://${zookeeper.address:127.0.0.1}:${zookeeper.port:2181}"/>

<dubbo:reference id="userServiceImpl" check="false"
interface="com.meizu.api.UserService" protocol="dubbo" timeout="2000" loadbalance="roundrobin"
retries="3"
/>
<dubbo:consumer id="consumer2" registry="register2" timeout="2000" retries="0" loadbalance="leastactive">
<dubbo:reference id="userServiceImpl2" interface="com.meizu.api.UserService"/>
</dubbo:consumer>           

複制

屬性 對應URL參數 類型 是否必填 預設值 作用 描述 相容性
timeout default.timeout int 可選 1000 性能調優 遠端服務調用逾時時間(毫秒) 1.0.16以上版本
retries default.retries int 可選 2 性能調優 遠端服務調用重試次數,不包括第一次調用,不需要重試請設為0,僅在cluster為failback/failover時有效 1.0.16以上版本
loadbalance default.loadbalance string 可選 random 性能調優 負載均衡政策,可選值:random,roundrobin,leastactive,分别表示:随機,輪詢,最少活躍調用 1.0.16以上版本
async default.async boolean 可選 false 性能調優 是否預設異步執行,不可靠異步,隻是忽略傳回值,不阻塞執行線程 2.0.0以上版本
connections default.connections int 可選 100 性能調優 每個服務對每個提供者的最大連接配接數,rmi、http、hessian等短連接配接協定支援此配置,dubbo協定長連接配接不支援此配置 1.0.16以上版
proxy proxy string 可選 javassist 性能調優 生成動态代理方式,可選:jdk/javassist 2.0.5以上版本

2.2、dubbo:reference

屬性 對應URL參數 類型 是否必填 預設值 作用 描述 相容性
timeout timeout long 可選 預設使用dubbo:consumer的timeout 性能調優 服務方法調用逾時時間(毫秒) 1.0.5以上版本
retries retries int 可選 預設使用dubbo:consumer的retries 性能調優 遠端服務調用重試次數,不包括第一次調用,不需要重試請設為0 2.0.0以上版本
connections connections int 可選 預設使用dubbo:consumer的connections 性能調優 對每個提供者的最大連接配接數,rmi、http、hessian等短連接配接協定表示限制連接配接數,dubbo等長連接配接協表示建立的長連接配接個數 2.0.0以上版本
loadbalance loadbalance string 可選 預設使用dubbo:consumer的loadbalance 性能調優 負載均衡政策,可選值:random,roundrobin,leastactive,分别表示:随機,輪詢,最少活躍調用 2.0.0以上版本
async async boolean 可選 預設使用dubbo:consumer的async 性能調優 是否異步執行,不可靠異步,隻是忽略傳回值,不阻塞執行線程 2.0.0以上版本
actives actives int 可選 性能調優 每服務消費者每服務每方法最大并發調用數 2.0.5以上版本

3、注冊中心

3.1、dubbo:registry

屬性 對應URL參數 類型 是否必填 預設值 作用 描述 相容性
transport registry.transporter string 可選 netty 性能調優 網絡傳輸方式,可選mina,netty 2.0.0以上版本
timeout registry.timeout int 可選 5000 性能調優 注冊中心請求逾時時間(毫秒) 2.0.0以上版本
wait registry.wait int 可選 性能調優 停止時等待通知完成時間(毫秒) 2.0.0以上版本
check check boolean 可選 true 服務治理 注冊中心不存在時,是否報錯 2.0.0以上版本

4、dubbo協定

4.1、dubbo:protocol

屬性 對應URL參數 類型 是否必填 預設值 作用 描述 相容性
threadpool threadpool string 可選 fixed 性能調優 線程池類型,可選:fixed/cached 2.0.5以上版本
threads threads int 可選 200 性能調優 服務線程池大小(固定大小) 2.0.5以上版本
iothreads threads int 可選 cpu個數+1 性能調優 io線程池大小(固定大小) 2.0.5以上版本
accepts accepts int 可選 性能調優 服務提供方最大可接受連接配接數 2.0.5以上版本
payload payload int 可選 8388608(=8M) 性能調優 請求及響應資料包大小限制,機關:位元組 2.0.5以上版本
serialization serialization string 可選 dubbo協定預設為hessian2,rmi協定預設為java,http協定預設為json 性能調優 協定序列化方式,當協定支援多種序列化方式時使用,比如:dubbo協定的dubbo,hessian2,java,compactedjava,以及http協定的json等 2.0.5以上版本
queues queues int 可選 性能調優 線程池隊列大小,當線程池滿時,排隊等待執行的隊列大小,建議不要設定,當線程池滿時應立即失敗,重試其它服務提供機器,而不是排隊,除非有特殊需求。 2.0.5以上版本
charset charset string 可選 UTF-8 性能調優 序列化編碼 2.0.5以上版本
buffer buffer int 可選 8192 性能調優 網絡讀寫緩沖區大小 2.0.5以上版本
heartbeat heartbeat int 可選 性能調優 心跳間隔,對于長連接配接,當實體層斷開時,比如拔網線,TCP的FIN消息來不及發送,對方收不到斷開事件,此時需要心跳來幫助檢查連接配接是否已斷開 2.0.10以上版本