更新時(shí)間:2021-08-17 10:08:32 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1228次
分布式數(shù)據(jù)庫(kù)定義為一群分布在計(jì)算機(jī)網(wǎng)絡(luò)上、邏輯上相互關(guān)聯(lián)的數(shù)據(jù)庫(kù)。分布式數(shù)據(jù)庫(kù)管理系統(tǒng)(分布式DBMS)則是支持管理分布式數(shù)據(jù)庫(kù)的軟件系統(tǒng),它使得分布對(duì)于用戶變得透明。有時(shí),分布式數(shù)據(jù)庫(kù)系統(tǒng)(Distributed Database System,DDBS)用于表示分布式數(shù)據(jù)庫(kù)和分布式DBMS這兩者。
1.CAP理論
首先,分布式數(shù)據(jù)庫(kù)是基于單點(diǎn)關(guān)系數(shù)據(jù)庫(kù)的基本特性的繼承,主要涉及事務(wù)的ACID特性、事務(wù)日志的容災(zāi)恢復(fù)性、數(shù)據(jù)冗余的高可用性幾個(gè)要點(diǎn)。
其次,分布式數(shù)據(jù)設(shè)計(jì)必須遵循CAP定理:分布式系統(tǒng)不能同時(shí)滿足 一致性(Consistency) 、可用性(Availability) 、分區(qū)容忍性(Partition tolerance) 這三個(gè)基本需求,最多滿足其中的兩項(xiàng), 由于分區(qū)容錯(cuò)性是絕對(duì)不能拋棄的,因此需要考慮業(yè)務(wù)情況在可用性和一致性之間做出權(quán)衡。
CAP三個(gè)特性描述如下 :
一致性(Consistency):確保分布式群集中的每個(gè)節(jié)點(diǎn)都必須返回相同的 、最近更新的數(shù)據(jù) 。一致性是指每個(gè)客戶端具有相同的數(shù)據(jù)視圖。有多種類型的一致性模型 , CAP中的一致性是指線性化或順序一致性,是強(qiáng)一致性。
可用性(Availability):每個(gè)非失敗節(jié)點(diǎn)在合理的時(shí)間內(nèi)返回所有讀取和寫(xiě)入請(qǐng)求的響應(yīng)。為了可用,網(wǎng)絡(luò)分區(qū)兩側(cè)的每個(gè)節(jié)點(diǎn)必須能夠在合理的時(shí)間內(nèi)做出響應(yīng)。
分區(qū)容忍性(Partition tolerance):盡管存在網(wǎng)絡(luò)分區(qū),系統(tǒng)仍可繼續(xù)運(yùn)行并 保證 一致性。網(wǎng)絡(luò)分區(qū)已成事實(shí)。保證分區(qū)容忍度的分布式系統(tǒng)可以在分區(qū)修復(fù)后從分區(qū)進(jìn)行適當(dāng)?shù)幕謴?fù)。
根據(jù)實(shí)際業(yè)務(wù)情況, 分布式系統(tǒng)會(huì)根據(jù)業(yè)務(wù)對(duì)一致性和可用性需求的重要等級(jí)提供最佳解決方案,但通常一致性等級(jí)會(huì)更高,也是最有挑戰(zhàn)的 。
2.BASE理論
權(quán)衡CAP定理演進(jìn)出了 BASE理論 ,BASE是Basically Available(基本可用)、Soft state(軟狀態(tài))和Eventually consistent(最終一致性)三個(gè)短語(yǔ)的縮寫(xiě)。
BASE理論的核心思想:由于某些原因無(wú)法做到強(qiáng)一致性,但每個(gè)應(yīng)用都可以根據(jù)其自身業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹?lái)達(dá)到最終一致性。
BA(Basically Available): 基本可用,分布式系統(tǒng)在出現(xiàn)故障的時(shí)候,允許損失部分可用性,即保證核心可用。
S(Soft State): 軟狀態(tài),允許系統(tǒng)存在中間狀態(tài),而該中間狀態(tài)不會(huì)影響系統(tǒng)整體可用性。
E(Consistency):最終一致性,系統(tǒng)中的所有數(shù)據(jù)副本經(jīng)過(guò)一定時(shí)間后,最終能夠達(dá)到一致的狀態(tài)。
BASE 理論本質(zhì)上是對(duì) CAP 理論的延伸,是對(duì) CAP 中 AP 方案的一個(gè)補(bǔ)充。
這里補(bǔ)充說(shuō)明一下什么是強(qiáng)一致性:
Strict Consistency ( 強(qiáng)一致性 ) 也稱為Atomic Consistency ( 原子一致性) 或 Linearizable Consistency(線性一致性) ,必須滿足以下 兩個(gè)要求:
(1)任何一次讀都能讀到某個(gè)數(shù)據(jù)的最近一次寫(xiě)的數(shù)據(jù)。
(2)系統(tǒng)中的所有進(jìn)程,看到的操作順序,都和全局時(shí)鐘下的順序一致。
對(duì)于關(guān)系型數(shù)據(jù)庫(kù),要求更新過(guò)的數(shù)據(jù)能被后續(xù)的訪問(wèn)都能看到,這是強(qiáng)一致性。簡(jiǎn)言之,在任意時(shí)刻,所有節(jié)點(diǎn)中的數(shù)據(jù)是一樣的。
BASE理論的最終一致性屬于弱一致性。
接下來(lái)介紹另一個(gè)分布式數(shù)據(jù)庫(kù)重要的概念:分布式事務(wù)。瀏覽了幾篇介紹分布式事務(wù)的文章,發(fā)現(xiàn)會(huì)有不同的描述,但大致含義是相同的。分布式事務(wù)首先是事務(wù), 需要滿足事務(wù)的ACID的特性。主要考慮業(yè)務(wù)訪問(wèn)處理的數(shù)據(jù)分散在網(wǎng)絡(luò)間的多節(jié)點(diǎn)上,對(duì)于分布式數(shù)據(jù)庫(kù)系統(tǒng)而言, 在保證數(shù)據(jù)一致性的要求下,進(jìn)行事務(wù)的分發(fā)、協(xié)同多節(jié)點(diǎn)完成業(yè)務(wù)請(qǐng)求。
多節(jié)點(diǎn)能否正常、順利的協(xié)同作業(yè)完成事務(wù)是關(guān)鍵,它直接決定了訪問(wèn)數(shù)據(jù)的一致性和對(duì)請(qǐng)求響應(yīng)的及時(shí)性。從而就需要科學(xué)有效的一致性算法來(lái)支撐。
3.一致性算法
一致性算法 包括2PC 、3PC 、Paxos 、Raft 等四種:
2PC / 3PC 協(xié)議用于保證屬于多個(gè)數(shù)據(jù)分片上操作的原子性。
這些數(shù)據(jù)分片可能分布在不同的服務(wù)器上,2PC / 3PC 協(xié)議保證多臺(tái)服務(wù)器上的操作要么全部成功,要么全部失敗。
二階段提交2PC (Two-Phase Commit ): 用來(lái)保證分布式系統(tǒng)數(shù)據(jù)的一致性的一致性協(xié)議,大部分基于關(guān)系型數(shù)據(jù)庫(kù)的分布式事務(wù)處理都是采用二階段提交協(xié)議來(lái)完成。其優(yōu)點(diǎn)是原理簡(jiǎn)單且實(shí)現(xiàn)方便,缺點(diǎn)是同步阻塞、單點(diǎn)問(wèn)題、數(shù)據(jù)不一致、太過(guò)保守。
2PC主要包括以下兩個(gè)階段:
第一階段:提交事務(wù)請(qǐng)求(投票階段)
第二階段:執(zhí)行事務(wù)提交(執(zhí)行階段)
為了避免在通知所有參與者提交事務(wù)時(shí),其中一個(gè)參與者 crash 不一致時(shí),就出現(xiàn)了三階段提交的方式。
三階段提交 3PC(Three- Phase Commi ):包括 CanCommit、PreCommit、doCommit 三個(gè)階段。顯而易見(jiàn),三階段提交是在兩階段提交的基礎(chǔ)上增加了一個(gè) preCommit 的過(guò)程,當(dāng)所有參與者收到 preCommit 后,并不執(zhí)行動(dòng)作,直到收到 commit 或超過(guò)一定時(shí)間后才完成操作。
其優(yōu)點(diǎn)是降低參與者阻塞范圍,并能夠在出現(xiàn)單點(diǎn)故障后繼續(xù)達(dá)成一致;缺點(diǎn)是引入preCommit 階段,在這個(gè)階段如果出現(xiàn)網(wǎng)絡(luò)分區(qū),協(xié)調(diào)者無(wú)法與參與者正常通信,參與者依然會(huì)進(jìn)行事務(wù)提交,造成數(shù)據(jù)不一致。
Paxos 、 Raft 算法用于保證同一個(gè)數(shù)據(jù)分片的多個(gè)副本之間的數(shù)據(jù)一致性 。以下是兩種種算法的描述 :
Paxos (強(qiáng)一致性)算法屬于多數(shù)派算法,主要目的是解決數(shù)據(jù)分片的單點(diǎn)問(wèn)題, 通過(guò)該算法可以讓整個(gè)集群的節(jié)點(diǎn)對(duì)某個(gè)值的變更達(dá)成一致。任何一個(gè)節(jié)點(diǎn)都可以提出要修改某個(gè)數(shù)據(jù)的提案,是否通過(guò)這個(gè)提案取決于這個(gè)集群中是否有超過(guò)半數(shù)的節(jié)點(diǎn)同意,因此Paxos算法需要集群中的節(jié)點(diǎn)必須是單數(shù) 。
Raft算法是簡(jiǎn)化版的Paxos, 定義了三種角色 Leader、Follower、Candidate:最初都是Follower,當(dāng)Follower監(jiān)聽(tīng)不到Leader,就自動(dòng)成為Candidate,然后發(fā)起投票選出新的Leader 。因此,Raft 劃分成三個(gè)子問(wèn)題:
Leader Election
Log Replication
Safety
其有兩個(gè)基本過(guò)程:
① Leader選舉:每個(gè) Candidate隨機(jī)經(jīng)過(guò)一定時(shí)間都會(huì)提出選舉方案,最近階段中得票最多者被選為L(zhǎng)eader;
② 同步log:Leader會(huì)找到系統(tǒng)中l(wèi)og(各種事件的發(fā)生記錄)最新的記錄,并強(qiáng)制所有的follow來(lái)刷新到這個(gè)記錄。
Raft一致性算法是通過(guò)選出一個(gè)leader來(lái)簡(jiǎn)化日志副本的管理,例如,日志項(xiàng)(log entry)只允許從leader流向follower。
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"分布式數(shù)據(jù)庫(kù)架構(gòu)和原理",希望對(duì)大家有幫助,想了解更多可查看Java分布式應(yīng)用教程。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對(duì)沒(méi)有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門(mén)到精通,主要介紹了一些Java基礎(chǔ)的核心知識(shí),讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)