前言
隨着大型網站的各種高斌發訪問、海量數據處理等場景越來越多,如何實現網站的高可用、易伸縮、可擴展、安全等目標就顯得越來越重要。為了解決這樣一系列問題。大型網站的架構也在不斷發展。提高大型網站的高可用架構,就不得不提分布式系統(Distributed Systems)。下面說一下分布式系統及其相關的概念
在學習分布式系統之前,先了解一下與之相對應的集中式系統是什么樣的。
集中式系統
集中式系統,主要指IBM、HP一個主機帶多個終端。終端沒有數據處理能力,僅負責數據的錄入和輸出。而運算、存儲等全部在主機上進行,也就是我們平常說的單機服務器。
集中式系統的最大特點就是不熟結構非常簡單,底層一般采用IBM、HP等廠商購買的昂貴的大型主機。因此無需要考慮如何對服務進行多節點的部署,也就不用考慮各節點的分布式協作問題。但是,由於采用單機部署、和可能帶來系統大而復雜、難於維護、發生單點故障(單個點發生故障的時候會波及到整個系統或者網絡,從而導致整個系統或者網絡的癱瘓)、擴展性差等問題。
說完集中式系統,再來說一個與分布式很相似的概念-集群
集群
集群是一組獨立的計算機系統構成一個松耦合的多處理器系統,它們之間通過網絡實現進程間的通信。用來提供比集中式系統更具擴展性與可用性的服務平台。集群有兩個關鍵的特性:
- 可擴展性,集群的性能不限於單一的服務實體,新的服務實體可以動態地添加到集群,從而增強集群的性能。
- 高可用性,集群通過服務實體冗余使客戶端免於單點故障。在集群中,同樣的服務可以有多個服務實體來提供。如果一個服務實體掛了,那另一個服務實體就會接管失效的服務實體。集群提供從一個出錯的服務實體切換到另一個正常的服務實體,從而增加了應用的可用性。
為了具有可擴展性和高可用性特點,集群必須具備以下兩大能力:
- 負載均衡,能把任務交均衡地分布到集群環境下的各個服務實體
- 錯誤恢復,由於某種原因,執行某個任務的資源出現故障,另一個服務實體接過哪個任務,接着執行剩下的任務
負載均衡和錯誤恢復都要求各服務實體中有執行統一任務的資源存在,而且對於同一任務的各個資源來說,執行任務所需的信息上下文必須是一樣的。即,資源透明。
實現集群務必要有一下兩大技術:
- 集群地址,集群由多個服務實體組成,集群客戶端通過訪問集群的集群地址獲取集群內部各個服務實體的功能。維護集群地址的設置被稱為負載均衡器。負載均衡器內部負責管理各個服務實體的加入和退出,外部負責集群地址相內部服務實體地址的轉換。有的負載均衡器實現真正的均衡負載算法,有的只支持任務轉換。只是先任務轉換的負載均衡器適用於支持ACTIVE-STANDBY的集群環境,在那里,集群中只有一個服務實體工作,當正在工作的服務實體發生故障時,負載均衡器再把后來的任務切換到另一台服務器實體。
- 內部通信,為了能協同工作、實現負載均衡和錯誤恢復,集群各個實體必須時常通信。比如,負載均衡器對服務實體心跳測試、服務實體間任務執行上下文信息的通信。
集群主要分為三大類
- 高可用集群(High Availability Cluster),俗稱“雙機熱備”,就是兩個節點做成的集群。
- 負載均衡集群(Load Balance Cluster),檢測集群中節點的活動狀態,分攤系統的工作負載。
- 科學計算集群(High Performance Computing Cluster),這類集群致力於提供單個計算機所不能提供的強大的計算能力。
說完集群回到正題-分布式系統。
分布式系統
分布式系統是一個硬件或軟件組件分布在不同的網絡計算機上,彼此之間僅僅通過消息傳遞進行通信和協調的系統。
簡單來說就是一群獨立計算機集合功能對外提供服務,但是對於系統的用戶來說,就像是一台計算機在提供服務一樣。分布式意味着可以采用更多的普通計算機(相對昂貴的大型機)組成分布式集群對外提供服務。計算機越多,CPU、內存、存儲資源等也就越多,能夠處理的並發訪問量也就越大。
從分布式系統的概念中我們知道,各個主機之間通信和協調主要通過網絡進行,所以,分布式系統中的計算機在空間上沒有任何限制,這些計算機可能被放在不同的機櫃上,也可能是放在不同的機房中,還可能是不同的城市,甚至是不同的國家和地區。但是,無論空間上如何分布,一個標准的分布式系統應該具備以下幾個主要特征:
- 分布性,分布式系統中的多肽計算機之間的空間位置上可以隨意分布,系統中的多肽計算機之間沒有主從之分,即沒有控制整個系統的主機,也沒有受控的從機。
- 透明性,資源被所有計算機共享。每台計算機的用戶不僅可以使用本機的資源,還可以使用本分不是系統中的其他計算機的資源。
- 同一性,系統中的若干台計算機可以互相協作來完成一個共同的任務,或者說一個程序可以分布在計算機上並行地運行。
- 通信性,系統中任意兩台計算機都可以通過通信來交換信息。
分布式在解決了網站的高並發問題的同時也帶來了其他問題。首先,分布式的必要條件就是網絡,這可能對性能甚至服務能力造成一定的影響。其次,一個集群中的服務器數量越多,服務器宕機的概率也就越大。另外,由於服務在集群中分布式部署,用戶的請求只會落到其中一台機器上,所以,一旦處理不好就很容易產生數據一致性的問題。
常用的分布式方案
- 分布式應用和服務,講應用和服務進行分層和分割,然后將應用和服務模塊進行分布式部署。這樣做不僅可以提高並發訪問能力、減少數據庫連接和資源消耗,還能使用不同應用復用共同的服務,使業務易於擴展。
- 分布式靜態資源,對於網站的靜態資源如js、css、圖片等資源進行分布式部署可以減輕應用服務器的負載壓力,提高訪問速度。
- 分布式數據和存儲,大型網站常常需要處理海量的數據,單台計算機往往無法提供足夠的內存空間,可以對這些數據進行分布式存儲。
- 分布式計算,隨着計算計算的發展,有些應用需要非常巨大的計算能力才能完成,如果采用集中式計算,需要耗費相當changer的時間來完成。分布式計算將應用分解成許多小的部分,分配給多台計算機處理。這樣可以節約整體計算時間,大大提高計算效率。
分布式系統與集群的區別與聯系
從狹義上來說,分布式系統就是集群,它有許多與集群相似的特性,比如,由多台不同的服務器組成,資源透明,通過消息通信等。但是它又不同於集群,從結構上來說,它的結構比較松散,不像集群那樣有一定組織性,分布式系統的每個節點都可以用來做集群;從部署上來說,集群是多台不同的服務器中部署相同的應用或模塊,分布式則是多台不同的服務器中部署不同的應用或模塊;從業務上來說,集群是講多台服務器執行的是相同的任務,分布式系統是將一個任務分布到多台不同的服務器中,通過相互協作來完成這一任務
CAP理論
一個分布式系統最多只能同時滿足一致性(Consistency)、可用性(Availability)、和分區容錯性(Partition tolerance)這三項中的兩項。
Consistency 一致性
一致性指更新操作成功並返回客戶端完成后,所有的節點在同一時間的數據完全一致。
Availability 可用性
可用性指服務一致可用,而且是正常響應
Partion Tolerance 分區容錯性
分區容錯性指分布式系統在遇到某節點或網絡分區故障的時候,仍然能夠對外提供服務。
BASE理論
BASE是指基本可用(Basically Available)、軟狀態(Soft State)、最終一致性(Eventual Consistency)。
BASE理論是對CAP理論的延伸,核心思想是即使無法做到強一致性(Strong Consistency,CAP的一致性就是強一致性),但應用可以采取合適的方式達到最終一致性(Eventual Consitency)
基本可用(Basically Available)
基本可用是指分布式系統在出現故障的時候,允許損失部分可用性,即保證核心可用。
電商大促時,為了應對訪問量激增,部分用戶可能會被引導到降級頁面,服務層也可能只提供降級服務。這就是損失部分可用性的體現。
軟狀態(Soft State)
軟狀態是指允許系統存在中間狀態,而該狀態不會影響系統整體可用性。分布式存儲一般一份數據至少會有三個副本,允許不同節點間副本同步的延遲這就是軟狀態的體現。MySQL Replication的異步復制也是一種體現。
最終一致性(Eventual Consistency)
最終一致性是指系統中的所有數據副本經過一段時間后,最終能夠達到一致的狀態。弱一致性和強一致性相反,最終一致性是弱一致性的特殊情況。
ACID和BASE的區別與聯系
ACID是傳統數據庫常用的設計理念,追求強一致性模型。BASE支持的是大型分布式系統,提出通過犧牲強一致性獲得高可用性。ACID和BASE代表了兩種截然相反的設計哲學。在分布式系統設計的場景中,系統組件對一致性要求是不同的,因此ACID和BASE會結合着來用。
參考資料:
大神