久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

nosqlcap原則,nosql cap理論

zookeeper和eureka的區(qū)別

zookeeper和eureka的區(qū)別:

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:國際域名空間、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、平羅網(wǎng)站維護、網(wǎng)站推廣。

CAP 原則又稱 CAP 定理,1998年,加州大學(xué)的計算機科學(xué)家 Eric Brewer 提出的,指的是在一個分布式系統(tǒng)中,Consistency(一致性)、?Availability(可用性)、Partition tolerance(分區(qū)容錯性),三者不可兼得(我們常說的魚和熊掌不可兼得)。CAP 原則也是 NoSQL 數(shù)據(jù)庫的基石。

1、一致性(Consistency,C):

在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時刻是否同樣的值。(等同于所有節(jié)點訪問同一份最新的數(shù)據(jù)副本)。

2、可用性(Availability,A):

在一個分布式系統(tǒng)的集群中一部分節(jié)點故障后,該集群是否還能夠正常響應(yīng)客戶端的讀寫請求。(對數(shù)據(jù)更新具備高可用性)。

3、分區(qū)容錯性(Partition tolerance,P):

大多數(shù)的分布式系統(tǒng)都分布在多個子網(wǎng)絡(luò)中,而每個子網(wǎng)絡(luò)就叫做一個區(qū)(partition)。分區(qū)容錯的意思是,區(qū)間通信可能失敗。

比如阿里巴巴的服務(wù)器,一臺服務(wù)器放在上海,另一臺服務(wù)器放在北京,這就是兩個區(qū),它們之間可能存在無法通信的情況。在一個分布式系統(tǒng)中一般分區(qū)容錯是無法避免的,因此可以認(rèn)為 CAP 中的 P 總是成立的。CAP 理論告訴我們,在 C 和 A 之間是無法同時做到。

zookeeper和eureka的區(qū)別:

Spring Cloud Eureka? - AP

Spring Cloud Netflix 在設(shè)計 Eureka 時就緊遵AP原則。Eureka Server 也可以運行多個實例來構(gòu)建集群,解決單點問題,但不同于 ZooKeeper 的選舉 leader 的過程,Eureka Server 采用的是Peer to Peer 對等通信。

這是一種去中心化的架構(gòu),無 master/slave 之分,每一個 Peer 都是對等的。在這種架構(gòu)風(fēng)格中,節(jié)點通過彼此互相注冊來提高可用性,每個節(jié)點需要添加一個或多個有效的 serviceUrl 指向其他節(jié)點。每個節(jié)點都可被視為其他節(jié)點的副本。

在集群環(huán)境中如果某臺 Eureka Server 宕機,Eureka Client 的請求會自動切換到新的 Eureka Server 節(jié)點上,當(dāng)宕機的服務(wù)器重新恢復(fù)后,Eureka 會再次將其納入到服務(wù)器集群管理之中。

當(dāng)節(jié)點開始接受客戶端請求時,所有的操作都會在節(jié)點間進行復(fù)制操作,將請求復(fù)制到該 Eureka Server 當(dāng)前所知的其它所有節(jié)點中。

當(dāng)一個新的 Eureka Server 節(jié)點啟動后,會首先嘗試從鄰近節(jié)點獲取所有注冊列表信息,并完成初始化。Eureka Server 通過 getEurekaServiceUrls方法獲取所有的節(jié)點,并且會通過心跳契約的方式定期更新。

默認(rèn)情況下,如果 Eureka Server 在一定時間內(nèi)沒有接收到某個服務(wù)實例的心跳,Eureka Server 將會注銷該實例。當(dāng) Eureka Server 節(jié)點在短時間內(nèi)丟失過多的心跳時,那么這個節(jié)點就會進入自我保護模式。

Apache Zookeeper - CP

與 Eureka 有所不同,Apache Zookeeper 在設(shè)計時就緊遵CP原則,即任何時候?qū)ookeeper 的訪問請求能得到一致的數(shù)據(jù)結(jié)果,同時系統(tǒng)對網(wǎng)絡(luò)分割具備容錯性,但是 Zookeeper 不能保證每次服務(wù)請求都是可達的。

從 Zookeeper 的實際應(yīng)用情況來看,在使用 Zookeeper 獲取服務(wù)列表時,如果此時的 Zookeeper 集群中的 Leader 宕機了,該集群就要進行 Leader 的選舉,又或者 Zookeeper 集群中半數(shù)以上服務(wù)器節(jié)點不可用,那么將無法處理該請求。所以說,Zookeeper 不能保證服務(wù)可用性。

