如何實現分佈式系統的高可用性?

非不定高


高可用性確實是分佈式系統一項重要的指標,跟數據一致性,分區容錯性組成了分佈式系統的CAP原則,本文只針對高可用性分析如下:

高可用性:High Availability,保證分佈式系統在較長的時間內能正常響應,持續可用,業界常用幾個9的說法來說明高可用性,比如說5個9,就是99.999%,全年只能停機幾十分鐘而已!


毫無疑問,單點的系統是無論如何也不可能實現高可用的,因為受到單點故障,服務發佈,網絡延遲等原因,客戶端總會接收不到響應,即服務不可用!

比如數據庫常用的集群手段有:

1,主從複製,讀寫分離:不能做到高可用,如果主機掛了,整個系統的寫功能就不能用了!

2,分庫分表:不能做到高可用,分庫分表是把所有的數據分佈到了很多的分庫中,其中一個分庫掛了,這部分數據就沒了!

3,雙主互備:可以做到高可用,雙主機數據一致,能動態切換主庫,其中一臺壞了,另一臺可提供使用!


雙主互備得到的集群雖然實現了高可用,由於雙機數據一致,限制了整個集群的容量!

分佈式服務的高可用更加的複雜,因為分佈式系統對外是一個整體,換句話說分佈式的高可用需要保證分佈式系統中包括應用系統,數據庫,緩存系統,消息組件等所有服務的高可用性!

高可用性的解決方法一般來說比較單一,包括數據冗餘,故障熔斷,服務轉移!

數據冗餘保證在任何時候最新的數據都不丟失,多份數據冗餘也為後期的數據還原提供基礎!

故障熔斷,服務轉移保證單個服務不可用時,使用熔斷防止服務不可用影響別的服務,並使用最新的健康服務以替換!

針對應用系統的單點,一定要壓測出最大的容納能力,同時可以使用負載均衡的方式搭建集群,服務還應該設計為冪等的,防止數據一致性問題!

高可用性解決方案貌似除了堆機器,沒有更好的辦法,不知道大家有什麼手段,寫出來讓大家學習學習!


哎喲JAVA不錯哦


多考慮數據狀態的同步。


zhangyiant


高可用性的前提是:保證服務系統能夠持續工作,實現高可用性一般有兩種手段: 一種是通過第三方軟件/組件保證系統的可用性;另一種是軟件/組件自身己具備高可用的技術實現。


分享到:


相關文章: