默認狀況下,dubbo 是 random load balance 隨機調用實現負載均衡,能夠對 provider 不一樣實例設置不一樣的權重,會按照權重來負載均衡,權重越大分配流量越高,通常就用這個默認的就能夠了。java
這個的話默認就是均勻地將流量打到各個機器上去,可是若是各個機器的性能不同,容易致使性能差的機器負載太高。因此此時須要調整權重,讓性能差的機器承載權重小一些,流量少一些。git
舉個栗子。github
跟運維同窗申請機器,有的時候,咱們運氣好,正好公司資源比較充足,剛剛有一批熱氣騰騰、剛剛作好的一批虛擬機新鮮出爐,配置都比較高:8 核 + 16G 機器,申請到 2 臺。過了一段時間,咱們感受 2 臺機器有點不太夠,我就去找運維同窗說,「哥兒們,你能不能再給我一臺機器」,可是這時只剩下一臺 4 核 + 8G 的機器。我要仍是得要。算法
這個時候,能夠給兩臺 8 核 16G 的機器設置權重 4,給剩餘 1 臺 4 核 8G 的機器設置權重 2。負載均衡
這個就是自動感知一下,若是某個機器性能越差,那麼接收的請求越少,越不活躍,此時就會給不活躍的性能差的機器更少的請求。運維
一致性 Hash 算法,相同參數的請求必定分發到一個 provider 上去,provider 掛掉的時候,會基於虛擬節點均勻分配剩餘的流量,抖動不會太大。若是你須要的不是隨機負載均衡,是要一類請求都到一個節點,那就走這個一致性 Hash 策略。dom
失敗自動切換,自動重試其餘機器,默認就是這個,常見於讀操做。(失敗重試其它機器)ide
一次調用失敗就當即失敗,常見於寫操做。(調用失敗就當即失敗)性能
出現異常時忽略掉,經常使用於不重要的接口調用,好比記錄日誌。日誌
失敗了後臺自動記錄請求,而後定時重發,比較適合於寫消息隊列這種。
並行調用多個 provider,只要一個成功就當即返回。
逐個調用全部的 provider。