Dubbo的高可用性

2022-02-08 04:28:07 字數 3689 閱讀 1877

現象:zookeeper註冊中心宕機,還可以消費dubbo暴露的服務。

原因:健壯性

l  監控中心宕掉不影響使用,只是丟失部分取樣資料

l  資料庫宕掉後,註冊中心仍能通過快取提供服務列表查詢,但不能註冊新服務

l  註冊中心對等集群,任意一台宕掉後,將自動切換到另一台

l註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地快取通訊

l  服務提供者無狀態,任意一台宕掉後,不影響使用

l  服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復

高可用:通過設計,減少系統不能提供服務的時間;

dubbo直連:

直接連線到伺服器ip位址,繞過zookeeper

在集群負載均衡時,dubbo 提供了多種均衡策略,預設為 random 隨機呼叫。

負載均衡策略

random loadbalance

隨機,按權重設定隨機概率。

在乙個截面上碰撞的概率高,但呼叫量越大分布越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。

roundrobin loadbalance

輪循,按公約後的權重設定輪循比率。

存在慢的提供者累積請求的問題,比如:第二台機器很慢,但沒掛,當請求調到第二台時就卡在那,久而久之,所有請求都卡在調到第二台上。

leastactive loadbalance

最少活躍呼叫數,相同活躍數的隨機,活躍數指呼叫前後計數差。

使慢的提供者收到更少請求,因為越慢的提供者的呼叫前後計數差會越大。

consistenthash loadbalance

一致性 hash,相同引數的請求總是發到同一提供者。

當某一台提供者掛時,原本發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引起劇烈變動。演算法參見:

預設只對第乙個引數 hash,如果要修改,請配置

預設用 160 份虛擬節點,如果要修改,請配置

什麼是服務降級?

當伺服器壓力劇增的情況下,根據實際業務情況及流量,對一些服務和頁面有策略的不處理或換種簡單的方式處理,從而釋放伺服器資源以保證核心交易正常運作或高效運作。

可以通過服務降級功能臨時遮蔽某個出錯的非關鍵服務,並定義降級後的返回策略。

向註冊中心寫入動態配置覆蓋規則:

其中:l  mock=force:return+null 表示消費方對該服務的方法呼叫都直接返回 null 值,不發起遠端呼叫。用來遮蔽不重要服務不可用時對呼叫方的影響。【控制台,遮蔽】

l  還可以改為 mock=fail:return+null 表示消費方對該服務的方法呼叫在失敗後,再返回 null 值,不拋異常。用來容忍不重要服務不穩定時對呼叫方的影響。【控制台,容錯】

在集群呼叫失敗時,dubbo 提供了多種容錯方案,預設為 failover 重試。

集群容錯模式

failover cluster

失敗自動切換,當出現失敗,重試其它伺服器。通常用於讀操作,但重試會帶來更長延遲。可通過 retries="2" 來設定重試次數(不含第一次)。

重試次數配置如下:或或

failfast cluster

快速失敗,只發起一次呼叫,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄。

failsafe cluster

失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作。

failback cluster

失敗自動恢復,後台記錄失敗請求,定時重發。通常用於訊息通知操作。

forking cluster

並行呼叫多個伺服器,只要乙個成功即返回。通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。可通過 forks="2" 來設定最大並行數。

broadcast cluster

廣播呼叫所有提供者,逐個呼叫,任意一台報錯則報錯 [2]。通常用於通知所有提供者更新快取或日誌等本地資源資訊。

集群模式配置

按照以下示例在服務提供方和消費方配置集群模式

或hystrix 旨在通過控制那些訪問遠端系統、服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。hystrix具備擁有回退機制和斷路器功能的執行緒和訊號隔離,請求快取和請求打包,以及監控和配置等功能

1、配置spring-cloud-starter-netflix-hystrix

spring boot官方提供了對hystrix的整合,直接在pom.xml裡加入依賴:

org.springframework.cloud

spring-cloud-starter-netflix-hystrix

1.4.4.release

@enablehystrix

2、配置provider端

在dubbo的provider上增加@hystrixcommand配置,這樣子呼叫就會經過hystrix**。

@service(version = "1.0.0")

public class helloserviceimpl implements helloservice )

@override

public string sayhello(string name) {

// system.out.println("async provider received: " + name);

// return "annotation: hello, " + name;

throw new runtimeexception("exception to show hystrix enabled.");

3、配置consumer端

對於consumer端,則可以增加一層method呼叫,並在method上配置@hystrixcommand。當呼叫出錯時,會走到fallbackmethod = "reliable"的呼叫裡。

@reference(version = "1.0.0")

private helloservice demoservice;

@hystrixcommand(fallbackmethod = "reliable")

public string dosayhello(string name) {

return demoservice.sayhello(name);

public string reliable(string name) {

return "hystrix fallback value";

架構要素 高可用性

實現高可用架構的主要手段是資料和服務的冗餘備份及失效轉移。高可用的應用 應用層主要處理 應用的業務邏輯,因此也稱業務邏輯層,應用的乙個顯著特點是應用的無狀態。所謂無狀態的應用是指應用伺服器不儲存業務的上下文資訊,而僅根據每次請求提交的資料進行相應的業務邏輯處理,多個服務例項 伺服器 之間完全對等,請...

三 vault 高可用性

高可用 vault用於生產環境的私密資訊管理,基於此,vault服務死機會影響到下游的所有使用者,vault被設計的支援高可用部署,降低一台機器或乙個程序宕掉時的破壞性,設計概述 vault的設計目的在於使其在短時間宕機時能保障vault的高可用,而不是水平可伸縮性。vault通常受限於與儲存庫 s...

高可用性Cache池

前段時間開發上線了乙個cache池,使用雙層cache池冗餘,宕掉一台機器的cache失效從1 n降到1 n 2。如果2層cache池分開機器部署,失效率將會降到0。上線不久剛好碰上一次宕機事故,效果很好。該應用有16臺cache伺服器,高峰時每秒訪問約20萬次,平時的命中率約為99.95 宕掉一台...