<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 110, comments - 101, trackbacks - 0, articles - 7
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    CAP原理與最終一致性 強一致性 透析

    Posted on 2012-04-27 10:23 云云 閱讀(17354) 評論(2)  編輯  收藏

    在足球比賽里,一個球員在一場比賽中進三個球,稱之為帽子戲法(Hat-trick)。在分布式數據系統中,也有一個帽子原理(CAP Theorem),不過此帽子非彼帽子。CAP原理中,有三個要素:

    • 一致性(Consistency)
    • 可用性(Availability)
    • 分區容忍性(Partition tolerance)

    CAP原理指的是,這三個要素最多只能同時實現兩點,不可能三者兼顧。因此在進行分布式架構設計時,必須做出取舍。而對于分布式數據系統,分區容忍性是基本要求,否則就失去了價值。因此設計分布式數據系統,就是在一致性和可用性之間取一個平衡。對于大多數web應用,其實并不需要強一致性,因此犧牲一致性而換取高可用性,是目前多數分布式數據庫產品的方向。

    當然,犧牲一致性,并不是完全不管數據的一致性,否則數據是混亂的,那么系統可用性再高分布式再好也沒有了價值。犧牲一致性,只是不再要求關系型數據庫中的強一致性,而是只要系統能達到最終一致性即可,考慮到客戶體驗,這個最終一致的時間窗口,要盡可能的對用戶透明,也就是需要保障“用戶感知到的一致性”。通常是通過數據的多份異步復制來實現系統的高可用和數據的最終一致性的,“用戶感知到的一致性”的時間窗口則取決于數據復制到一致狀態的時間。

    最終一致性(eventually consistent)

    對于一致性,可以分為從客戶端和服務端兩個不同的視角。從客戶端來看,一致性主要指的是多并發訪問時更新過的數據如何獲取的問題。從服務端來看,則是更新如何復制分布到整個系統,以保證數據最終一致。一致性是因為有并發讀寫才有的問題,因此在理解一致性的問題時,一定要注意結合考慮并發讀寫的場景。

    從客戶端角度,多進程并發訪問時,更新過的數據在不同進程如何獲取的不同策略,決定了不同的一致性。對于關系型數據庫,要求更新過的數據能被后續的訪問都能看到,這是強一致性。如果能容忍后續的部分或者全部訪問不到,則是弱一致性。如果經過一段時間后要求能訪問到更新后的數據,則是最終一致性。

    最終一致性根據更新數據后各進程訪問到數據的時間和方式的不同,又可以區分為:

    • 因果一致性。如果進程A通知進程B它已更新了一個數據項,那么進程B的后續訪問將返回更新后的值,且一次寫入將保證取代前一次寫入。與進程A無因果關系的進程C的訪問遵守一般的最終一致性規則。
    • “讀己之所寫(read-your-writes)”一致性。當進程A自己更新一個數據項之后,它總是訪問到更新過的值,絕不會看到舊值。這是因果一致性模型的一個特例。
    • 會話(Session)一致性。這是上一個模型的實用版本,它把訪問存儲系統的進程放到會話的上下文中。只要會話還存在,系統就保證“讀己之所寫”一致性。如果由于某些失敗情形令會話終止,就要建立新的會話,而且系統的保證不會延續到新的會話。
    • 單調(Monotonic)讀一致性。如果進程已經看到過數據對象的某個值,那么任何后續訪問都不會返回在那個值之前的值。
    • 單調寫一致性。系統保證來自同一個進程的寫操作順序執行。要是系統不能保證這種程度的一致性,就非常難以編程了。

    上述最終一致性的不同方式可以進行組合,例如單調讀一致性和讀己之所寫一致性就可以組合實現。并且從實踐的角度來看,這兩者的組合,讀取自己更新的數據,和一旦讀取到最新的版本不會再讀取舊版本,對于此架構上的程序開發來說,會少很多額外的煩惱。

    從服務端角度,如何盡快將更新后的數據分布到整個系統,降低達到最終一致性的時間窗口,是提高系統的可用度和用戶體驗非常重要的方面。對于分布式數據系統:

    • N — 數據復制的份數
    • W — 更新數據是需要保證寫完成的節點數
    • R — 讀取數據的時候需要讀取的節點數

    如果W+R>N,寫的節點和讀的節點重疊,則是強一致性。例如對于典型的一主一備同步復制的關系型數據庫,N=2,W=2,R=1,則不管讀的是主庫還是備庫的數據,都是一致的。

    如果W+R<=N,則是弱一致性。例如對于一主一備異步復制的關系型數據庫,N=2,W=1,R=1,則如果讀的是備庫,就可能無法讀取主庫已經更新過的數據,所以是弱一致性。

    對于分布式系統,為了保證高可用性,一般設置N>=3。不同的N,W,R組合,是在可用性和一致性之間取一個平衡,以適應不同的應用場景。

    • 如果N=W,R=1,任何一個寫節點失效,都會導致寫失敗,因此可用性會降低,但是由于數據分布的N個節點是同步寫入的,因此可以保證強一致性。
    • 如果N=R,W=1,只需要一個節點寫入成功即可,寫性能和可用性都比較高。但是讀取其他節點的進程可能不能獲取更新后的數據,因此是弱一致性。這種情況下,如果W<(N+1)/2,并且寫入的節點不重疊的話,則會存在寫沖突  

    評論

    # re: CAP原理與最終一致性 強一致性 透析  回復  更多評論   

    2016-04-17 21:31 by 王海龍
    能否表明出處?百度百科cap 內容同此,但不支持原始出處

    # re: CAP原理與最終一致性 強一致性 透析  回復  更多評論   

    2019-09-15 10:09 by NewSea
    學習。

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 男男黄GAY片免费网站WWW| 亚洲中文字幕无码中文字| a级毛片免费高清视频| 亚洲精品无码永久在线观看| 色婷婷精品免费视频| 亚洲国产精品嫩草影院久久| 日本黄页网址在线看免费不卡| 亚洲精品综合久久| 国产又黄又爽又大的免费视频 | 精品亚洲视频在线| 免费一级毛片在级播放| 免费福利资源站在线视频| MM131亚洲国产美女久久| 人妻免费一区二区三区最新| 亚洲av色影在线| 69av免费视频| 亚洲成a人片在线不卡一二三区| 免费在线看片网站| 91视频精品全国免费观看| 亚洲精品综合一二三区在线| 国产四虎免费精品视频| 亚洲国产精品无码久久| 国产亚洲人成网站在线观看| 久久大香伊焦在人线免费| 亚洲一级毛片中文字幕| 国产精品成人四虎免费视频| 你是我的城池营垒免费观看完整版 | 亚洲高清视频一视频二视频三| 国产一级一毛免费黄片| 亚洲女人18毛片水真多| 国产一区二区三区免费在线观看| 一区二区三区免费视频网站| 久久久亚洲欧洲日产国码二区| 青青草国产免费久久久91| 最近更新免费中文字幕大全| 亚洲伊人久久大香线蕉AV| 亚洲宅男天堂在线观看无病毒 | 超pen个人视频国产免费观看| 国产精品永久免费| 亚洲一级免费毛片| 亚洲自偷自偷偷色无码中文|