分散式系統關注點——初識「高可用」
本文長度為 2042字 ,建議閱讀 6分鐘。 所有「」包裹的文字,只對第一次出現進行高亮顯示。
咳咳,從這篇開始,正式拉開分散式系統關注點中,我認為第二重要的內容 —— 「 高可用 」。
本篇的要點主要是明確「高可用」的定義,以及瞭解在分散式系統下哪些環節要做「高可用」,為後續要講的策略、方式方案打下基礎。如有1年以上的分散式系統實戰經驗可酌情選擇跳過本篇。
Tips:「高XX」中的“高”其實是相對的,越滿足期望值,就越是“高”的。
一、「高可用」的作用?
首先,統一下對「高可用」的認知。
做個通俗一點的類比:獨生子女時代的子女就是“單體應用”,如果出意外了,父母就「失獨」了,整個家族的傳承就斷了,“不可用”了。然而,二胎政策就是透過分散式(冗餘)來降低出現這個問題的機率,從而提高“可用性”。
對於「高可用」,專業的解釋是:
「高可用」指的是透過儘量縮短因日常維護操作(計劃)和突發的系統崩潰(非計劃)所導致的停機時間,以提高系統和應用的可用性。
—— 百度百科
簡而言之,不管發生了什麼(哪怕是地震、洪水了),能夠讓使用者儘可能的無感知,依舊能正常使用系統,也就是越「高可用」的。
為什麼在「 資料一致性 」後面就聊「高可用」呢?我的理解是,分散式系統的關鍵是做冗餘,但是冗餘的最大敵人卻是「資料一致性」。我們透過冗餘打破了原先的瓶頸,開啟了一些新的通道。如,可以去爭取更高的可用性、更高的效能等等。但是這其中,屬「高可用」最重要。從上面引用中的解釋也可以看到,要想盡可能的降低停機時間,單體應用的天花板總會更快的到來。就好比讓一臺電腦永遠保持執行是困難的,期間總得更新幾次作業系統、突然出現幾次硬體故障,甚至機房的光纖被挖斷了!那麼這個時候就處於“不可用”狀態。
也因此,我認為「高可用」的價值或者說意義,必定是在我們做分散式系統獲得的其它好處之上的,比如「 高效能 」之類。因為,在一定範圍內,所謂的「高效能」其實透過最佳化單體應用也有可能達到某個期望值,但是「高可用」則必然需要依賴分散式系統才能達到。
二、如何來衡量「高可用」
一般我們講到最多的是用Service Level Agrement來衡量高可用指標,簡稱SLA。不過,其原意表示的是關於網路服務供應商和客戶間的一份合同,其中定義了服務型別、服務質量和客戶付款等術語,其中還包含除了「有效工作時間」之外的其它概念,如頻寬、服務就緒時間(RFSD)、平均故障間隔時間(MTBF)、服務平均恢復時間(MTRS)、平均修理時間(MTTR)等。最初,SLA多用於電信運營商之類的基礎設施所提供的服務中,商定使用者可以享受什麼樣的等級什麼樣的頻寬服務等等。
SLA完整的定義會複雜的多,在軟體系統中主要是取了其中的「有效工作時間」部分。只要系統一直能夠提供服務,我們就可以說系統的可用性是100%,但這隻停留在理想中。如果系統每執行100個時間單位,會有1個時間單位無法提供服務,我們說系統的可用性是99%。貼一張常見的表格圖:
▲圖片來源於網路,版權歸原作者所有
如今,我們的生活越來越依賴於移動網際網路的一些應用,假設支付寶掛了幾個小時,這下好了,刷不了卡了、轉不了帳了、信用卡也還不了了,慌不慌?
不過,相對的,還可以投機的理解為,只要我能保證系統在你使用它的時候是可用的,那麼對外宣傳也可以是「高可用」的。這也是在網際網路普及之前,很多企業的內部C/S架構的資訊系統得以正常使用的原因,比如銀行會在非營業時間更新他們的系統,所以對於服務視窗的營業員來說,系統並沒有不可用,因為那個時候我不需要用它。
三、做「高可用」的本質
做「高可用」用一句話來概括就是:
更快的發現故障,更快的隔離故障。
任何對這2點有幫助的工作就是我們要做的事情。
做任何事情都有主次之分,做高可用的“主”就是「 負載均衡 」。
之前的文章中提到過多次,分散式系統的關鍵是做冗餘,那麼讓這些冗餘能發揮「高可用」作用的就是「負載均衡」。所以,這是最基本的,也是邁向「高可用」的第一步,其它的措施都是建立在「負載均衡」之上的。
「負載均衡」的作用是一個“連線者”,讓上下游之間以我期望的方式“連線”起來。所以,有必要先了解一下這些上下游的全貌,並且從中找到我們要做「負載均衡」的地方。
分散式系統有各式各樣的架構方式,不過本質上都是上圖這樣的一個分層架構。圖中紅點標記出的地方就是我們需要做「負載均衡」的地方,可以看到,就是每兩層之間的連線處。
這些連線處在實際做「負載均衡」的時候,需要結合所處的網路層次。因為在不同的網路層次有不同的做法。如下圖。
一般主流的四層負載均衡和七層負載均衡,前者指的就是傳輸層,主要涉及的協議是TCP、UDP等,後者指的應用層,主要涉及的協議是Http、Https和FTP等。
用來實現「負載均衡」的解決方案有很多,分為基於硬體或者基於軟體的,比較成熟的諸如:F5(支援四層、七層)、LVS(支援四層)、Nginx(支援七層)等等。
近些年,隨著Service Mesh的興起,隨著湧現了一大批新一代的「負載均衡」解決方案,如Envoy、Istio、Linkerd、Ribbon等,有興趣的小夥伴們可以自行研究下。
四、結語
這篇先起個步,下篇聊聊有哪些做「負載均衡」的策略,用圖說話。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31544142/viewspace-2214850/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分散式系統關注點——「高內聚低耦合」詳解分散式
- 分散式系統關注點(19)——深入淺出「非同步」分散式非同步
- 分散式系統關注點——想通關「限流」?只要這一篇分散式
- 【分散式】 07 系統通訊初識分散式
- 分散式系統關注點——先寫DB還是「快取」?分散式快取
- 分散式系統關注點——360°全方位解讀「快取」分散式快取
- 分散式系統關注點(22)——360°的全方位監控分散式
- 分散式系統關注點——如何去實施「負載均衡」?分散式負載
- 分散式系統關注點(20)——阻塞與非阻塞有什麼區別?分散式
- jeesz分散式架構-分散式高可用分散式架構
- 你男朋友是高可用麼? | 談分散式系統的概念分散式
- 分散式 - 分散式系統的特點分散式
- 分散式系統關注點(18)——「快取穿透」和「快取雪崩」到底啥區別?分散式快取穿透
- 在一個成熟的分散式系統中 如何下手做高可用?分散式
- 【高可用】分散式作業系統 Elastic-Job-Cloud 原始碼分析分散式作業系統ASTCloud原始碼
- 關於系統高可用的思考
- 分散式系統關注點——99%的人都能看懂的「熔斷」以及最佳實踐分散式
- 分散式系統關注點——僅需這一篇,吃透「負載均衡」妥妥的分散式負載
- 關於分散式系統分散式
- 分散式儲存高可用設計分散式
- 高可用性的HDFS—Hadoop分散式檔案系統深度實踐Hadoop分散式
- 「如何設計」高可用的分散式鎖分散式
- Redis高可用分散式內部交流(九)Redis分散式
- 高層次下的分散式系統分散式
- 初識分散式:MIT 6.284系列(一)分散式MIT
- 什麼是分散式系統!以及分散式系統架構的優缺點!分散式架構
- 高可用分散式代理IP池:架構篇分散式架構
- 分散式服務高可用實現:複製分散式
- 主機系統高可用
- 【FastDFS】如何打造一款高可用的分散式檔案系統?這次我明白了!!AST分散式
- LNMP 分散式叢集(六):keepalived 高可用方案LNMP分散式
- 超全面Redis分散式高可用方案:哨兵機制Redis分散式
- 搭建高併發、高可用的系統
- 如何構建分散式系統的知識體系分散式
- 高可用:美團點評智慧支付核心交易系統的可用性實踐
- 分散式系統分散式
- Golang 分散式 ID 生成系統,高效能、高可用、易擴充套件的 id 生成服務Golang分散式套件
- 雲原生時代|分散式系統設計知識圖譜(內含 22 個知識點)分散式