初識分佈式架構及意義(一)

 

隨着計算機系統規模變得愈來愈大,將全部的業務單元集中部署在一個或若干個大型機上的體系結構,已經愈來愈不能知足當今計算機系統,尤爲是大型互聯網系統的快速發展,各類靈活多變的系統架構模型層出不窮。分佈式的處理方式愈來愈受到業界的青睞——計算機系統正在經歷一場史無前例的從集中式向分佈式架構的變革。html

集中式與分佈式

集中式系統

所謂的集中式系統就是指由一臺或多臺主計算機組成中心節點,數據集中存儲於這個中心節點中,而且整個系統的全部業務單元都集中部署在這個中心節點上,系統的全部功能均由其集中處理。數據庫

集中式系統的最大的特色就是部署結構很是簡單,底層通常採用從IBM、HP等廠商購買到的昂貴的大型主機。所以無需考慮如何對服務進行多節點的部署,也就不用考慮各節點之間的分佈式協做問題。可是,因爲採用單機部署,極可能帶來系統大而複雜、難於維護、發生單點故障(單個點發生故障的時候會波及到整個系統或者網絡,從而致使整個系統或者網絡的癱瘓)、擴展性差等問題。服務器

分佈式系統

分佈式系統是一個硬件或軟件組件分佈在不一樣的網絡計算機上,彼此之間僅僅經過消息傳遞進行通訊和協調的系統。簡單來講就是一羣獨立計算機集合共同對外提供服務,可是對於系統的用戶來講,就像是一臺計算機在提供服務同樣。分佈式意味着能夠採用更多的普通計算機(相對於昂貴的大型機)組成分佈式集羣對外提供服務。計算機越多,CPU、內存、存儲資源等也就越多,可以處理的併發訪問量也就越大。網絡

從分佈式系統的概念中咱們知道,各個主機之間通訊和協調主要經過網絡進行,因此分佈式系統中的計算機在空間上幾乎沒有任何限制,這些計算機可能被放在不一樣的機櫃上,也可能被部署在不一樣的機房中,還可能在不一樣的城市中,對於大型的網站甚至可能分佈在不一樣的國家和地區。可是,不管空間上如何分佈,一個標準的分佈式系統應該具備如下幾個主要特徵:架構

  • 分佈性併發

    分佈式系統中的多臺計算機之間在空間位置上能夠隨意分佈,同時,機器的分佈狀況也會隨時變更。分佈式

  • 對等性高併發

    分佈式系統中的計算機沒有主/從之分,即沒有控制整個系統的主機,也沒有被控制的從機,組成分佈式系統的全部計算機節點都是對等的。副本(Replica)是分佈式系統最多見的概念之一,指的是分佈式系統對數據和服務提供的一種冗餘方式。在常見的分佈式系統中,爲了對外提供高可用的服務,咱們每每會對數據和服務進行副本處理。數據副本是指在不一樣節點上持久化同一份數據,當某一個節點上存儲的數據丟失時,能夠從副本上讀取該數據,這是解決分佈式系統數據丟失問題最爲有效的手段。另外一類副本是服務副本,指多個節點提供一樣的服務,每一個節點都有能力接收來自外部的請求並進行相應的處理。網站

  • 併發性搜索引擎

    在一個計算機網絡中,程序運行過程的併發性操做是很是常見的行爲。例如同一個分佈式系統中的多個節點,可能會併發地操做一些共享的資源,如何準確並高效地協調分佈式併發操做也成爲了分佈式系統架構與設計中最大的挑戰之一。

  • 缺少全局時鐘

    在分佈式系統中,很難定義兩個事件究竟誰先誰後,緣由就是由於分佈式系統缺少一個全局的時鐘序列控制。

  • 故障老是會發生

    組成分佈式系統的全部計算機,都有可能發生任何形式的故障。除非需求指標容許,在系統設計時不能放過任何異常狀況。

