Davids原理探究:Dubbo優雅停機原理解析

Dubbo優雅停機原理解析

關注可以查看更多粉絲專享blog~

Dubbo優雅停機原理解析

  1. 收到kill -9進程退出信號,Spring容器會觸發容器銷燬事件。
  2. provider端會取消註冊服務元數據信息。
  3. consumer端會收到最新的地址列表(不包含準備停機的地址)。
  4. Dubbo協議會發送readonly事件報文通知consumer服務不可用。
  5. 服務端等待已經執行的任務結束並拒絕新任務執行。
  6. 最後provider與consumer斷開TCP連接。

註冊中心已經通知了最新服務列表,provider還要發送readonly報文的原因是,註冊中心推送服務可能會由網絡延遲,客戶端接收和計算服務列表可能佔用一些時間。Dubbo協議發送readonly報文時,consumer端會設置響應的provider爲不可用,下次負載均衡的時候就不會調用下線的機器了。

Dubbo2.6.3以後修復了優雅停機的一些bug,之前版本中沒有做到完全的優雅停機的原因是,Spring和Dubbo都註冊了JVM停止的鉤子,這種場景下兩個線程併發執行的時候可能引用一句銷燬的資源,比如Dubbo正在執行的任務需要引用Spring中的Bean,但這時Spring鉤子函數已經關閉了Spring上下文,導致訪問任何Spring資源都會報錯。

相關文章:
Davids原理探究:Dubbo源碼編譯(2.7.8)
Davids原理探究:Dubbo SPI和Java SPI實現原理
Davids原理探究:Dubbo註冊中心(ZooKeeper、Redis)實現原理
Davids原理探究:Dubbo配置解析原理
Davids原理探究:Dubbo服務暴露原理
Davids原理探究:Dubbo服務消費原理
Davids原理探究:Dubbo優雅停機原理解析
Davids原理探究:Dubbo調用流程圖
Davids原理探究:Dubbo路由實現原理
Davids原理探究:Dubbo負載均衡實現原理
Davids原理探究:Dubbo過濾器原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章