天天看點

dubbo的那些高可用機制dubbo的那些高可用機制

dubbo的那些高可用機制

作為經典的RPC架構,dubbo除了簡單的服務遠端調用功能,還會有哪些機制來保證它的高可用呢?

1. 注冊中心當機

由于我們的注冊中心使用的是zookeeper、redis等,是有可能出現當機情況的,那麼dubbo中是如何在注冊中心當機的情況下繼續服務的呢?

本地緩存

注冊中心僅僅是提供了我們發現服務ip和port的功能,但如果我們已經知道了服務提供者的ip和port那麼為什麼還需要注冊中心呢?

是以,在每一次的服務發現之後,dubbo都會将服務對應的節點資訊儲存在本地緩存,下一次在調用就不需要通過注冊中心了。

我們可以簡單的使用一個ConcurrentHashMap來實作。

那如果本地緩存失效了呢?那就是服務方的問題,與我們的zookeeper當機沒有關系,是以調用者會使用舊的ip資訊不斷重試,知道達到重試次數上限。

2. 服務降級

為了應對高并發,我們的伺服器需要對一些非核心業務進行必要的降級,以保證伺服器不會當機,降級的思路有兩種:

屏蔽

對非核心服務,不再進行網絡傳輸,而是直接傳回預設值

容錯(動态)

對于調用失敗的服務,不再進行重試,而是直接傳回預設值

3. 服務容錯

如果我們遠端調用失敗了,那麼應該怎麼處理呢,通常來說,這種問題都沒有最優解,隻有最适合的解決方案。來看看dubbo提供了哪些容錯方案吧。

failover重試(預設)

字面意思,一台伺服器失敗了,那就試試别的伺服器吧

failfast快速失敗

失敗了就報錯

failsafe失敗安全

不管,失敗了直接忽略

failback重發

我一定要成功!重新發起請求,可以設定重發次數

forking并行調用

同時請求多台伺服器,有一個成功就傳回!

boardcast廣播

廣播調用所有提供者,任意一台報錯即失敗