分佈式系統面臨的問題

  • 通訊異常

    分佈式系統須要在各個節點之間進行網絡通訊,所以網絡通訊都會伴隨着網絡不可用的風險或是系統不可用都會致使最終分佈式系統沒法順利完成一次網絡通訊。另外,即便分佈式系統各節點之間的網絡通訊可以正常進行,其延時也會遠大於單機操做,會影響消息的收發的過程,所以消息丟失和消息延遲變得很是廣泛。

  • 網絡分區

    當網絡因爲發生異常狀況,致使分佈式系統中部分節點之間的網絡延時不斷增大,最終致使組成分佈式系統的全部節點中,只有部分節點之間可以進行正常通訊,而另外一些節點則不能——咱們將這個現象稱爲網絡分區,就是俗稱的「腦裂」。當網絡分區出現時,分佈式系統會出現局部小集羣,在極端狀況下,這些局部小集羣會獨立完成本來須要整個分佈式才能完成的功能,這就對分佈式一致性提出類很是大的挑戰。

  • 三態

    分佈式系統的每一次請求與響應,存在特有的「三態」概念,即成功、失敗與超時。當出現超時現象時,網絡通訊的發起方是沒法肯定當前請求是否被成功處理的。

  • 節點故障

    節點故障則是分佈式環境下另外一個比較常見的問題,指的是組成分佈式系統的服務器節點出現的宕機或「僵死」現象。

分佈式事務

在單機數據庫中,咱們很容易可以實現一套知足ACID特性的事務處理系統,但在分佈式數據庫中,數據分散在不一樣的機器上,如何對這些數據進行分佈式的事務處理具備很是大的挑戰。可是在分佈式計算領域,爲了保證分佈式應用程序的可靠性,分佈式事務是沒法迴避的。

分佈式事務是指事務的參與者、支持的服務器、資源服務器以及事務管理器分別位於分佈式系統的不一樣節點之上。一般一個分佈式事務中會涉及對多個數據源或業務系統的操做。一個最典型的分佈式事務場景:一個跨銀行的轉帳操做涉及調用兩個異地的銀行服務,其中一個是本地銀行提供的取款服務,另外一個則是目標銀行提供的存款服務,這兩個服務自己是無狀態而且是互相獨立的,共同構成了一個完整的分佈式事務。

對於一個高訪問量、高併發的互聯網分佈式系統來講,若是咱們指望實現一套嚴格知足ACID特性的分佈式事務,極可能出現的狀況就是在系統的可用性和嚴格一致性之間出現衝突——由於當咱們要求分佈式系統具備嚴格一致性時,極可能就須要犧牲掉系統的可用性。但毋庸置疑的一點是,可用性又是一個全部消費者不容許咱們討價還價的系統屬性,好比淘寶網這樣在線網站就要求可以7*24小時不間斷地對外提供服務,而對於一致性,則更加是全部消費者對於一個軟件系統的剛需。所以,在可用性和一致性之間永遠沒法存在一個一箭雙鵰的方案,因而如何構建一個兼顧可用性和一致性的分佈式系統成爲了無數工程師探討的難題,出現了諸如CAP和BASE這樣的分佈式系統經典理論。

CAP定理

CAP理論告訴咱們,一個分佈式系統不可能同時知足一致性(C:Consistency)、可用性(A:Availability)和分區容錯性(P:Partition tolerance)這三個基本需求,最多隻能同時知足其中的兩項。

  • 一致性

    在分佈式環境中,一致性是指數據在多個副本之間是否可以保持一致性的特性。在一致性的需求下,當一個系統在數據一致性的狀態下執行更新操做後,應該保證系統的數據仍然處於一致的狀態。在分佈式系統中,若是可以作到針對一個數據項的更新操做執行成功後,全部的用戶均可以讀取到其最新的值,那麼這樣的系統被認爲具備強一致性(或嚴格的一致性)。

  • 可用性

    可用性是指系統提供的服務必須一直處於可用的狀態,對於用戶的每個操做請求老是可以在有限的時間內返回結果。

  • 分區容錯性

    分區容錯性約束了一個分佈式系統須要具備以下特性:分佈式系統遇到任何網絡分區故障的時候,仍然須要可以保證對外提供知足一致性的可用性的服務,除非是整個網絡環境環境都發生了故障。須要注意的是,組成一個分佈式系統的每一個節點的加入與退出均可以看做是一個特殊的網絡分區。

