Dubbo性能調優參數需要根據各自業務進行調整。
建議多在provider端配置屬性,原因如下:
- 作為服務的提供方,比服務消費方更清楚服務的性能參數,如調用的逾時時間、合理的重試次數等
- 在 Provider 端配置後,Consumer 端不配置則會使用 Provider 端的配置,即 Provider 端的配置可以作為 Consumer 的預設值 。否則,Consumer 會使用 Consumer 端的全局設定,這對于 Provider 是不可控的,并且往往是不合理的。
配置的覆寫規則:
-
- 方法級别配置優于接口級别,即小 Scope 優先
-
- 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 端屬性有:
-
:方法調用的逾時時間timeout
-
:失敗重試次數,預設是 2 2retries
-
:負載均衡算法,loadbalance
- 預設是随機
。random
- 還可以配置輪詢
roundrobin
- 最不活躍優先
leastactive
- 一緻性哈希
consistenthash
- 預設是随機
-
:消費者端的最大并發調用限制,即當 Consumer 對一個服務的并發調用到上限後,新調用會阻塞直到逾時,在方法上配置actives
則針對該方法進行并發限制,在接口上配置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 端屬性有:
-
:服務線程池大小threads
-
:一個服務提供者并行執行請求上限,即當 Provider 對一個服務的并發調用達到上限後,新調用會阻塞,此時 Consumer 可能會逾時。在方法上配置executes
則針對該方法進行并發限制,在接口上配置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以上版本 |