http://www.cnblogs.com/leesf456/p/5992377.html
一、前言
在大數(shù)據(jù)系統(tǒng)中,分布式系統(tǒng)已經(jīng)成為一個(gè)無法避免的組件,如zookeeper已經(jīng)成為了工業(yè)屆的標(biāo)準(zhǔn)。所以對(duì)于大數(shù)據(jù)的研究,也必須要研究分布式系統(tǒng)的特點(diǎn)。
二、集中式系統(tǒng)
由一臺(tái)或多臺(tái)計(jì)算機(jī)組成的中心節(jié)點(diǎn),數(shù)據(jù)集中存儲(chǔ)在這個(gè)中心節(jié)點(diǎn)中,并且整個(gè)系統(tǒng)的所有業(yè)務(wù)單元都集中部署在這個(gè)中心節(jié)點(diǎn)上,系統(tǒng)的所有功能均由其集中處理。其部署簡(jiǎn)單,不用考慮多個(gè)節(jié)點(diǎn)間的分布式協(xié)作問題。
三、分布式系統(tǒng)
分布式系統(tǒng)是一個(gè)由硬件或軟件組件分布在不同的網(wǎng)絡(luò)計(jì)算機(jī)上,彼此之間僅僅通過消息傳遞進(jìn)行通信和協(xié)調(diào)的系統(tǒng)。其擁有如下特點(diǎn)
3.1 分布性
分布式系統(tǒng)中的多臺(tái)計(jì)算機(jī)都會(huì)在空間中隨意分布,同時(shí),機(jī)器的分布情況也會(huì)隨時(shí)變動(dòng)。
3.2 對(duì)等性
分布式系統(tǒng)中的計(jì)算機(jī)沒有主/從之分,既沒有控制整個(gè)系統(tǒng)的主機(jī),也沒有被控制的從機(jī),組成分布式系統(tǒng)的所有計(jì)算機(jī)節(jié)點(diǎn)都是對(duì)等的,副本指的是分布式系統(tǒng)對(duì)數(shù)據(jù)和服務(wù)提供的一種冗余方式,為了對(duì)外提供高可用的服務(wù),我們往往會(huì)對(duì)數(shù)據(jù)和服務(wù)進(jìn)行副本處理。數(shù)據(jù)副本是指在不同的節(jié)點(diǎn)上持久化同一份數(shù)據(jù),當(dāng)某一個(gè)節(jié)點(diǎn)上存儲(chǔ)的數(shù)據(jù)丟失時(shí),可以從副本上讀取到該數(shù)據(jù),這是解決分布式系統(tǒng)數(shù)據(jù)丟失問題最為有效的手段。服務(wù)副本是只多個(gè)節(jié)點(diǎn)提供同樣的服務(wù),每個(gè)節(jié)點(diǎn)都有能力接受來自外部的請(qǐng)求并進(jìn)行相應(yīng)的處理。
3.3 并發(fā)性
同一分布式系統(tǒng)中的多個(gè)節(jié)點(diǎn),可能會(huì)并發(fā)地操作一些共享資源,諸如數(shù)據(jù)庫(kù)或分布式存儲(chǔ)等,如何高效地協(xié)調(diào)分布式并發(fā)操作也成為了分布式系統(tǒng)架構(gòu)與設(shè)計(jì)中最大的挑戰(zhàn)之一。
3.4 缺乏全局時(shí)鐘
典型的分布式系統(tǒng)由一系列在空間上隨意分布的多個(gè)進(jìn)程組成,具有明顯的分布性,這些進(jìn)程之間通過交換消息來進(jìn)行互相通信,因此,在分布式系統(tǒng)中,很難定義兩個(gè)時(shí)間究竟誰先誰后,原因就是因?yàn)榉植际较到y(tǒng)缺乏一個(gè)全局的時(shí)鐘序列控制。
3.5 故障總是會(huì)發(fā)生
組成分布式系統(tǒng)的所有計(jì)算機(jī),都有可能發(fā)生任何形式的故障,任何在設(shè)計(jì)階段考慮到的異常情況,一定會(huì)在系統(tǒng)實(shí)際運(yùn)行中發(fā)生。
四、分布式環(huán)境的問題
4.1 通信異常
從集中式到分布式,必然引入了網(wǎng)絡(luò)因素,而由于網(wǎng)絡(luò)本身的不可靠性,因此就引入了額外的問題。分布式系統(tǒng)各節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信能夠正常進(jìn)行,其延時(shí)也會(huì)遠(yuǎn)大于單機(jī)操作,在消息的收發(fā)過程中,消息丟失和消息延遲變得十分普遍。
4.2 網(wǎng)絡(luò)分區(qū)
當(dāng)網(wǎng)絡(luò)發(fā)生異常情況時(shí),導(dǎo)致分布式系統(tǒng)中部分節(jié)點(diǎn)之間的網(wǎng)絡(luò)延時(shí)不斷增大,最終導(dǎo)致組成分布式胸的所有節(jié)點(diǎn)中,只有部分節(jié)點(diǎn)之間能夠正常通信,而另一些節(jié)點(diǎn)則不能,這種現(xiàn)象稱之為網(wǎng)絡(luò)分區(qū),當(dāng)網(wǎng)絡(luò)分區(qū)出現(xiàn)時(shí),分布式系統(tǒng)會(huì)出現(xiàn)局部小集群,在極端情況下,這些局部小集群會(huì)獨(dú)立完成原本需要整個(gè)分布式系統(tǒng)才能完成的功能,包括對(duì)數(shù)據(jù)的事務(wù)處理,這就對(duì)分布式一致性提出了非常大的挑戰(zhàn)。
4.3 三態(tài)
由于網(wǎng)絡(luò)可能會(huì)出現(xiàn)各種各樣的問題,因此分布式系統(tǒng)的每一次請(qǐng)求與響應(yīng),存在特有的三態(tài)概念:成功、失敗、超時(shí)。當(dāng)網(wǎng)絡(luò)在異常情況下,可能會(huì)出現(xiàn)超時(shí)現(xiàn)象,通常由以下兩種情況:1. 由于網(wǎng)絡(luò)原因,該請(qǐng)求并沒有被成功地發(fā)送到接收方,而是在發(fā)送過程就發(fā)生了消息丟失現(xiàn)象。2. 該請(qǐng)求成功的被接收方接受后,并進(jìn)行了處理,但是在將響應(yīng)反饋給發(fā)送方時(shí),發(fā)生了消息丟失現(xiàn)象。
4.4 節(jié)點(diǎn)故障
節(jié)點(diǎn)故障是指組成分布式系統(tǒng)的服務(wù)器節(jié)點(diǎn)出現(xiàn)宕機(jī)或僵死現(xiàn)象,每個(gè)節(jié)點(diǎn)都有可能出現(xiàn)故障,并且煤炭都在發(fā)生。
五、從ACID到CAP/BASE
5.1 ACID
事務(wù)是由一系列對(duì)系統(tǒng)中數(shù)據(jù)進(jìn)行訪問與更新的操作所組成的一個(gè)程序執(zhí)行單元,狹義上的食物特指數(shù)據(jù)庫(kù)事務(wù)。一方面,當(dāng)多個(gè)應(yīng)用程序并發(fā)訪問數(shù)據(jù)庫(kù)時(shí),食物可以在這些應(yīng)用程序之間提供一個(gè)隔離方法,以防止彼此的操作相互干擾,另一方面,食物為數(shù)據(jù)庫(kù)操作序列提供了一個(gè)從失敗中恢復(fù)到正常狀態(tài)的方法,同時(shí)提供了數(shù)據(jù)庫(kù)即使在宜昌狀態(tài)下仍能保持?jǐn)?shù)據(jù)一致性的方法。事務(wù)具有原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability),簡(jiǎn)稱ACID。
① 原子性,指事務(wù)必須是一個(gè)原子的操作序列單元,事務(wù)中包含的各項(xiàng)操作在一次執(zhí)行過程中,只允許出現(xiàn)以下兩種狀態(tài)之一,全部成功執(zhí)行,全部不執(zhí)行。任何一項(xiàng)操作失敗都將導(dǎo)致整個(gè)事務(wù)失敗,同時(shí)其他已經(jīng)被執(zhí)行的操作都將被撤銷并回滾,只有所有操作全部成功,整個(gè)事務(wù)才算是成功完成。
② 一致性,指事務(wù)的執(zhí)行不能破壞數(shù)據(jù)庫(kù)數(shù)據(jù)的完整性和一致性,一個(gè)事務(wù)在執(zhí)行之前和執(zhí)行之后,數(shù)據(jù)庫(kù)都必須處于一致性狀態(tài),即事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)轉(zhuǎn)變到另一個(gè)一致性狀態(tài),因此當(dāng)數(shù)據(jù)庫(kù)只包含成功事務(wù)提交的結(jié)果時(shí),就能說數(shù)據(jù)庫(kù)處于一致性狀態(tài),而如果數(shù)據(jù)庫(kù)系統(tǒng)在運(yùn)行過程中發(fā)生故障,有些事務(wù)尚未完成就被迫中斷,這些未完成的事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的修改有一部分已寫入物理數(shù)據(jù)庫(kù),這時(shí)數(shù)據(jù)庫(kù)就處于一種不正確的狀態(tài),或者說是不一致的狀態(tài)。
③ 隔離性,指在并發(fā)環(huán)境中,并發(fā)的事務(wù)是相互隔離的,一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾,即不同的事務(wù)并發(fā)操作相同的數(shù)據(jù)時(shí),每個(gè)事務(wù)都有各自完整的數(shù)據(jù)空間,即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其他并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能相互干擾。
④ 持久性,指一個(gè)事務(wù)一旦提交,他對(duì)數(shù)據(jù)庫(kù)中對(duì)應(yīng)數(shù)據(jù)的狀態(tài)變更就應(yīng)該是永久的,即一旦某個(gè)事務(wù)成功結(jié)束,那么它對(duì)數(shù)據(jù)庫(kù)所做的更新就必須被永久的保存下來,即使發(fā)生系統(tǒng)崩潰或者宕機(jī)故障,只要數(shù)據(jù)庫(kù)能夠重新啟動(dòng),那么一定能夠?qū)⑵浠謴?fù)到事務(wù)成功結(jié)束時(shí)的狀態(tài)。
5.2 分布式事務(wù)
分布式事務(wù)是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于分布式系統(tǒng)的不同節(jié)點(diǎn)上,通常一個(gè)分布式事務(wù)中會(huì)涉及對(duì)多個(gè)數(shù)據(jù)源或業(yè)務(wù)系統(tǒng)的操作。一個(gè)分布式事務(wù)可以看做是由多個(gè)分布式的操作序列組成,通??梢园堰@一系列分布式的操作序列稱為子事務(wù)。由于在分布式事務(wù)中,各個(gè)子事務(wù)的執(zhí)行是分布式的,因此要實(shí)現(xiàn)一種能夠保證ACID特性的分布式事務(wù)處理系統(tǒng)就顯得格外復(fù)雜。
5.3 CAP
CAP理論告訴我們,一個(gè)分布式系統(tǒng)不可能同時(shí)滿足一致性、可用性、分區(qū)容錯(cuò)性這三個(gè)基本需求,最多只能同時(shí)滿足其中的兩個(gè)。
① 一致性,指數(shù)據(jù)在多個(gè)副本之間是否能夠保持一致的特性,在一致性的需求下,當(dāng)一個(gè)系統(tǒng)在數(shù)據(jù)一致的狀態(tài)下執(zhí)行更新操作后,應(yīng)該保證系統(tǒng)的數(shù)據(jù)仍然處于一致狀態(tài)。對(duì)于一個(gè)將數(shù)據(jù)副本分布在不同分布式節(jié)點(diǎn)上的系統(tǒng)來來說,如果對(duì)第一個(gè)結(jié)點(diǎn)的數(shù)據(jù)進(jìn)行了更新操作并且成功后,卻沒有使得第二個(gè)節(jié)點(diǎn)上的數(shù)據(jù)得到相應(yīng)的更新,于是在對(duì)第二個(gè)結(jié)點(diǎn)的數(shù)據(jù)進(jìn)行讀取操作時(shí),獲取的仍然是老數(shù)據(jù)(臟數(shù)據(jù)),這就是典型的分布式數(shù)據(jù)不一致的情況,在分布式系統(tǒng)中,如果能夠做到針對(duì)一個(gè)數(shù)據(jù)項(xiàng)的更新操作執(zhí)行成功后,所有的用戶都可以讀取到期最新的值,那么這樣的系統(tǒng)就被認(rèn)為具有強(qiáng)一致性。
② 可用性,指系統(tǒng)提供的服務(wù)必須一直處于可用的狀態(tài),對(duì)于用戶的每一操作請(qǐng)求總是能夠在有限的時(shí)間內(nèi)返回結(jié)果。
③ 分區(qū)容錯(cuò)性,分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障時(shí),仍然需要能夠保證對(duì)外提供滿足一致性和可用性的服務(wù),除非是整個(gè)網(wǎng)絡(luò)環(huán)境都發(fā)生了故障。
5.4 BASE
BASE是基本可用(Basically Available)、Soft state(弱狀態(tài))、Eventually consistent(最終一致性)三個(gè)短語的簡(jiǎn)寫。
① 基本可用,指分布式系統(tǒng)在出現(xiàn)不可預(yù)知故障時(shí),允許損失部分可用性,如響應(yīng)時(shí)間上的損失或功能上的損失。
② 弱狀態(tài),也稱為軟狀態(tài),指允許系統(tǒng)中的二數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該中間狀態(tài)的存在不會(huì)影響系統(tǒng)的整體可用性,即允許系統(tǒng)在不同節(jié)點(diǎn)的數(shù)據(jù)副本之間進(jìn)行數(shù)據(jù)同步的過程存在延時(shí)。
③ 最終一致性,指系統(tǒng)中所有的數(shù)據(jù)副本,在經(jīng)過一段時(shí)回見的同步后,最終能夠達(dá)到一個(gè)一致的狀態(tài),因此最終一致性的本質(zhì)是需要系統(tǒng)保證數(shù)據(jù)能夠達(dá)到一致,而不需要實(shí)時(shí)保證系統(tǒng)數(shù)據(jù)的強(qiáng)一致性。
六、總結(jié)
這篇博文主要介紹了分布式的一些相關(guān)知識(shí),更詳細(xì)的知識(shí)之后會(huì)給出。謝謝各位園友的觀看~