數(shù)據(jù)庫(kù)中事務(wù)的ACID
A:Atomicity导披,原子性播瞳,全部成功或全部不成功
C:Consistency理肺,一致性糙置,事務(wù)的執(zhí)行不能破壞數(shù)據(jù)庫(kù)中數(shù)據(jù)的完整性和一致性
I:Isolation云茸,隔離性,并發(fā)環(huán)境中谤饭,并發(fā)的事務(wù)相關(guān)隔離
D: Durability标捺,持久性,提交之后网持,db中數(shù)據(jù)是持久化的
分布式事務(wù)-CAP
C: Consistency宜岛,一致性,數(shù)據(jù)在多個(gè)副本間能否保持一致
A:Availability功舀,可用性,系統(tǒng)一致處于可用狀態(tài)
P: Partition tolerance身弊,分區(qū)容錯(cuò)性辟汰,這里的分區(qū)指網(wǎng)絡(luò)分區(qū)。也就是遇到任何網(wǎng)絡(luò)分區(qū)故障的時(shí)候阱佛,對(duì)外仍然可以提供滿(mǎn)足一致性和可用性的服務(wù)
無(wú)法同時(shí)滿(mǎn)足CAP三個(gè)特性
BASE理論
B: Basically Available 基本可用
S: Soft state帖汞,柔性事務(wù)
E: Eventually Consistent,最終一致
Paxos算法
分布式系統(tǒng)容錯(cuò)一致性算法
ZK
zk基于zab協(xié)議凑术,是基于paxos的一個(gè)簡(jiǎn)化變種算法翩蘸。有以下特性:
ZK特性
順序一致性:
同一個(gè)客戶(hù)端發(fā)起的請(qǐng)求,最終會(huì)嚴(yán)格按照其發(fā)起順序應(yīng)用到zookeeper中去淮逊。
原子性
所有事務(wù)請(qǐng)求的處理結(jié)果催首,在整個(gè)集群的機(jī)器上生效的情況是一致的扶踊。
單一視圖
無(wú)論client連接的是哪個(gè)zk服務(wù)器,看到的數(shù)據(jù)都是一致的郎任。
可靠性
一旦服務(wù)端成功的應(yīng)用了某個(gè)事務(wù)秧耗,并完成了對(duì)客戶(hù)端的響應(yīng),那么該事務(wù)所引起的服務(wù)端狀態(tài)變更會(huì)被一直保留下來(lái)舶治,除非有另一個(gè)事務(wù)對(duì)其又進(jìn)行了變更分井。
實(shí)時(shí)性
zk保證在一定時(shí)間段內(nèi),client最終一定可以從服務(wù)端取到最新的數(shù)據(jù)狀態(tài)霉猛。
ZK基本概念
zk底層是樹(shù)形結(jié)構(gòu)尺锚,由一系列ZNode節(jié)點(diǎn)組成。zk將全量數(shù)據(jù)存儲(chǔ)在內(nèi)存中惜浅,提高服務(wù)器吞吐瘫辩、減少延遲。
zk中的角色:
Leader:集群中的所有機(jī)器通過(guò)選舉過(guò)程選出一臺(tái)leader機(jī)器
Follower:提供讀服務(wù)赡矢,參與選舉
Observer:提供讀服務(wù)杭朱,不參與選舉,也不參與寫(xiě)操作的“過(guò)半寫(xiě)成功”策略吹散,因此observer在不影響寫(xiě)性能的情況下能提高集群的讀性能弧械。
Znode:樹(shù)上的每個(gè)節(jié)點(diǎn)保存自己的數(shù)據(jù)內(nèi)容,以及一系列屬性信息空民。
? znode分為臨時(shí)節(jié)點(diǎn)和持久節(jié)點(diǎn)刃唐,持久節(jié)點(diǎn)如果不刪除,會(huì)一直存在界轩,臨時(shí)節(jié)點(diǎn)綁定客戶(hù)端session周期画饥,session會(huì)話(huà)失效節(jié)點(diǎn)就會(huì)被自動(dòng)刪除。
? 臨時(shí)節(jié)點(diǎn)不能作為父節(jié)點(diǎn)浊猾,只能是葉子節(jié)點(diǎn)
版本:zk中有三個(gè)版本抖甘,version—當(dāng)前znode的版本,cversion--當(dāng)前znode子節(jié)點(diǎn)的版本葫慎,aversion—當(dāng)前znode的acl版本(Access Controll Lists)
Watcher:回調(diào)機(jī)制的實(shí)現(xiàn)
ACL:權(quán)限控制衔彻,有以下5種權(quán)限:
? CREATE: 創(chuàng)建子節(jié)點(diǎn)權(quán)限
? READ:獲取節(jié)點(diǎn)和子節(jié)點(diǎn)列表權(quán)限
? WRITE:更新節(jié)點(diǎn)數(shù)據(jù)權(quán)限
? DELETE:刪除子節(jié)點(diǎn)權(quán)限
? ADMIN:設(shè)置節(jié)點(diǎn)的ACL的權(quán)限