成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

讓我們一起聊聊對CAP理論的理解

開發 前端
最近經??吹接腥税l一個Go實現的分布式事務管理器dtm,看到star增的挺猛的,索性看看代碼實現,畢竟工作中部分場景也用的上。

[[431081]]

介紹

最近經常看到有人發一個Go實現的分布式事務管理器dtm,看到star增的挺猛的,索性看看代碼實現,畢竟工作中部分場景也用的上。

在寫源碼分析之前,我們先來簡單入門一下分布式理論。

CAP

分布式系統中很大的一個難點在于各個節點之間的狀態如何同步,CAP就是分布式系統領域一條已經被證明的定律。

其中各個字母的含義如下:

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

我們先用一個簡單的例子來說明。

假設我們的系統是由兩個服務組成的:G1和G2。

G1和G2維護了同一條記錄V0。外部客戶端(Client)可以調用任意一個服務。

當一個客戶端對任意一個服務發起讀|寫請求,那么被請求的那個服務器根據客戶端的請求,處理、響應結果。

比如客戶端向G1發起一個讀操作,客戶端G1響應請求。

又比如客戶端向G1發起一個寫操作,把V0修改成V1。

到這里,我們建立了這樣一個系統。接下來看看系統的一致性、可用性和分區容忍性意味著什么。

Consistency(一致性)

這個一致性和事務中ACID中的C還是有區別的。事務中的C更多是指在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這里的完整性包括一些外鍵約束、鍵的唯一性等。

而分布式事務中的C指的是,寫操作之后的讀操作,必須返回該值,這就等同于所有節點訪問的是同一份最新數據的副本。

下面是一個非一致性的例子。

客戶端成功請求G1服務器寫V1。假設當前服務G1和G2不能互通(網絡分區),導致G1數據不能同步到G2,此時客戶端從G2讀取數據,依舊返回V0。

來看一個滿足一致性的例子。

在這個系統中,G1收到客戶端寫V1的操作,G1在修改自身數據的同時,會把V1數據同步到G2。G1在收到G2的響應后,才向客戶端響應結果。這樣,之后無論客戶端從哪個節點讀取數據,都能獲取到V1值。

Availability(可用性)

可用性指的是系統中非故障節點接收到的每一個請求都必須響應。

在一個可用的系統中,如果客戶端向服務器發送一個請求,那么服務器必須響應客戶端每一個請求,不允許忽略客戶端請求。

Partition Tolerance(分區容忍性)

什么分區?

網絡分區。

網絡分區咋么理解?

假設有兩臺服務器A和B,本來他們兩是正常通信的,不知道啥原因,他們之間的網絡鏈接斷開,導致無法正常通信。此時本來在同一個網絡的AB,發生了網絡分區。變成了A所在的A網絡和B所在的B網絡。這就是網絡分區。

容忍性是指什么?

當一個服務的多臺服務器發生上述網絡分區的時候,系統依舊能正常提供服務。

對CAP的誤解

網上很多文章都是這么說的:

一個分布式系統最多只能同時滿足一致性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項,這被稱為CAP定律。

似乎CAP被解釋成一種三選二的定律。

看到一篇文章CAP Twelve Years Later: How the "Rules" Have Changed[1]有一段CAP的完整表述:

The CAP theorem asserts that any net-worked shared-data system can have only two of three desirable properties。

按照表述,發現網上這句話存在一定的誤導性。

CAP定律的前提是P(網絡分區)發生后,才會有CA的選擇。

當P發生的時候,而我們的系統直接不服務了,那就不存在選擇什么CA了。

因此CAP的正常理解應該是:當P(網絡分區)發生的時候,如果我們要繼續提供服務,那么C(一致性)和A(可用性)只能2選1了。

Consistency和Availability的矛盾

為什么當P發生時,CA只能二選一?

還是之前那個簡單的例子。

假設此時G1和G2發生了網絡分區。

接下來我們的客戶端請求G1寫V1數據。由于分區,G1不能同步數據到G2。

 

如果我們保證G2的可用性,那么當客戶端請求G2數據的時候,G2能正常響應V0數據,但是數據和G1不一致,無法保證一致性。

如果我們保證G2的一致性,那么在G1寫操作的時候,就必須鎖定G2的讀寫操作,那么此時G2就處于不可用狀態,無法保證其可用性。

因此,Consistency和Availability存在矛盾。

參考

https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/

https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/

 

https://www.zhihu.com/question/64778723

 

責任編輯:武曉燕 來源: 吳親強的深夜食堂
相關推薦

2021-08-27 07:06:10

IOJava抽象

2022-02-14 07:03:31

網站安全MFA

2022-06-26 09:40:55

Django框架服務

2023-08-02 08:35:54

文件操作數據源

2021-07-31 11:40:55

Openresty開源

2022-08-01 07:57:03

數組操作內存

2021-11-09 23:54:19

開發SMI Linkerd

2022-12-05 09:10:21

2021-11-04 06:58:31

CSS性能設備

2022-08-30 13:48:16

LinuxMySQL內存

2022-03-15 20:18:35

單元測試工具

2022-03-31 18:59:43

數據庫InnoDBMySQL

2021-12-29 08:27:05

ByteBuffer磁盤服務器

2022-03-08 17:52:58

TCP格式IP

2023-04-26 00:19:18

AICSI-RSChatGPT

2021-12-10 07:45:48

字節音頻視頻

2021-11-26 07:00:05

反轉整數數字

2021-07-15 07:23:28

Singlefligh設計

2022-02-14 10:16:22

Axios接口HTTP

2016-09-06 10:39:30

Dell Techno
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91原创视频在线观看 | 夜夜操天天艹 | 福利网址 | 狠狠爱一区二区三区 | 亚洲精品国产电影 | 日韩高清一区二区 | 免费视频一区二区三区在线观看 | 国产欧美一区二区三区在线看 | 国产精品国产三级国产aⅴ无密码 | 色网站在线免费观看 | 一区二区视频免费观看 | 黄色片在线观看网址 | 在线观看国产三级 | 最新毛片网站 | 亚洲午夜av久久乱码 | 亚洲视频一区二区 | 日本成人免费观看 | 国内自拍偷拍 | 有码一区| 中文字幕日韩欧美一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 久久久国| 色婷婷久久综合 | 国产7777 | 国产精品久久久久无码av | 理论片午午伦夜理片影院 | 午夜精品久久久 | 日本免费一区二区三区 | www.中文字幕| 久久久久亚洲国产| 欧洲成人午夜免费大片 | 亚洲综合久久久 | 狠狠干狠狠操 | 精品视频在线免费观看 | 91久久国产综合久久 | 日本在线播放一区二区 | 麻豆久久久9性大片 | 日本在线黄色 | 亚洲一区二区中文字幕 | 99婷婷 | 伊人焦久影院 |