摘要:關(guān)系數(shù)據(jù)庫的模型擁有高一致性可用性很難進(jìn)行分區(qū)原子性一個事務(wù)中所有操作都必須全部完成,要么全部不完成。
由于自己負(fù)責(zé)后端的設(shè)計已經(jīng)有一段時間,對設(shè)計的一些思想和理論有一些理解,但最近被問到什么是CAP時,卻一臉懵逼,下來后專門針對CAP架構(gòu)思想進(jìn)行了一些專題學(xué)習(xí),在這里也將這個概念引入給大家,大家可以有意識地了解和學(xué)習(xí)這個思想理念,幫助自己在后續(xù)設(shè)計功能時有更好的參考。
分布式領(lǐng)域CAP理論,
Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動都是同步的
Availability(可用性), 好的響應(yīng)性能
Partition tolerance(分區(qū)容忍性) 可靠性
定理:任何分布式系統(tǒng)只可同時滿足二點(diǎn),沒法三者兼顧。
忠告:架構(gòu)師不要將精力浪費(fèi)在如何設(shè)計能滿足三者的完美分布式系統(tǒng),而是應(yīng)該進(jìn)行取舍。
關(guān)系數(shù)據(jù)庫的ACID模型擁有 高一致性 + 可用性 很難進(jìn)行分區(qū):
Atomicity原子性:一個事務(wù)中所有操作都必須全部完成,要么全部不完成。
Consistency一致性. 在事務(wù)開始或結(jié)束時,數(shù)據(jù)庫應(yīng)該在一致狀態(tài)。
Isolation隔離層. 事務(wù)將假定只有它自己在操作數(shù)據(jù)庫,彼此不知曉。
Durability. 一旦事務(wù)完成,就不能返回。
跨數(shù)據(jù)庫兩段提交事務(wù):2PC (two-phase commit), 2PC is the anti-scalability pattern (Pat Helland) 是反可伸縮模式的,JavaEE中的JTA事務(wù)可以支持2PC。因為2PC是反模式,盡量不要使用2PC,使用BASE來回避。
BASE模型反ACID模型,完全不同ACID模型,犧牲高一致性,獲得可用性或可靠性:
Basically Available基本可用。支持分區(qū)失敗(e.g. sharding碎片劃分?jǐn)?shù)據(jù)庫)
Soft state軟狀態(tài) 狀態(tài)可以有一段時間不同步,異步。
Eventually consistent最終一致,最終數(shù)據(jù)是一致的就可以了,而不是時時高一致。
BASE思想的主要實現(xiàn)有
1.按功能劃分?jǐn)?shù)據(jù)庫
2.sharding碎片
BASE思想主要強(qiáng)調(diào)基本的可用性,如果你需要High 可用性,也就是純粹的高性能,那么就要以一致性或容忍性為犧牲,BASE思想的方案在性能上還是有潛力可挖的。
現(xiàn)在NOSQL運(yùn)動豐富了拓展了BASE思想,可按照具體情況定制特別方案,比如忽視一致性,獲得高可用性等等,NOSQL應(yīng)該有下面兩個流派:
Key-Value存儲,如Amaze Dynamo等,可根據(jù)CAP三原則靈活選擇不同傾向的數(shù)據(jù)庫產(chǎn)品。
領(lǐng)域模型 + 分布式緩存 + 存儲 (Qi4j和NoSql運(yùn)動),可根據(jù)CAP三原則結(jié)合自己項目定制靈活的分布式方案,難度高。
這兩者共同點(diǎn):都是關(guān)系數(shù)據(jù)庫SQL以外的可選方案,邏輯隨著數(shù)據(jù)分布,任何模型都可以自己持久化,將數(shù)據(jù)處理和數(shù)據(jù)存儲分離,將讀和寫分離,存儲可以是異步或同步,取決于對一致性的要求程度。
不同點(diǎn):NOSQL之類的Key-Value存儲產(chǎn)品是和關(guān)系數(shù)據(jù)庫頭碰頭的產(chǎn)品BOX,可以適合非Java如PHP RUBY等領(lǐng)域,是一種可以拿來就用的產(chǎn)品,而領(lǐng)域模型 + 分布式緩存 + 存儲是一種復(fù)雜的架構(gòu)解決方案,不是產(chǎn)品,但這種方式更靈活,更應(yīng)該是架構(gòu)師必須掌握的。
---by 二月的獅子
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/29535.html
摘要:關(guān)系數(shù)據(jù)庫的模型擁有高一致性可用性很難進(jìn)行分區(qū)原子性一個事務(wù)中所有操作都必須全部完成,要么全部不完成。 由于自己負(fù)責(zé)后端的設(shè)計已經(jīng)有一段時間,對設(shè)計的一些思想和理論有一些理解,但最近被問到什么是CAP時,卻一臉懵逼,下來后專門針對CAP架構(gòu)思想進(jìn)行了一些專題學(xué)習(xí),在這里也將這個概念引入給大家,大家可以有意識地了解和學(xué)習(xí)這個思想理念,幫助自己在后續(xù)設(shè)計功能時有更好的參考。 分布式領(lǐng)域C...
摘要:降級往往會指定不同的級別,面臨不同的異常等級執(zhí)行不同的處理。談?wù)勀銓偷恼J(rèn)識兩者關(guān)系具體可以看公眾號阿里巴巴中間件的這篇文章獨(dú)家解讀從微服務(wù)框架到微服務(wù)生態(tài)與并不是競爭關(guān)系,作為成熟的框架,其易用性擴(kuò)展性和健壯性已得到業(yè)界的認(rèn)可。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.com/...
摘要:降級往往會指定不同的級別,面臨不同的異常等級執(zhí)行不同的處理。談?wù)勀銓偷恼J(rèn)識兩者關(guān)系具體可以看公眾號阿里巴巴中間件的這篇文章獨(dú)家解讀從微服務(wù)框架到微服務(wù)生態(tài)與并不是競爭關(guān)系,作為成熟的框架,其易用性擴(kuò)展性和健壯性已得到業(yè)界的認(rèn)可。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.com/...
閱讀 982·2021-11-22 09:34
閱讀 2166·2021-11-11 16:54
閱讀 2202·2021-09-27 14:00
閱讀 946·2019-08-30 15:55
閱讀 1534·2019-08-29 12:46
閱讀 605·2019-08-26 18:42
閱讀 645·2019-08-26 13:31
閱讀 3189·2019-08-26 11:52