CAP定理和BASE理論( CAP定理介紹分享)
### 8.1.4 CAP定理和BASE理論
- CAP定理
- CAP定理,又叫布魯爾定理。簡單來說它是指在分布式系統(tǒng)中不可能同時(shí)滿足一致性(C : Consistency )、可用性( A: Availability)、分區(qū)容錯(cuò)性( P : Partition Tolerance )這三個(gè)基本需求,最多同時(shí)滿足兩個(gè)。
- ●C :數(shù)據(jù)在多個(gè)副本中要保持強(qiáng)一-致,比如前面說的分布式數(shù)據(jù)一致性問題。
- ●A:系統(tǒng)對外提供的服務(wù)必須- -直處于可用狀態(tài),在任何故障下,客戶端都能在合理的時(shí)間內(nèi)獲得服務(wù)端的非錯(cuò)誤響應(yīng)。
- ●P:在分布式系統(tǒng)中遇到任何網(wǎng)絡(luò)分區(qū)故障,系統(tǒng)仍然能夠正常對外提供服務(wù)。
- 不同節(jié)點(diǎn)分布在不同的子網(wǎng)絡(luò)中時(shí),在內(nèi)部子網(wǎng)絡(luò)正常的情況下,由于某些原因?qū)е逻@些子節(jié)點(diǎn)之間出現(xiàn)網(wǎng)絡(luò)不通的情況,導(dǎo)致整個(gè)系統(tǒng)環(huán)境被切分成若干獨(dú)立的區(qū)域,這就是網(wǎng)絡(luò)分區(qū)。
- CAP定理證明,在分布式系統(tǒng)中,要么滿足CP ,要么滿足AP ,不可能實(shí)現(xiàn)CAP或者CA。原因是網(wǎng)絡(luò)通信并不是絕對可靠的,比如網(wǎng)絡(luò)延時(shí)、網(wǎng)絡(luò)異常等都會(huì)導(dǎo)致系統(tǒng)故障。而在分布式系統(tǒng)中,即便出現(xiàn)網(wǎng)絡(luò)故障也需要保證系統(tǒng)仍然能夠正常對外提供服務(wù),所以在分布式系統(tǒng)中Partition Tolerance是必然存在的,也就是需要滿足如果是CA或者CAP這種情況,相當(dāng)于網(wǎng)絡(luò)百分之百可靠,否則當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)的情況時(shí),為了保證數(shù)據(jù)的一致性,必須拒絕客戶端的請求。但是如果拒絕了請求,就無法滿足A ,所以在分布式系統(tǒng)中不可能選擇CA,因此只能有AP或者CP兩種選擇。
- ●AP :對于AP來說,相當(dāng)于放棄了強(qiáng)一致性,實(shí)現(xiàn)最終的一-致,這是很多互聯(lián)網(wǎng)公司解決分布式數(shù)據(jù)一致性問題的主要選擇。
- ●CP:放棄了高可用性,實(shí)現(xiàn)強(qiáng)一致性。前面提到的兩階段提交和三階段提交都采用這種方案。可能導(dǎo)致的問題是用戶完成一個(gè)操作會(huì)等待較長的時(shí)間。
- BASE理論
- BASE理論是由于CAP中- -致性和可用性不可兼得而衍生出來的一種新的思想, BASE理論的核心思想是通過犧牲數(shù)據(jù)的強(qiáng)一致性來獲得高可用性。它有如下三個(gè)特性。
Basically Available (基本可用) : 分布式系統(tǒng)在出現(xiàn)故障時(shí),允許損失一部分 功能的可用性,保證核心功能的可用。
Soft State (軟狀態(tài)) :允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),這個(gè)狀態(tài)不影響系統(tǒng)的可用性,也就是允許系統(tǒng)中不同節(jié)點(diǎn)的數(shù)據(jù)副本之間的同步存在延時(shí)。
Eventually Consistent (最終一 致性) :中間狀態(tài)的數(shù)據(jù)在經(jīng)過一-段時(shí)間之后,會(huì)達(dá)到一個(gè)最終的
- BASE理論并沒有要求數(shù)據(jù)的強(qiáng)一致,而是允許數(shù)據(jù)在一段時(shí)間內(nèi)是不一致的,但是數(shù)據(jù)最終會(huì)在某個(gè)時(shí)間點(diǎn)實(shí)現(xiàn)- -致。在互聯(lián)網(wǎng)產(chǎn)品中,大部分都會(huì)采用BASE理論來實(shí)現(xiàn)數(shù)據(jù)的一致,因?yàn)楫a(chǎn)品的可用性對于用戶來說更加重要。
- 舉個(gè)例子,在電商平臺(tái)中用戶發(fā)起一個(gè)訂單的支付,不需要同步等待支付的執(zhí)行結(jié)果,系統(tǒng)會(huì)返回一個(gè)支付處理中的狀態(tài)到用戶界面。對于用戶來說,他可以從訂單列表中看到支付的處理結(jié)果。而對于系統(tǒng)來說,當(dāng)?shù)谌降闹Ц短幚沓晒χ?再更新該訂單的支付狀態(tài)即可。在這個(gè)場景中,雖然訂單的支付狀態(tài)和第三方的支付狀態(tài)存在短期的不一致,但是用戶卻獲得了更好的產(chǎn)品體驗(yàn)。
## 8.2分布式事務(wù)問題的常見解決方案
### 8.2.1 TCC補(bǔ)償型方案
### 8.2.2基于可靠性消息的最終一致性方案
### 8.2.3最大努力通知型
## 8.3分布式事務(wù)框架Seata
### 8.3.1 AT模式
### 8.3.2 Saga模式
## 8.4 Seata的安裝
### 8.4.1 file存儲(chǔ)模式
### 8.4.2 db存儲(chǔ)模式
### 8.4.3 Seata服務(wù)端配置中心說明
## 8.5 AT模式Dubbo集成Seata
### 8.5.1項(xiàng)目準(zhǔn)備
### 8.5.2數(shù)據(jù)庫準(zhǔn)備
### 8.5.3核心方法說明
### 8.5.4項(xiàng)目啟動(dòng)順序及訪問
### 8.5.5整合Seata實(shí)現(xiàn)分布式事務(wù)
## 8.6 Spring Cloud Alibaba Seata
### 8.6.1 Spring Cloud項(xiàng)目準(zhǔn)備
### 8.6.2集成Spring Cloud Alibaba Seata
### 8.6.3關(guān)于事務(wù)分組的說明
## 8.7 Seata AT模式的實(shí)現(xiàn)原理
### 8.7.1 AT模式第一階段的實(shí)現(xiàn)原理
### 8.7.2 AT模式第二階段的原理分析
### 8.7.3關(guān)于事務(wù)的隔離性保證
## 8.8 官方文檔
### Seata 是什么?
Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù)。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務(wù)模式,為用戶打造一站式的分布式解決方案。
### 快速啟動(dòng)
### 參數(shù)配置
- http://seata.io/zh-cn/docs/user/configurations.html
### 事務(wù)分組專題
- http://seata.io/zh-cn/docs/user/txgroup/transaction-group.html
### 配置中心
- 什么是配置中心?配置中心可以說是一個(gè)"大衣柜",內(nèi)部放置著各種配置文件,你可以通過自己所需進(jìn)行獲取配置加載到對應(yīng)的客戶端.比如Seata Client端(TM,RM),Seata Server(TC),會(huì)去讀取全局事務(wù)開關(guān),事務(wù)會(huì)話存儲(chǔ)模式等信息.
- Seata的配置中心與Spring cloud的配置中心區(qū)別是?在廣義上來說,并無區(qū)別,只不過Spring cloud的配置中心僅是作用于它們自身的組件,而Seata的配置中心也是一樣是作用于Seata自身.(注:Spring cloud的配置中心與Seata無關(guān))
- Seata支持哪些配置中心?
- nacos
- consul
- apollo
- etcd
- zookeeper
- file (讀本地文件, 包含conf、properties、yml配置文件的支持)
### 注冊中心
- 什么是注冊中心?注冊中心可以說是微服務(wù)架構(gòu)中的”通訊錄“,它記錄了服務(wù)和服務(wù)地址的映射關(guān)系。在分布式架構(gòu)中,服務(wù)會(huì)注冊到這里,當(dāng)服務(wù)需要調(diào)用其它服務(wù)時(shí),就到這里找到服務(wù)的地址,進(jìn)行調(diào)用.比如Seata Client端(TM,RM),發(fā)現(xiàn)Seata Server(TC)集群的地址,彼此通信.
- Seata的注冊中心與Dubbo,Spring cloud的注冊中心區(qū)別是?在廣義上來說,并無區(qū)別,只不過Dubbo與Spring cloud的注冊中心僅是作用于它們自身的組件,而Seata的注冊中心也是一樣是作用于Seata自身.(注:Dubbo與Spring cloud的注冊中心與Seata無關(guān))
- Seata支持哪些注冊中心?
- eureka
- consul
- nacos
- etcd
- zookeeper
- sofa
- redis
- file (直連)
### API支持
Seata API 分為兩大類:High-Level API 和 Low-Level API :
High-Level API :用于事務(wù)邊界定義、控制及事務(wù)狀態(tài)查詢。
Low-Level API :用于控制事務(wù)上下文的傳播。
### 微服務(wù)框架支持
- http://seata.io/zh-cn/docs/user/microservice.html
### 事務(wù)模式
## 參考資料
- [Seat中文官方文檔](
http://seata.io/zh-cn/docs/overview/what-is-seata.html)
- 《Spring Cloud Alibaba 微服務(wù)原理與實(shí)戰(zhàn)》
- [尚硅谷SpringCloud(H版&alibaba)框架開發(fā)教程(大牛講授spring cloud) P139-P148](
https://www.bilibili.com/video/BV18E411x7eT?p=111)
聲明:本站所有文章資源內(nèi)容,如無特殊說明或標(biāo)注,均為采集網(wǎng)絡(luò)資源。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系本站刪除。
