Dubbo學習筆記(三) RPC核心原理和執行緒模型
在幾個典型的RPC使用場景中,包含服務發現,負載均衡,容錯,透明,序列化,網路傳輸等模組.其中RPC協議就是核心模組,主要包括序列化,網路傳輸.只要RPC協議實現了,就可以進行遠端呼叫,其他的負載,容錯,透明,註冊發現都是對RPC呼叫的優化,使他更加穩定健壯.
圖解RPC原理
圖解:
客戶端通過呼叫模組,找到服務發現,獲取服務地址,之後進行負載均衡,容錯等執行RPC協議過程, 經過網路傳輸,反序列化 獲取呼叫的服務介面. 再通過執行緒池,對真實服務進行呼叫, 執行緒返回結果,之後再經過網路 把結果反饋回來.這裡RPC協議的過程是IO執行緒,業務邏輯的執行是業務執行緒,通過執行緒池進行解耦,避免了IO執行緒被服務執行緒拖垮.提高效率,類似於TOMCAT,IO執行緒和工作執行緒.
執行緒模型
如果事件處理的邏輯能迅速完成,並且不會發起新的 IO 請求,比如只是在記憶體中記個標識,則直接在 IO 執行緒上處理更快,因為減少了執行緒池排程。
但如果事件處理邏輯較慢,或者需要發起新的 IO 請求,比如需要查詢資料庫,則必須派發到執行緒池,否則 IO 執行緒阻塞,將導致不能接收其它請求。
如果用 IO 執行緒處理事件,又在事件處理過程中發起新的 IO 請求,比如在連線事件中發起登入請求,會報“可能引發死鎖”異常,但不會真死鎖。
因此,需要通過不同的派發策略和不同的執行緒池配置的組合來應對不同的場景:
<dubbo:protocol name="dubbo"
dispatcher="all" threadpool="fixed" threads="100" />
重點: 這是配置的 協議 協議有個名字 檢視 配置裡面發現 裡面有個
protocol 屬性,可以引用配置好的協議,並且可以引用多協議. 多協議使用逗號分隔.
Dispatcher
all 所有訊息都派發到執行緒池,包括請求,響應,連線事件,斷開事件,心跳等。
direct 所有訊息都不派發到執行緒池,全部在 IO 執行緒上直接執行。
message 只有請求響應訊息派發到執行緒池,其它連線斷開事件,心跳等訊息,直接在 IO 執行緒上執行。
execution 只請求訊息派發到執行緒池,不含響應,響應和其它連線斷開事件,心跳等訊息,直接在 IO 執行緒上執行。
connection 在 IO 執行緒上,將連線斷開事件放入佇列,有序逐個執行,其它訊息派發到執行緒池。
ThreadPool
fixed 固定大小執行緒池,啟動時建立執行緒,不關閉,一直持有。(預設)
cached 快取執行緒池,空閒一分鐘自動刪除,需要時重建。
limited 可伸縮執行緒池,但池中的執行緒數只會增長不會收縮。只增長不收縮的目的是為了避免收縮時突然來了大流量引起的效能問題。
相關文章
- Dubbo RPC執行緒模型 原始碼分析RPC執行緒模型原始碼
- OS學習筆記二: 程式執行緒模型筆記執行緒模型
- Java 多執行緒學習筆記(三)-守護執行緒Java執行緒筆記
- Dubbo執行緒模型執行緒模型
- Dubbo的執行緒模型執行緒模型
- iOS執行緒學習筆記iOS執行緒筆記
- 多執行緒學習筆記執行緒筆記
- (三)Java併發學習筆記–執行緒封閉Java筆記執行緒
- Java 多執行緒學習筆記Java執行緒筆記
- java學習筆記--多執行緒Java筆記執行緒
- Java學習筆記之執行緒Java筆記執行緒
- 多執行緒學習筆記 (轉)執行緒筆記
- 多執行緒筆記 三執行緒筆記
- Linux程式執行緒學習筆記Linux執行緒筆記
- Python學習筆記 - 多執行緒Python筆記執行緒
- Java多執行緒學習筆記(自用)Java執行緒筆記
- C#多執行緒學習筆記C#執行緒筆記
- java學習筆記.04——執行緒池Java筆記執行緒
- Redis基礎知識(學習筆記6--執行緒IO模型)Redis筆記執行緒模型
- java核心技術筆記--執行緒Java筆記執行緒
- Netty 框架學習 —— EventLoop 和執行緒模型Netty框架OOP執行緒模型
- Dubbo 學習筆記筆記
- Dubbo學習筆記筆記
- 深入學習執行緒池原理執行緒
- C# 多執行緒學習筆記 – 1C#執行緒筆記
- Java多執行緒學習筆記(二) (轉)Java執行緒筆記
- Java 多執行緒 學習筆記(二)停止執行緒的幾種方法Java執行緒筆記
- redis執行緒模型-學習小結Redis執行緒模型
- 深入學習redis 的執行緒模型Redis執行緒模型
- Python學習筆記|Python之執行緒Python筆記執行緒
- JAVA學習筆記之 多執行緒賣票Java筆記執行緒
- 《Java 多執行緒程式設計核心技術》筆記——第3章 執行緒間通訊(三)Java執行緒程式設計筆記
- Java執行緒池核心原理剖析Java執行緒
- 執行緒池核心原理淺析執行緒
- Thinking in Java---多執行緒學習筆記(2)ThinkingJava執行緒筆記
- C# 使用執行緒池佇列(學習筆記)C#執行緒佇列筆記
- Java 多執行緒學習筆記(四)yield 介紹Java執行緒筆記
- Java 多執行緒學習筆記(五)synchronized 鎖重入Java執行緒筆記synchronized