在進行對CAP定理的應用時,咱們就須要拋棄其中的一項,下表是拋棄CAP定理中任意一項特性的場景說明。

放棄CAP定理 說明
放棄P 若是但願可以避免系統出現分區容錯性問題,一種較爲簡單的作法是將全部的數據都放在一個分佈式節點上。這樣的作法雖然沒法100%地保證系統不會出錯,但至少不會碰到因爲網絡分區帶來的負面影響。但同時須要注意的是,放棄P的同時也就意味着放棄類系統的可擴展性
放棄A 放棄可用性,一旦系統遇到網絡分區或其餘故障時,那麼受到影響的服務須要等待必定的時間,所以在等待期間系統沒法對外提供正常的服務,即不可用
放棄C 事實上,放棄一致性指的是放棄數據的強一致性,而保留數據的最終一致性。這樣的系統沒法保證數據保持實時的一致性,可是可以承諾的是,數據最終會達到一個一致的狀態。這就引入了一個時間窗口的概念,具體多久可以達到數據一致取決於系統的設計,主要包括數據副本在不一樣節點之間的複製時間長短

對於一個分佈式系統,分區容錯性能夠說是一個最基本的要求。既然是分佈式系統,那麼分佈式系統中的組件必然須要被部署到不一樣的節點,不然也就無所謂分佈式系統了,所以必然出現子網絡。而對於分佈式系統而言,網絡問題又是一個一定會出現的異常狀況,所以分區容錯性也就稱爲了一個分佈式系統必然須要面對和解決的問題。所以系統架構設計師每每須要把精力花在如何根據業務特色在C(一致性)和A(可用性)之間尋求平衡。

BASE理論

BASE是Basically Available(基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性)三個短語的簡寫,是由eBay的架構師提出的。BASE是對CAP中一致性和可用性權衡的結果,其來源於對大規模互聯網系統分佈式實踐的總結,是基於CAP定理逐步演化而來的,其核心思想是即便沒法作到強一致性(Strong consistency),但每一個應用均可以根據自身的業務特色,採用適當的方式來使系統達到最終一致性(Eventual consistency)。

  • 基本可用

    基本可用是指分佈式系統在出現不可預知故障的時候,容許損失部分可用性——但請注意,這毫不等價於系統不可用。「基本可用」的典型例子:

    一、響應時間上損失:正常狀況下,一個在線搜索引擎須要在0.5秒以內返回給用戶相應的查詢結果,但因爲出現故障,查詢結果的響應 時間增長到了1-2秒。

    二、功能上的損失:正常狀況下,在一個電子商務網站上進行購物,消費者幾乎可以順利地完成每一筆訂單,可是在大促購物高峯的時候,因爲消費 者的購物行爲激增,爲了保護購物系統的穩定性,部分消費者可能被引導到一個降級頁面。

  • 弱狀態

    弱狀態也稱爲軟狀態,和硬狀態相對,是指容許系統中的數據存在中間狀態,並認爲該中間狀態的存在不會影響系統的總體可用性,即容許系統在不一樣節點的數據副本之間進行數據同步的過程存在延時。

  • 最終一致性

    最終一致性強調的是系統中全部的數據副本,在通過一段時間的同步後,最終可以達到一個一致的狀態。所以,最終一致性的本質是須要系統保證最終數據可以達到一致,而不須要實時保證系統數據的強一致性。

 

文獻來源:http://www.javashuo.com/article/p-swugzmlj-cn.html

相關文章
相關標籤/搜索