當(dāng)然,在大多數(shù)分布式環(huán)境中,尤其是涉及到數(shù)據(jù)存儲的場景,數(shù)據(jù)一致性應(yīng)該是首先被保證的,這也是 Zookeeper 設(shè)計緊遵CP原則的另一個原因。

但是對于服務(wù)發(fā)現(xiàn)來說,情況就不太一樣了,針對同一個服務(wù),即使注冊中心的不同節(jié)點保存的服務(wù)提供者信息不盡相同,也并不會造成災(zāi)難性的后果。

因為對于服務(wù)消費者來說,能消費才是最重要的,消費者雖然拿到可能不正確的服務(wù)實例信息后嘗試消費一下,也要勝過因為無法獲取實例信息而不去消費,導(dǎo)致系統(tǒng)異常要好

CAP原則的與NoSQL的關(guān)系

傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在功能支持上通常很寬泛,從簡單的鍵值查詢,到復(fù)雜的多表聯(lián)合查詢再到事務(wù)機制的支持。而與之不同的是,NoSQL系統(tǒng)通常注重性能和擴展性,而非事務(wù)機制(事務(wù)就是強一致性的體現(xiàn)) 。傳統(tǒng)的SQL數(shù)據(jù)庫的事務(wù)通常都是支持ACID的強事務(wù)機制。A代表原子性,即在事務(wù)中執(zhí)行多個操作是原子性的,要么事務(wù)中的操作全部執(zhí)行,要么一個都不執(zhí)行;C代表一致性,即保證進行事務(wù)的過程中整個數(shù)據(jù)加的狀態(tài)是一致的,不會出現(xiàn)數(shù)據(jù)花掉的情況;I代表隔離性,即兩個事務(wù)不會相互影響,覆蓋彼此數(shù)據(jù)等;D表示持久化,即事務(wù)一量完成,那么數(shù)據(jù)應(yīng)該是被寫到安全的,持久化存儲的設(shè)備上(比如磁盤)。NoSQL系統(tǒng)僅提供對行級別的原子性保證,也就是說同時對同一個Key下的數(shù)據(jù)進行的兩個操作,在實際執(zhí)行的時候是會串行的執(zhí)行,保證了每一個Key-Value對不會被破壞。

什么是CAP原理

分布式領(lǐng)域CAP理論,

Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動都是同步的

Availability(可用性), 好的響應(yīng)性能

Partition tolerance(分區(qū)容錯性) 可靠性

定理:任何分布式系統(tǒng)只可同時滿足二點,沒法三者兼顧。

忠告:架構(gòu)師不要將精力浪費在如何設(shè)計能滿足三者的完美分布式系統(tǒng),而是應(yīng)該進行取舍。

關(guān)系數(shù)據(jù)庫的ACID模型擁有 高一致性 + 可用性 很難進行分區(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思想主要強調(diào)基本的可用性,如果你需要High 可用性,也就是純粹的高性能,那么就要以一致性或容錯性為犧牲,BASE思想的方案在性能上還是有潛力可挖的。

現(xiàn)在NoSQL運動豐富了拓展了BASE思想,可按照具體情況定制特別方案,比如忽視一致性,獲得高可用性等等,NOSQL應(yīng)該有下面兩個流派:

1. Key-Value存儲,如Amaze Dynamo等,可根據(jù)CAP三原則靈活選擇不同傾向的數(shù)據(jù)庫產(chǎn)品。

2. 領(lǐng)域模型 + 分布式緩存 + 存儲 (Qi4j和NoSQL運動),可根據(jù)CAP三原則結(jié)合自己項目定制靈活的分布式方案,難度高。

這兩者共同點:都是關(guān)系數(shù)據(jù)庫SQL以外的可選方案,邏輯隨著數(shù)據(jù)分布,任何模型都可以自己持久化,將數(shù)據(jù)處理和數(shù)據(jù)存儲分離,將讀和寫分離,存儲可以是異步或同步,取決于對一致性的要求程度。

不同點: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)師必須掌握的。

關(guān)于NewSQL數(shù)據(jù)庫對于CAP的再解釋

作者 石默研

