分布式的數據一致性

一.前序

數據的一致性和系統的性能是每個分布式系統都需要考慮和權衡的問題。一致性的級別如下:
1.強一致性
這種一致性級別是最符合用戶直覺的,它要求系統寫入什么,讀出來的也會是什么,用戶體驗好,但實現起來往往對系統的性能影響大
2.弱一致性
這種一致性級別約束了系統在寫入成功后,不承諾立即可以讀到寫入的值,也不久承諾多久之后數據能夠達到一致,但會盡可能地保證到某個時間級別(比如秒級別)后,數據能夠達到一致狀態
3、最終一致性
最終一致性是弱一致性的一個特例,系統會保證在一定時間內,能夠達到一個數據一致的狀態。這里之所以將最終一致性單獨提出來,是因為它是弱一致性中非常推崇的一種一致性模型,也是業界在大型分布式系統的數據一致性上比較推崇的模型

一.CAP原則(https://en.wikipedia.org/wiki/CAP_theorem)
CAP原則:指的是在一個分布式系統中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可得兼。

注意:此處的Consistency(一致性)為強一致性;

* 一個分布式系統無法同時滿足以上三個需求,因此在實際運用時,我們就要拋棄其中一項.
* CAP定理應用:
1. 放棄P:放棄P就意味著放棄了擴展性.就是把所有數據放在一個分布式節點上.
2. 放棄A:系統遇到故障時,在等待時間內系統無法對外提供正常服務,即不可用.
3. 放棄C:放棄強一致性,而保持數據的最終一致性.引入“時間窗口”概念.
* 對于分布式系統而言,網絡問題是必定會出現的異常情況,因為P是一個分布式系統必須面對和解決的問題.
* 所以往往要根據業務權衡C和A之間的選擇.
Consistency(一致性)和 Availability(可用性)的共存問題?
一致性與可用性為什么不能同時成立?其實答案很簡單,由于Partition tolerance(分區容錯性)的存在,節點間的通行可能會失敗。
舉個例子:
假設微服務A異地部署,東莞區域為A1,深圳區域為A2。如果要保證A1的一致性,那么在A2執行寫操作的時候,鎖定A1的讀操作和寫操作。只有在數據同步后,才重新開放讀寫權限。鎖定期間,A1不能讀寫的,對于Availability(可用性)是不成立。
如果要保證A1的可用性,那么勢必不能鎖定A1,這樣Consistency(一致性)肯定是不成立。

如下公共組件:
Zookeeper、ETCD符合CP設計;Eureka符合AP設計;

二.BASE理論(https://en.wikipedia.org/wiki/Eventual_consistency)
BASE理論由eBay的架構師Dan Pritchett提出,BASE理論是對CAP理論的延伸,核心思想是即使無法做到強一致性,應用應該可以采用合適的方式達到最終一致性。BASE是指基本可用(Basically Available)、軟狀態( Soft State)、最終一致性( Eventual Consistency)。

●基本可用(Basically Available)
分布式系統出現故障的時候,允許損失部分可用性,即保證核心可用。
●軟狀態( Soft State)
允許系統存在中間狀態,并且該中間狀態不會影響系統整體可用性。分布式存儲中一般一份數據至少會有三個副本,允許不同節點間副本同步的延時,這就是軟狀態的體現。
●最終一致性( Eventual Consistency)
分布式系統中所有的副本經過一定的時間后,最終能夠達到一致的狀態。

最終一致性分為5種:
1. 因果一致性(Causal consistency)
指的是:如果節點 A 在更新完某個數據后通知了節點 B,那么節點 B 之后對該數據的訪問和修改都是基于 A 更新后的值。于此同時,和節點 A 無因果關系的節點 C 的數據訪問則沒有這樣的限制。

2. 讀己之所寫(Read your writes)
這種就很簡單了,節點 A 更新一個數據后,它自身總是能訪問到自身更新過的最新值,而不會看到舊值。其實也算一種因果一致性。

3. 會話一致性(Session consistency)
會話一致性將對系統數據的訪問過程框定在了一個會話當中:系統能保證在同一個有效的會話中實現 “讀己之所寫” 的一致性,也就是說,執行更新操作之后,客戶端能夠在同一個會話中始終讀取到該數據項的最新值。

4. 單調讀一致性(Monotonic read consistency)
單調讀一致性是指如果一個節點從系統中讀取出一個數據項的某個值后,那么系統對于該節點后續的任何數據訪問都不應該返回更舊的值。

5. 單調寫一致性(Monotonic write consistency)
指一個系統要能夠保證來自同一個節點的寫操作被順序的執行。

然而,在實際的實踐中,這 5 種系統往往會結合使用,以構建一個具有最終一致性的分布式系統。實際上,不只是分布式系統使用最終一致性,關系型數據庫在某個功能上,也是使用最終一致性的,比如備份,數據庫的復制過程是需要時間的,這個復制過程中,業務讀取到的值就是舊的。當然,最終還是達成了數據一致性。這也算是一個最終一致性的經典案例。

?

轉載于:https://www.cnblogs.com/lovegrace/p/10366162.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278340.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kompozer如何啟動_使用KompoZer創建網站

kompozer如何啟動Are you looking for a way to easily start creating your own webpages? KompoZer is a nice basic website editor that will allow you to quickly get started and become familiar with the process. 您是否正在尋找一種輕松創建自己的網頁的方法&#…

我也說說宏定義likely()和unlikely()

作者:gfree.windgmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft歸gfree.windgmail.com所有,使用GPL發布,可以自由拷貝,轉載。但轉載請保持文檔的完整性,注明原作者及…

圖片懶加載與預加載

預加載 常用的是new Image();,設置其src來實現預載,再使用onload方法回調預載完成事件。function loadImage(url, callback) {var img new Image(); //創建一個Image對象,實現圖片的預下載img.src url;if (img.complete){ // 如果圖片已經存…

電腦pin重置_如果忘記了如何重置Windows PIN

電腦pin重置A good password or PIN is difficult to crack but can be difficult to remember. If you forgot or lost your Windows login PIN, you won’t be able to retrieve it, but you can change it. Here’s how. 好的密碼或PIN很難破解,但很難記住。 如果…

android.support不統一的問題

今天supprt28遇到的問題,由于28還是預覽版,還存在一些bug 都是因為如果程序內出現不同的,support或者其他外部引用庫的多個版本,Gradle在進行合并的時候會使用本地持有的,最高版本的來進行編譯,所以25的sup…

輕松查看Internet Explorer緩存文件

Sometimes you may need a quick and easy way to access Internet Explorer’s cache. Today we take a look at IECacheView which is a great application to get the job done. 有時,您可能需要一種快速簡便的方法來訪問Internet Explorer的緩存。 今天&#xf…

洛谷P1019 單詞接龍

題目描述 單詞接龍是一個與我們經常玩的成語接龍相類似的游戲,現在我們已知一組單詞,且給定一個開頭的字母,要求出以這個字母開頭的最長的“龍”(每個單詞都最多在“龍”中出現兩次),在兩個單詞相連時&…

【Java】接口(interface)VS抽象類

接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認為public abstract類型,接口中的成員變量類型默認為public static final。另外,接口和抽象類在方法上有區別&#x…

latex插入gif_如何將照片和GIF插入Google幻燈片

latex插入gifUsing text (and only text) in your Google Slides presentation is a great way to lose the attention of your audience. Inserting photos and animated GIFs can immediately spice things up by emphasizing the important points you make. 在Google幻燈片…

子矩陣

題目描述 給出如下定義: 子矩陣:從一個矩陣當中選取某些行和某些列交叉位置所組成的新矩陣(保持行與列的相對順序)被稱為原矩陣的一個子矩陣。例如,下面左圖中選取第2、4行和第2、4、5列交叉位置的元素得到一個2*3的子…

springboot入門(一)--快速搭建一個springboot框架

原文出處 前言在開始之前先簡單介紹一下springboot,springboot作為一個微框架,它本身并不提供Spring框架的核心特性以及擴展功能,只是用于快速、敏捷地開發新一代基于Spring框架的應用程序,總的來說springboot不是為了要替代Sprin…

q-dir 打不開文件_Q-Dir –多窗格文件管理器

q-dir 打不開文件Sometimes when looking through a file manager, it would be nice to have more than a dual-pane view. Now you can manage your files with up to four viewing panes at once with Q-Dir. 有時,在查看文件管理器時,擁有多個雙窗格…

用面向對象的方法寫敲門磚

一道名為"敲門磚"的面試題: 用面向對象的方法寫,點擊列表內,子元素的子標簽, 來刪除子元素 敲門磚考點: 遞歸(刪除標簽, 需要找到列表的直屬子標簽, 需要通過遞歸層層往上找, parentNode)冒泡(只需為頂級父元素addEventListener綁定事件, 并通過e.target區分子標簽, …

windows10加載動畫_如何關閉動畫并使Windows 10看起來更快

windows10加載動畫Windows 10 fades and window animations are pure eye candy, but waiting for them to load can make your PC seem a bit slow. If you’d like an instant response, you can disable Windows 10’s animations for a snappier desktop experience. Windo…

JData大數據競賽18年賽題-如期而至-用戶購買時間預測

年前做的,也是學習別人的作品作為記錄 一、賽題 表1:sku基本信息表(jdata_sku_basic_info) 表2:用戶基本信息表(jdata_user_basic_info) 表3:用戶行為表(jdata_user_acti…

LNMP架構(二)

2019獨角獸企業重金招聘Python工程師標準>>> 一 Nginx安裝 1、切換目錄 # cd /usr/local/src 2、下載 # wget http://nginx.org/download/nginx-1.12.1.tar.gz 3、解壓 # tar xzvf nginx-1.12.1.tar.gz 4、切換到nginx目錄下 # cd nginx-1.12.1/ 5、編譯 # ./confi…

edge無法上網dns_如何在Microsoft Edge中通過HTTPS啟用DNS

edge無法上網dnsMicrosoft will one day enable DNS over HTTPS (DoH) for all Windows applications, but you can enable it in the new version of Microsoft Edge today with a hidden flag. DoH will improve your security and privacy online, but it isn’t yet enable…

UIButton小結

前言 本來沒有打算寫這篇文章的, 主要是因為在工作中遇到一些同事再用 有UIButton的時候, 有些很基本的,系統API提供的都不知道, 例如 如何讓UIButton的文字居上,居左, 居右, 居下對其等一些基本點, 為此我特地寫了一下UIButton小結 UIButton回顧 繼承關系 NSObject -> UIRe…

Channel Allocation HDU1373

染色問題&#xff1a;相鄰不能染同一種顏色 最少需要的顏色的數量最大團點的數量 #include<bits/stdc.h> using namespace std;#define N 27int n; int mp[N][N]; int ans; int alt[N][N]; int Max[N];bool dfs(int cur,int tot)//cur是s1集合的個數 {if(0cur){if(tot>…

satis原理淺析

什么是satis 我們一般是從packagist獲取composer包的&#xff0c;但這些都是公開的。那如果我們想創建自己的私有庫呢&#xff0c;比如企業就會有這方便的需要&#xff0c;那我們就可以用satis來創建自己的私有庫。 Satis 是一個靜態的 composer 資源庫生成器。它像是一個超輕量…