dubbo是乙個分布式服務框架,能避免單點故障和支援服務的橫向擴容。乙個服務通常會部署多個例項。如何從多個服務 provider 組成的集群中挑選出乙個進行呼叫,就涉及到乙個負載均衡的策略。
在討論負載均衡之前,我想先解釋一下這3個概念。
負載均衡
集群容錯
服務路由
這3個概念容易混淆。他們都描述了怎麼從多個 provider 中選擇乙個來進行呼叫。那他們到底有什麼區別呢?下面我來舉乙個簡單的例子,把這幾個概念闡述清楚吧。
有乙個dubbo的使用者服務,在北京部署了10個,在上海部署了20個。乙個杭州的服務消費方發起了一次呼叫,然後發生了以下的事情:
根據配置的路由規則,如果杭州發起的呼叫,會路由到比較近的上海的20個 provider。
根據配置的隨機負載均衡策略,在20個 provider 中隨機選擇了乙個來呼叫,假設隨機到了第7個 provider。
結果呼叫第7個 provider 失敗了。
根據配置的failover集群容錯模式,重試其他伺服器。
重試了第13個 provider,呼叫成功。
上面的第1,2,4步驟就分別對應了路由,負載均衡和集群容錯。 dubbo中,先通過路由,從多個 provider 中按照路由規則,選出乙個子集。再根據負載均衡從子集中選出乙個 provider 進行本次呼叫。如果呼叫失敗了,根據集群容錯策略,進行重試或定時重發或快速失敗等。 可以看到dubbo中的路由,負載均衡和集群容錯發生在一次rpc呼叫的不同階段。最先是路由,然後是負載均衡,最後是集群容錯。 本文件只討論負載均衡,路由和集群容錯在其他的文件中進行說明。
randomloadbalance:隨機負載均衡。隨機的選擇乙個。是dubbo的預設負載均衡策略。
roundrobinloadbalance:輪詢負載均衡。輪詢選擇乙個。
leastactiveloadbalance:最少活躍呼叫數,相同活躍數的隨機。活躍數指呼叫前後計數差。使慢的 provider 收到更少請求,因為越慢的 provider 的呼叫前後計數差會越大。
consistenthashloadbalance:一致性雜湊負載均衡。相同引數的請求總是落在同一臺機器上。
dubbo負載均衡
在集群負載均衡時,dubbo提供了多種均衡策略,預設為random隨機呼叫。random loadbalance 隨機,按權重設定隨機概率。在乙個截面上碰撞的概率高,但呼叫量越大分布越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。roundrobin loadbalance 輪循,...
dubbo負載均衡
負載均衡 在集群負載均衡時,dubbo 提供了多種均衡策略,預設為 random 隨機呼叫。負載均衡策略 random loadbalance 1 隨機,按權重設定隨機概率。2 在乙個截面上碰撞的概率高,但呼叫量越大分布越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。roundro...
Dubbo 負載均衡
負載均衡策略 dubbo內建了四種負載均衡策略 randomloadbalance 隨機負載均衡,預設的策略 roundrobinloadbalance 輪詢負載均衡 leastactiveloadbalance 最少活躍呼叫數 consistenhashloadbalance 一致性雜湊,相同引數...