關(guān)于CAP的討論已經(jīng)很多,包括作者的另一篇文章“對CAP的初步解釋”,基本已經(jīng)即定思維的理解就是:分布式系統(tǒng)必須遵循CAP,一個分布式系統(tǒng)的設(shè)計只能同時滿足其中兩個,不可能同時滿足;傳統(tǒng)關(guān)系數(shù)據(jù)庫選擇A與C,代表了互聯(lián)網(wǎng)新興技術(shù)的NoSQL數(shù)據(jù)庫則選擇A與P(或者C與P,雖然這種情況其實需要詳細討論)。

但是,近年來,新興的NewSQL數(shù)據(jù)庫(TiDB或者OceanBase),則是一種在分布式環(huán)境下,保證的ACID強事務(wù)特征的強一致性數(shù)據(jù)庫,并且很顯然,它同時也滿足了高可用性與優(yōu)秀的分區(qū)可容忍性(很好的可擴展特性便是其一個層面的證明),似乎看起來,C、A、P都同時保證了,這不是違反了已經(jīng)經(jīng)過嚴(yán)格證明的CAP理論嗎?

這個問題初看起來,似乎是比較神奇,但仔細分析,其實答案是很明顯的。

首先,需要讀者區(qū)分“分布式”與CAP中所提到的分區(qū)可容忍性Paritition Tolerance并不是一回事。分區(qū)可容忍性P是指以下兩種分布式的情況:

. 同一份數(shù)據(jù)的多個副本的可分布性

. 有相互關(guān)聯(lián)的數(shù)據(jù)的可分布性(操作中表現(xiàn)為保證ACID的強分布式事務(wù))

即使是分庫分表,如果不存在以上兩種情況,只是獨立數(shù)據(jù)在同一個節(jié)點上的情況,雖然也是分布式,但跟CAP中的P沒有半毛錢關(guān)系。

那么,還是回到上面的問題,NewSQL數(shù)據(jù)庫,確實也是在保證了同一份數(shù)據(jù)多副本的強讀寫一致性、以及強分布式事務(wù)特性這樣的C的情況下,同時保證了A與P呀!事實確實如此,但這還是要仔細分析:

無論是TiDB,還是OceanBase,其在保證數(shù)據(jù)多副本的強一致性時,都采用了Paxos協(xié)議或者Raft,它們簡單來講就是多數(shù)選舉的原則,即寫不需要全部副本都完成,就能保證讀的強一致性,反過來也是一樣。因此,其在分布式情況下,保證數(shù)據(jù)讀寫強一致性的效率還是很高的,就是說,在同一個數(shù)據(jù)中心的網(wǎng)絡(luò)環(huán)境下,雖然這種分布可容忍性的滿足理論上講也會比單節(jié)點多一點點效率損失,但實際上是可以忽略不計的。但需要指出的是,在跨數(shù)據(jù)中心、跨城市的分布式情況下,如果要保證數(shù)據(jù)多副本的強一致性,即保證分區(qū)可容忍性,對效率(實際上是可用性A)的影響那還是不可忽略的。因此,在這種情況下,CAP理論依然成立。

再來看相互關(guān)聯(lián)數(shù)據(jù)的可分布性,這就涉及到了分布式事務(wù)。現(xiàn)有的NewSQL數(shù)據(jù)庫,即使在同一數(shù)據(jù)中心,為了保證強的分布式事務(wù),對效率的折衷都是不可忽略的,所謂的樂觀事務(wù),只是因為客觀問題本身沖突就少,并不改變沖突很多時效率明顯受影響的現(xiàn)實。因此,NewSQL數(shù)據(jù)庫雖然提供強分布式事務(wù)的能力,但在現(xiàn)實應(yīng)用中,都是提倡盡量避免大量的分布式事務(wù)出現(xiàn)。如果你所遇到的應(yīng)用場景是確實需要大量的分布式事務(wù)執(zhí)行,又不做應(yīng)用優(yōu)化全交給數(shù)據(jù)庫執(zhí)行,那么,現(xiàn)有的NewSQL分布式數(shù)據(jù)庫,依然會遇到明顯的性能問題,其實就是可用性A降低了。同學(xué)仔細去研究應(yīng)用中的實際情況就會發(fā)現(xiàn),很多互聯(lián)網(wǎng)應(yīng)用,當(dāng)其所需要的QPS很高很高,而對讀寫一致性與強分布式事務(wù)的要求又不那很高時候,其實,NewSQL數(shù)據(jù)庫還是不能滿足他們的需求的,他們?nèi)匀恍枰鶕?jù)自己的情況改造或者選用NoSQL數(shù)據(jù)庫,這也是CAP理論并沒有被NewSQL打破的現(xiàn)實證明。

