Dubbo執行緒模型

FrankYou發表於2019-01-09

 

連線個數:單連線

連線方式:長連線

傳輸協議:TCP

傳輸方式:NIO非同步傳輸

序列化:Hessian二進位制序列化

適用範圍:傳入傳出引數資料包較小(建議小於100K),消費者比提供者個數多,單一消費者無法壓滿提供者,儘量不要用dubbo協議傳輸大檔案或超大字串。 適用場景:常規遠端服務方法呼叫

Dubbo預設協議採用單一長連線和NIO非同步通訊,適合於小資料量大併發的服務呼叫,以及服務消費者機器數遠大於服務提供者機器數的情況。

缺點:

Dubbo預設協議不適合傳送大資料量的服務,比如傳檔案,傳視訊等,除非請求量很低。

事件處理執行緒說明
如果事件處理的邏輯能迅速完成,並且不會發起新的IO請求,比如只是在記憶體中記個標識,則直接在IO執行緒上處理更快,因為減少了執行緒池排程。
但如果事件處理邏輯較慢,或者需要發起新的IO請求,比如需要查詢資料庫,則必須派發到執行緒池,否則IO執行緒阻塞,將導致不能接收其它請求。
如果用IO執行緒處理事件,又在事件處理過程中發起新的IO請求,比如在連線事件中發起登入請求,會報“可能引發死鎖”異常,但不會真死鎖。


Dispatcher
all 所有訊息都派發到執行緒池,包括請求,響應,連線事件,斷開事件,心跳等。
direct 所有訊息都不派發到執行緒池,全部在IO執行緒上直接執行。
message 只有請求響應訊息派發到執行緒池,其它連線斷開事件,心跳等訊息,直接在IO執行緒上執行。
execution 只請求訊息派發到執行緒池,不含響應,響應和其它連線斷開事件,心跳等訊息,直接在IO執行緒上執行。
connection 在IO執行緒上,將連線、斷開事件放入佇列,有序逐個執行,其它訊息派發到執行緒池。


ThreadPool
fixed 固定大小執行緒池,啟動時建立執行緒,不關閉,一直持有。(預設)
cached 快取執行緒池,空閒一分鐘自動刪除,需要時重建。
limited 可伸縮執行緒池,但池中的執行緒數只會增長不會收縮。(為避免收縮時突然來了大流量引起的效能問題)。

配置如:

<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100"/>

 

屬性                                                                   對應URL引數                                               型別是否必填預設值作用描述相容性
id   string 可選 dubbo 配置關聯 協議BeanId,可以在<dubbo:service protocol="">中引用此ID,如果ID不填,預設和name屬性值一樣,重複則在name後加序號。 2.0.5以上版本
name <protocol> string 必填 dubbo 效能調優 協議名稱 2.0.5以上版本
port <port> int 可選

dubbo協議預設埠為20880,rmi協議預設埠為1099,

http和hessian協議預設埠為80 
如果配置為-1 或者 沒有配置port,則會分配一個沒有被佔用的埠。

Dubbo 2.4.0+,分配的埠在協議預設埠的基礎上增長,確保埠段可控。

服務發現 服務埠 2.0.5以上版本
host <host> string 可選 自動查詢本機IP 服務發現 -服務主機名,多網路卡選擇或指定VIP及域名時使用,為空則自動查詢本機IP,-建議不要配置,讓Dubbo自動獲取本機IP 2.0.5以上版本
threadpool threadpool string 可選 fixed 效能調優 執行緒池型別,可選:fixed/cached 2.0.5以上版本
threads threads int 可選 100 效能調優 服務執行緒池大小(固定大小) 2.0.5以上版本
iothreads threads int 可選 cpu個數+1 效能調優 io執行緒池大小(固定大小) 2.0.5以上版本
accepts accepts int 可選 0 效能調優 服務提供方最大可接受連線數 2.0.5以上版本
payload payload int 可選 88388608(=8M) 效能調優 請求及響應資料包大小限制,單位:位元組 2.0.5以上版本
codec codec string 可選 dubbo 效能調優 協議編碼方式 2.0.5以上版本
serialization serialization string 可選 dubbo協議預設為hessian2,rmi協議預設為java,http協議預設為json 效能調優 協議序列化方式,當協議支援多種序列化方式時使用,比如:dubbo協議的dubbo,hessian2,java,compactedjava,以及http協議的json等 2.0.5以上版本
accesslog accesslog string/boolean 可選   服務治理 設為true,將向logger中輸出訪問日誌,也可填寫訪問日誌檔案路徑,直接把訪問日誌輸出到指定檔案 2.0.5以上版本
path <path> string 可選   服務發現 提供者上下文路徑,為服務path的字首 2.0.5以上版本
transporter transporter string 可選 dubbo協議預設為netty 效能調優 協議的服務端和客戶端實現型別,比如:dubbo協議的mina,netty等,可以分拆為server和client配置 2.0.5以上版本
server server string 可選 dubbo協議預設為netty,http協議預設為servlet 效能調優 協議的伺服器端實現型別,比如:dubbo協議的mina,netty等,http協議的jetty,servlet等 2.0.5以上版本
client client string 可選 dubbo協議預設為netty 效能調優 協議的客戶端實現型別,比如:dubbo協議的mina,netty等 2.0.5以上版本
dispatcher dispatcher string 可選 dubbo協議預設為all 效能調優 協議的訊息派發方式,用於指定執行緒模型,比如:dubbo協議的all, direct, message, execution, connection等 2.1.0以上版本
queues queues int 可選 0 效能調優 執行緒池佇列大小,當執行緒池滿時,排隊等待執行的佇列大小,建議不要設定,當執行緒程池時應立即失敗,重試其它服務提供機器,而不是排隊,除非有特殊需求。 2.0.5以上版本
charset charset string 可選 UTF-8 效能調優 序列化編碼 2.0.5以上版本
buffer buffer int 可選 8192 效能調優 網路讀寫緩衝區大小 2.0.5以上版本
heartbeat heartbeat int 可選 0 效能調優 心跳間隔,對於長連線,當物理層斷開時,比如拔網線,TCP的FIN訊息來不及傳送,對方收不到斷開事件,此時需要心跳來幫助檢查連線是否已斷開 2.0.10以上版本
telnet telnet string 可選   服務治理 所支援的telnet命令,多個命令用逗號分隔 2.0.5以上版本
register register boolean 可選 true 服務治理 該協議的服務是否註冊到註冊中心 2.0.8以上版本
contextpath contextpath String 可選 預設為空串 服務治理   2.0.6以上版本

相關文章