Dubbo高級應用事件之集羣容錯

目錄:

  1. 什麼是容錯
  2. Dubbo容錯模式
  1. Dubbo集羣模式配置

 

什麼是容錯?

在分佈式架構的網絡通信中,容錯能力是必須要具備的。那什麼叫做容錯暱?簡單來說就是服務容忍錯誤的能力,具體來說,我們的系統在網絡通信中會遇到許多不確定的因素導致請求失敗,例如網絡延遲、網絡中斷、服務異常等等,當服務的調用者調用服務提供者提供的接口時,如果因爲上述原因出現請求失敗,那對於服務調用者來說,就需要一種機制策略來應對。Dubbo中提供了集羣容錯的的機制可以優雅的處理這種錯誤。

 

Dubbo容錯模式

Dubbo提供了9種容錯模式,默認的是Failover Cluster。如果這9種模式不能滿足你的實際需求,還可以進行擴展。這也是Dubbo的強大之處,幾乎所有的功能都進行了插拔式的擴展。

 

Failover Cluster

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

重試次數配置如下:

 

<dubbo:service retries="2" />

<dubbo:reference retries="2" />

<dubbo:reference> <dubbo:method name="findFoo" retries="2" /> </dubbo:reference>

 

Failfast Cluster

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

Failsafe Cluster

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

Failback Cluster

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

Forking Cluster

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

Broadcast Cluster

廣播調用所有提供者,逐個調用,任意一臺報錯則報錯。通常用於通知所有提供者更新緩存或日誌等本地資源信息。

現在廣播調用中,可以通過 broadcast.fail.percent 配置節點調用失敗的比例,當達到這個比例後,BroadcastClusterInvoker 將不再調用其他節點,直接拋出異常。 broadcast.fail.percent 取值在 0~100 範圍內。默認情況下當全部調用失敗後,纔會拋出異常。 broadcast.fail.percent 只是控制的當失敗後是否繼續調用其他節點,並不改變結果(任意一臺報錯則報錯)。broadcast.fail.percent 參數 在 dubbo2.7.10 及以上版本生效。

Broadcast Cluster 配置 broadcast.fail.percent。

broadcast.fail.percent=20 代表了當 20% 的節點調用失敗就拋出異常,不再調用其他節點。

 

@reference(cluster = "broadcast", parameters = {"broadcast.fail.percent", "20"})

 

Available Cluster

調用目前可用的實例(只調用一個),如果當前沒有可用的實例,則拋出異常。通常用於不需要負載均衡的場景。

Mergeable Cluster

將集羣中的調用結果聚合起來返回結果,通常和group一起配合使用。通過分組對結果進行聚合並返回聚合後的結果,比如菜單服務,用group區分同一接口的多種實現,現在消費方需從每種group中調用一次並返回結果,對結果進行合併之後返回,這樣就可以實現聚合菜單項。

ZoneAware Cluster

多註冊中心訂閱的場景,註冊中心集羣間的負載均衡。對於多註冊中心間的選址策略有如下四種

  1. 指定優先級:preferred="true"註冊中心的地址將被優先選擇

<dubbo:registry address="zookeeper://127.0.0.1:2181" preferred="true" />

  1. 同中心優先:檢查當前請求所屬的區域,優先選擇具有相同區域的註冊中心

<dubbo:registry address="zookeeper://127.0.0.1:2181" zone="beijing" />

  1. 權重輪詢:根據每個註冊中心的權重分配流量

<dubbo:registry id="beijing" address="zookeeper://127.0.0.1:2181" weight="100" /> <dubbo:registry id="shanghai" address="zookeeper://127.0.0.1:2182" weight="10" />

  1. 缺省值:選擇一個可用的註冊中心

 

集羣模式配置

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

<dubbo:service cluster="failsafe" />

@DubboService(cluster = "failsafe")

<dubbo:reference cluster="failsafe" />

@DubboReference(cluster = "failsafe")

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