因此,總結(jié)來講,NewSQL數(shù)據(jù)庫,也是遵循CAP理論的,只不過,在同中心數(shù)據(jù)多副本情況下,保證P的同時對A的影響微乎其微;而在分布式事務(wù)的情況下,又采用了與應(yīng)用特性相關(guān)的策略(其實樂觀、悲觀事務(wù)本質(zhì)上就有根本應(yīng)用特性區(qū)分的意思)來保證性能而已。當(dāng)然,隨著網(wǎng)絡(luò)與計算機性能的提高,CAP三個特征中,保證其中兩個,折衷另外一個,所帶來的影響也會逐漸變小,但其理論依然是正確的。

什么是NoSQL數(shù)據(jù)庫?

2. 什么是NoSQL?

2.1 NoSQL 概述

NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,

泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重數(shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題,包括超大規(guī)模數(shù)據(jù)的存儲。

(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定的模式,無需多余操作就可以橫向擴展。

2.2 NoSQL代表

MongDB、 Redis、Memcache

3. 關(guān)系型數(shù)據(jù)庫與NoSQL的區(qū)別?

3.1 RDBMS

高度組織化結(jié)構(gòu)化數(shù)據(jù)

結(jié)構(gòu)化查詢語言(SQL)

數(shù)據(jù)和關(guān)系都存儲在單獨的表中。

數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言

嚴(yán)格的一致性

基礎(chǔ)事務(wù)

ACID

關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則

事務(wù)在英文中是transaction,和現(xiàn)實世界中的交易很類似,它有如下四個特性:

A (Atomicity) 原子性

原子性很容易理解,也就是說事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個操作失敗,整個事務(wù)就失敗,需要回滾。比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。

C (Consistency) 一致性

一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務(wù)的運行不會改變數(shù)據(jù)庫原本的一致性約束。

I (Isolation) 獨立性

所謂的獨立性是指并發(fā)的事務(wù)之間不會互相影響,如果一個事務(wù)要訪問的數(shù)據(jù)正在被另外一個事務(wù)修改,只要另外一個事務(wù)未提交,它所訪問的數(shù)據(jù)就不受未提交事務(wù)的影響。比如現(xiàn)有有個交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的

D (Durability) 持久性

持久性是指一旦事務(wù)提交后,它所做的修改將會永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機也不會丟失。

3.2 NoSQL

代表著不僅僅是SQL

沒有聲明性查詢語言

沒有預(yù)定義的模式

鍵 - 值對存儲,列存儲,文檔存儲,圖形數(shù)據(jù)庫

最終一致性,而非ACID屬性

非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)

CAP定理

高性能,高可用性和可伸縮性

分布式數(shù)據(jù)庫中的CAP原理(了解)

CAP定理:

Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動都是同步的

Availability(可用性), 好的響應(yīng)性能

Partition tolerance(分區(qū)容錯性) 可靠性

P: 系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運作。

定理:任何分布式系統(tǒng)只可同時滿足二點,沒法三者兼顧。

CAP理論的核心是:一個分布式系統(tǒng)不可能同時很好的滿足一致性,可用性和分區(qū)容錯性這三個需求,

因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:

CA - 單點集群,滿足一致性,可用性的系統(tǒng),通常在可擴展性上不太強大。

CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。

AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通??赡軐σ恢滦砸蟮鸵恍?/p>

CAP理論就是說在分布式存儲系統(tǒng)中,最多只能實現(xiàn)上面的兩點。

而由于當(dāng)前的網(wǎng)絡(luò)硬件肯定會出現(xiàn)延遲丟包等問題,所以分區(qū)容忍性是我們必須需要實現(xiàn)的。

所以我們只能在一致性和可用性之間進行權(quán)衡,沒有NoSQL系統(tǒng)能同時保證這三點。

說明:C:強一致性 A:高可用性 P:分布式容忍性

舉例:

CA:傳統(tǒng)Oracle數(shù)據(jù)庫

AP:大多數(shù)網(wǎng)站架構(gòu)的選擇

CP:Redis、Mongodb

注意:分布式架構(gòu)的時候必須做出取舍。

一致性和可用性之間取一個平衡。多余大多數(shù)web應(yīng)用,其實并不需要強一致性。

因此犧牲C換取P,這是目前分布式數(shù)據(jù)庫產(chǎn)品的方向。

4. 當(dāng)下NoSQL的經(jīng)典應(yīng)用

當(dāng)下的應(yīng)用是 SQL 與 NoSQL 一起使用的。

代表項目:阿里巴巴商品信息的存放。

去 IOE 化。

ps:I 是指 IBM 的小型機,很貴的,好像好幾萬一臺;O 是指 Oracle 數(shù)據(jù)庫,也很貴的,好幾萬呢;M 是指 EMC 的存儲設(shè)備,也很貴的。

難點:

數(shù)據(jù)類型多樣性。

數(shù)據(jù)源多樣性和變化重構(gòu)。

數(shù)據(jù)源改造而服務(wù)平臺不需要大面積重構(gòu)。

如何正確理解CAP理論

常見的理解及分析

目前流行的、對CAP理論解釋的情形是從同一數(shù)據(jù)在網(wǎng)絡(luò)環(huán)境中的多個副本出發(fā)的。為了保證數(shù)據(jù)不會丟失,在企業(yè)級的數(shù)據(jù)管理方案中,一般必須考慮數(shù)據(jù)的冗余存儲問題,而這應(yīng)該是通過在網(wǎng)絡(luò)上的其他獨立物理存儲節(jié)點上保留另一份、或多份數(shù)據(jù)副本來實現(xiàn)的(如附圖所示)。因為在同一個存儲節(jié)點上的數(shù)據(jù)冗余明顯不能解決單點故障問題,這與通過多節(jié)點集群來提供更好的計算可用性的道理是相同的。

附圖 CAP理論示意圖

其實,不用做嚴(yán)格的證明也可以想見,如附圖的情況,數(shù)據(jù)在節(jié)點A、B、C上保留了三份,如果對節(jié)點A上的數(shù)據(jù)進行了修改,然后再讓客戶端通過網(wǎng)絡(luò)對該數(shù)據(jù)進行讀取。那么,客戶端的讀取操作什么時候返回呢?

有這樣兩種情況:一種情況是要求節(jié)點A、B、C的三份數(shù)據(jù)完全一致后返回。也就是說,這時從任何一個網(wǎng)絡(luò)節(jié)點讀取的數(shù)據(jù)都是一樣的,這就是所謂的強一致性讀。很明顯,這時數(shù)據(jù)讀取的Latency要高一些(因為要等數(shù)據(jù)在網(wǎng)絡(luò)中的復(fù)制),同時A、B、C三個節(jié)點中任何一個宕機,都會導(dǎo)致數(shù)據(jù)不可用。也就是說,要保證強一致性,網(wǎng)絡(luò)中的副本越多,數(shù)據(jù)的可用性就越差;

另一種情況是,允許讀操作立即返回,容忍B節(jié)點的讀取與A節(jié)點的讀取不一致的情況發(fā)生。這樣一來,可用性顯然得到了提高,網(wǎng)絡(luò)中的副本也可以多一些,唯一得不到保證的是數(shù)據(jù)一致性。當(dāng)然,對寫操作同樣也有多個節(jié)點一致性的情況,在此不再贅述。

可以看出,上述對CAP理論的解釋主要是從網(wǎng)絡(luò)上多個節(jié)點之間的讀寫一致性出發(fā)考慮問題的。而這一點,對于關(guān)系型數(shù)據(jù)庫意味著什么呢?當(dāng)然主要是指通常所說的Standby(關(guān)于分布式事務(wù),涉及到更多考慮,隨后討論)情況。對此,在實踐中我們大多已經(jīng)采取了弱一致性的異步延時同步方案,以提高可用性。這種情況并不存在關(guān)系型數(shù)據(jù)庫為保證C、A而放棄P的情況;而對海量數(shù)據(jù)管理的需求,關(guān)系型數(shù)據(jù)庫擴展過程中所遇到的性能瓶頸,似乎也并不是CAP理論中所描述的那種原因造成的。那么,上述流行的說法中所描述的關(guān)系型數(shù)據(jù)庫為保證C、A而犧牲P到底是在指什么呢?

因此,如果根據(jù)現(xiàn)有的大多數(shù)資料對CAP理論的如上解釋,即只將其當(dāng)作分布式系統(tǒng)中多個數(shù)據(jù)副本之間的讀寫一致性問題的通用理論對待,那么就可以得出結(jié)論:CAP既適用于NoSQL數(shù)據(jù)庫,也適用于關(guān)系型數(shù)據(jù)庫。它是NoSQL數(shù)據(jù)庫、關(guān)系型數(shù)據(jù)庫,乃至一切分布式系統(tǒng)在設(shè)計數(shù)據(jù)多個副本之間讀寫一致性問題時需要遵循的共同原則。

更深入的探究:兩種重要的分布式場景

在本文中我們要說的重點與核心是:關(guān)于對CAP理論中一致性C的理解,除了上述數(shù)據(jù)副本之間的讀寫一致性以外,分布式環(huán)境中還有兩種非常重要的場景,如果不對它們進行認(rèn)識與討論,就永遠無法全面地理解CAP,當(dāng)然也就無法根據(jù)CAP做出正確的解釋。但可惜的是,目前為止卻很少有人提及這兩種場景:那就是事務(wù)與關(guān)聯(lián)。

先來看看分布式環(huán)境中的事務(wù)場景。我們知道,在關(guān)系型數(shù)據(jù)庫的事務(wù)操作遵循ACID原則,其中的一致性C,主要是指一個事務(wù)中相關(guān)聯(lián)的數(shù)據(jù)在事務(wù)操作結(jié)束后是一致的。所謂ACID原則,是指在寫入/異動資料的過程中,為保證交易正確可靠所必須具備的四個特性:即原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)和持久性(Durability)。

