CAP ,BASE思想
分佈式領域CAP理論,
Consistency(一致性), 數據一致更新,全部數據變更都是同步的
Availability(可用性), 好的響應性能
Partition tolerance(分區容錯性) 可靠性
定理:任何分佈式系統只可同時知足二點,無法三者兼顧。
忠告:架構師不要將精力浪費在如何設計能知足三者的完美分佈式系統,而是應該進行取捨。
關係數據庫的ACID模型擁有 高一致性 + 可用性 很難進行分區:
Atomicity原子性:一個事務中全部操做都必須所有完成,要麼所有不完成。
Consistency一致性. 在事務開始或結束時,數據庫應該在一致狀態。
Isolation隔離層. 事務將假定只有它本身在操做數據庫,彼此不知曉。
Durability. 一旦事務完成,就不能返回。
跨數據庫事務:2PC (two-phase commit), 2PC is the anti-scalability pattern (Pat Helland) 是反可伸縮模式的,JavaEE中的JTA事務能夠支持2PC。由於2PC是反模式,儘可能不要使用2PC,使用BASE來回避。
BASE模型反ACID模型,徹底不一樣ACID模型,犧牲高一致性,得到可用性或可靠性:
Basically Available基本可用。支持分區失敗(e.g. sharding碎片劃分數據庫)
Soft state軟狀態 狀態能夠有一段時間不一樣步,異步。
Eventually consistent最終一致,最終數據是一致的就能夠了,而不是時時高一致。
BASE思想的主要實現有
1.按功能劃分數據庫
2.sharding碎片
BASE思想主要強調基本的可用性,若是你須要High 可用性,也就是純粹的高性能,那麼就要以一致性或容錯性爲犧牲,BASE思想的方案在性能上仍是有潛力可挖的。
如今NoSQL運動豐富了拓展了BASE思想,可按照具體狀況定製特別方案,好比忽視一致性,得到高可用性等等,NOSQL應該有下面兩個流派:
1. Key-Value存儲,如Amaze Dynamo等,可根據CAP三原則靈活選擇不一樣傾向的數據庫產品。
2. 領域模型 + 分佈式緩存 + 存儲 (Qi4j和NoSQL運動),可根據CAP三原則結合本身項目定製靈活的分佈式方案,難度高。
這二者共同點:都是關係數據庫SQL之外的可選方案,邏輯隨着數據分佈,任何模型均可以本身持久化,將數據處理和數據存儲分離,將讀和寫分離,存儲能夠是異步或同步,取決於對一致性的要求程度。
不一樣點:NOSQL之類的Key-Value存儲產品是和關係數據庫頭碰頭的產品BOX,能夠適合非Java如PHP RUBY等領域,是一種能夠拿來就用的產品,而領域模型 + 分佈式緩存 + 存儲是一種複雜的架構解決方案,不是產品,但這種方式更靈活,更應該是架構師必須掌握的。
歡迎關注本站公眾號,獲取更多信息