本文長度爲 2042字,預計讀完需 1.0MB流量,建議閱讀 6分鐘。
tips:全部「」包裹的文字,只對第一次出現進行紅色高亮顯示。
咳咳,從這篇開始,正式拉開分佈式系統關注點中,我認爲第二重要的內容 —— 「高可用」。微信
本篇的要點主要是明確「高可用」的定義,以及瞭解在分佈式系統下哪些環節要作「高可用」,爲後續要講的策略、方式方案打下基礎。若有1年以上的分佈式系統實戰經驗可酌情選擇跳過本篇。網絡
Tips:「高XX」中的「高」實際上是相對的,越知足指望值,就越是「高」的。
首先,統一下對「高可用」的認知。架構
作個通俗一點的類比:獨生子女時代的子女就是「單體應用」,若是出意外了,父母就「失獨」了,整個家族的傳承就斷了,「不可用」了。然而,二胎政策就是經過分佈式(冗餘)來下降出現這個問題的機率,從而提升「可用性」。負載均衡
對於「高可用」,專業的解釋是:分佈式
「高可用」指的是經過儘可能縮短因平常維護操做(計劃)和突發的系統崩潰(非計劃)所致使的停機時間,以提升系統和應用的可用性。
—— 百度百科
簡而言之,無論發生了什麼(哪怕是地震、洪水了),可以讓用戶儘量的無感知,依舊能正常使用系統,也就是越「高可用」的。性能
爲何在「數據一致性」後面就聊「高可用」呢?個人理解是,分佈式系統的關鍵是作冗餘,可是冗餘的最大敵人倒是「數據一致性」。咱們經過冗餘打破了原先的瓶頸,打開了一些新的通道。如,能夠去爭取更高的可用性、更高的性能等等。可是這其中,屬「高可用」最重要。從上面引用中的解釋也能夠看到,要想盡量的下降停機時間,單體應用的天花板總會更快的到來。就比如讓一臺電腦永遠保持運行是困難的,期間總得更新幾回操做系統、忽然出現幾回硬件故障,甚至機房的光纖被挖斷了!那麼這個時候就處於「不可用」狀態。優化
也所以,我認爲「高可用」的價值或者說意義,一定是在咱們作分佈式系統得到的其它好處之上的,好比「高性能」之類。由於,在必定範圍內,所謂的「高性能」其實經過優化單體應用也有可能達到某個指望值,可是「高可用」則必然須要依賴分佈式系統才能達到。spa
通常咱們講到最多的是用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等,有興趣的小夥伴們能夠自行研究下。
這篇先起個步,下篇聊聊有哪些作「負載均衡」的策略,用圖說話。
做者:Zachary( 我的微信號:Zachary-ZF)
微信公衆號(首發): 跨界架構師。<-- 點擊查閱近期熱門文章
按期發表原創內容: 架構設計丨分佈式系統丨產品丨運營丨一些深度思考。
掃碼加入小圈子 ↓