例如銀行的一個存款交易事務(wù),將導(dǎo)致交易流水表增加一條記錄。同時,必須導(dǎo)致賬戶表余額發(fā)生變化,這兩個操作必須是一個事務(wù)中全部完成,保證相關(guān)數(shù)據(jù)的一致性。而前文解釋的CAP理論中的C是指對一個數(shù)據(jù)多個備份的讀寫一致性。表面上看,這兩者不是一回事,但實際上,卻是本質(zhì)基本相同的事物:數(shù)據(jù)請求會等待多個相關(guān)數(shù)據(jù)操作全部完成才返回。對分布式系統(tǒng)來講,這就是我們通常所說的分布式事務(wù)問題。

眾所周知,分布式事務(wù)一般采用兩階段提交策略來實現(xiàn),這是一個非常耗時的復(fù)雜過程,會嚴(yán)重影響系統(tǒng)效率,在實踐中我們盡量避免使用它。在實踐過程中,如果我們?yōu)榱藬U展數(shù)據(jù)容量將數(shù)據(jù)分布式存儲,而事務(wù)的要求又完全不能降低。那么,系統(tǒng)的可用性一定會大大降低,在現(xiàn)實中我們一般都采用對這些數(shù)據(jù)不分散存儲的策略。

當(dāng)然,我們也可以說,最常使用的關(guān)系型數(shù)據(jù)庫,因為這個原因,擴展性(分區(qū)可容忍性P)受到了限制,這是完全符合CAP理論的。但同時我們應(yīng)該意識到,這對NoSQL數(shù)據(jù)庫也是一樣的。如果NoSQL數(shù)據(jù)庫也要求嚴(yán)格的分布式事務(wù)功能,情況并不會比關(guān)系型數(shù)據(jù)庫好多少。只是在NoSQL的設(shè)計中,我們往往會弱化甚至去除事務(wù)的功能,該問題才表現(xiàn)得不那么明顯而已。

因此,在擴展性問題上,如果要說關(guān)系型數(shù)據(jù)庫是為了保證C、A而犧牲P,在盡量避免分布式事務(wù)這一點上來看,應(yīng)該是正確的。也就是說:關(guān)系型數(shù)據(jù)庫應(yīng)該具有強大的事務(wù)功能,如果分區(qū)擴展,可用性就會降低;而NoSQL數(shù)據(jù)庫干脆弱化甚至去除了事務(wù)功能,因此,分區(qū)的可擴展性就大大增加了。

再來看看分布式環(huán)境中的關(guān)聯(lián)場景。初看起來,關(guān)系型數(shù)據(jù)庫中常用的多表關(guān)聯(lián)操作與CAP理論就更加不沾邊了。但仔細考慮,也可以用它來解釋數(shù)據(jù)庫分區(qū)擴展對關(guān)聯(lián)所帶來的影響。對一個數(shù)據(jù)庫來講,采用了分區(qū)擴展策略來擴充容量,數(shù)據(jù)分散存儲了,很顯然多表關(guān)聯(lián)的性能就會下降,因為我們必須在網(wǎng)絡(luò)上進行大量的數(shù)據(jù)遷移操作,這與CAP理論中數(shù)據(jù)副本之間的同步操作本質(zhì)上也是相同的。

因此,如果要保證系統(tǒng)的高可用性,需要同時實現(xiàn)強大的多表關(guān)系操作的關(guān)系型數(shù)據(jù)庫在分區(qū)可擴展性上就遇到了極大的限制(即使是那些采用了各種優(yōu)秀解決方案的MPP架構(gòu)的關(guān)系型數(shù)據(jù)庫,如TeraData,Netezza等,其水平可擴展性也是遠遠不如NoSQL數(shù)據(jù)庫的),而NoSQL數(shù)據(jù)庫則干脆在設(shè)計上弱化甚至去除了多表關(guān)聯(lián)操作。那么,從這一點上來理解“NoSQL數(shù)據(jù)庫是為了保證A與P,而犧牲C”的說法,也是可以講得通的。當(dāng)然,我們應(yīng)該理解,關(guān)聯(lián)問題在很多情況下不是并行處理的優(yōu)點所在,這在很大程度上與Amdahl定律相符合。

所以,從事務(wù)與關(guān)聯(lián)的角度來關(guān)系型數(shù)據(jù)庫的分區(qū)可擴展性為什么受限的原因是最為清楚的。而NoSQL數(shù)據(jù)庫也正是因為弱化,甚至去除了像事務(wù)與關(guān)聯(lián)(全面地講,其實還有索引等特性)等在分布式環(huán)境中會嚴(yán)重影響系統(tǒng)可用性的功能,才獲得了更好的水平可擴展性。

那么,如果將事務(wù)與關(guān)聯(lián)也納入CAP理論中一致性C的范疇的話,問題就很清楚了:關(guān)于“關(guān)系型數(shù)據(jù)庫為了保證一致性C與可用性A,而不得不犧牲分區(qū)可容忍性P”的說法便是正確的了。但關(guān)于“NoSQL選擇了C與P,或者A與P”的說法則是錯誤的,所有的NoSQL數(shù)據(jù)庫在設(shè)計策略的大方向上都是選擇了A與P(雖然對同一數(shù)據(jù)多個副本的讀寫一致性問題的設(shè)計各有不同),從來沒有完全選擇C與P的情況存在。

結(jié)論

現(xiàn)在看來,如果理解CAP理論只是指多個數(shù)據(jù)副本之間讀寫一致性的問題,那么它對關(guān)系型數(shù)據(jù)庫與NoSQL數(shù)據(jù)庫來講是完全一樣的,它只是運行在分布式環(huán)境中的數(shù)據(jù)管理設(shè)施在設(shè)計讀寫一致性問題時需要遵循的一個原則而已,卻并不是NoSQL數(shù)據(jù)庫具有優(yōu)秀的水平可擴展性的真正原因。而如果將CAP理論中的一致性C理解為讀寫一致性、事務(wù)與關(guān)聯(lián)操作的綜合,則可以認(rèn)為關(guān)系型數(shù)據(jù)庫選擇了C與A,而NoSQL數(shù)據(jù)庫則全都是選擇了A與P,但并沒有選擇C與P的情況存在。這才是用CAP理論來支持NoSQL數(shù)據(jù)庫設(shè)計正確認(rèn)識。

其實,這種認(rèn)識正好與被廣泛認(rèn)同的NoSQL的另一個理論基礎(chǔ)相吻合,即與ACID對著干的BASE(基本可用性、軟狀態(tài)與最終一致性)。因為BASE的含義正好是指“NoSQL數(shù)據(jù)庫設(shè)計可以通過犧牲一定的數(shù)據(jù)一致性和容錯性來換取高性能的保持甚至提高”,即NoSQL數(shù)據(jù)庫都應(yīng)該是犧牲C來換取P,而不是犧牲A??捎眯訟正好是所有NoSQL數(shù)據(jù)庫都普遍追求的特性。

本文題目:nosqlcap原則,nosql cap理論
標(biāo)題URL:http://sd-ha.com/article8/dssgoip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄靜態(tài)網(wǎng)站、商城網(wǎng)站企業(yè)建站、響應(yīng)式網(wǎng)站、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站