自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入淺出:分布式、CAP 和 BASE 理論

開發(fā) 架構(gòu)
在計(jì)算機(jī)科學(xué)領(lǐng)域,分布式系統(tǒng)是一門極具挑戰(zhàn)性的研究方向,也是互聯(lián)網(wǎng)應(yīng)用中必不可少的優(yōu)化實(shí)踐,而 CAP 理論和 BASE 理論則是分布式系統(tǒng)中的兩個(gè)關(guān)鍵的概念。

1. 引言

大家好,我是小?,一個(gè)漂泊江湖多年的 985 非科班程序員,曾混跡于國企、互聯(lián)網(wǎng)大廠和創(chuàng)業(yè)公司的后臺(tái)開發(fā)攻城獅。

在計(jì)算機(jī)科學(xué)領(lǐng)域,分布式系統(tǒng)是一門極具挑戰(zhàn)性的研究方向,也是互聯(lián)網(wǎng)應(yīng)用中必不可少的優(yōu)化實(shí)踐,而 CAP 理論和 BASE 理論則是分布式系統(tǒng)中的兩個(gè)關(guān)鍵的概念。

今天,小?將帶大家深入淺出地探討這些概念,幫助大家更好地理解分布式系統(tǒng)的奧秘。

2. 什么是分布式系統(tǒng)

首先,讓我們來談?wù)劮植际较到y(tǒng)。你可以將分布式系統(tǒng)想象成一個(gè)龐大的計(jì)算機(jī)網(wǎng)絡(luò),由多個(gè)計(jì)算機(jī)或服務(wù)器節(jié)點(diǎn)組成,它們可能分布在不同的地理位置上。

圖片圖片

如圖所示,應(yīng)用層的三個(gè)節(jié)點(diǎn)都發(fā)布在不同的城市。這些節(jié)點(diǎn)之間可以相互通信和協(xié)作,共同完成復(fù)雜的任務(wù)。

想象一下,你是一名團(tuán)隊(duì)領(lǐng)導(dǎo),有一項(xiàng)任務(wù)需要完成。如果你獨(dú)自一人完成,可能需要花費(fèi)很長時(shí)間。

但如果你將任務(wù)分解成幾個(gè)子任務(wù),分派給你的團(tuán)隊(duì)成員,他們可以并行工作,更快地完成任務(wù)。這就是分布式系統(tǒng)的核心思想。

3 CAP理論

接下來,讓我們談?wù)?CAP 理論,它是分布式系統(tǒng)設(shè)計(jì)中非常重要的一個(gè)原則。

CAP 是指在分布式系統(tǒng)中,Consistency(一致性)、Availability(可用性)和 Partition tolerance(分區(qū)容錯(cuò)性)這三個(gè)基本原則。

C - 一致性(Consistency)

一致性意味著無論你從分布式系統(tǒng)的哪個(gè)節(jié)點(diǎn)讀取數(shù)據(jù),你都會(huì)獲得相同的數(shù)據(jù)副本,它確保了數(shù)據(jù)的準(zhǔn)確性。

在分布式系統(tǒng)中,廣泛的一致性分為三種,分別是強(qiáng)一致性、弱一致性和最終一致性。

強(qiáng)一致性

強(qiáng)一致性要求用戶在分布式系統(tǒng)中訪問數(shù)據(jù)時(shí),不管是哪個(gè)節(jié)點(diǎn)的響應(yīng),數(shù)據(jù)都應(yīng)該完全一致。

比如在訂單系統(tǒng)中球鞋庫存還剩 10 雙,張三剛買了一雙球鞋,數(shù)據(jù)更新完成后,接下來李四看到的球鞋數(shù)量就只有 9 雙,否則就可能會(huì)出現(xiàn)超賣的情況。

但這需要更多的時(shí)間和精力來協(xié)調(diào),就像李四在買鞋的時(shí)候,必須排隊(duì)先等張三的購買動(dòng)作結(jié)束后才可以繼續(xù),效率較低。

弱一致性

弱一致性是指,在分布式系統(tǒng)中的數(shù)據(jù)被更新后,也允許讓后續(xù)的訪問拿到更新之前的老數(shù)據(jù)。

就像參加聚會(huì)一樣,每個(gè)人都有自己的鐘表。各自的鐘表時(shí)間可能會(huì)有點(diǎn)不一樣,但是這不影響大家聚在一起玩耍。

弱一致性提高了業(yè)務(wù)的效率,但有時(shí)會(huì)導(dǎo)致一些混亂,想象一下如果聚會(huì)人員的時(shí)間差太多,就會(huì)陷入長久的等待。

最終一致性

最終一致性是弱一致性的特殊形式,要求系統(tǒng)的數(shù)據(jù)更新完成,在一段時(shí)間以后,后續(xù)的所有訪問都能拿到最新的數(shù)據(jù)。

這就像朋友圈的消息傳播。當(dāng)你發(fā)了一條消息,它不會(huì)立刻被所有朋友看到,但最終,每個(gè)人都會(huì)看到相同的消息。

一般的業(yè)務(wù)系統(tǒng)基于性價(jià)比的考量,絕大多數(shù)都是采用最終一致性作為分布式系統(tǒng)的設(shè)計(jì)思想。

而 CAP 理論里的一致性,則要求是強(qiáng)一致性。正如官方文檔中描述的那樣:All nodes see the same data at the same time,所有節(jié)點(diǎn)在同一時(shí)間內(nèi)數(shù)據(jù)完全一致。

A - 可用性(Availability)

可用性意味著分布式系統(tǒng)的每個(gè)請(qǐng)求都應(yīng)該得到響應(yīng),而且應(yīng)該在有限的時(shí)間內(nèi)完成。

可用性確保了系統(tǒng)的穩(wěn)定性和可靠性,它描述的是系統(tǒng)能夠很好地為用戶服務(wù),不會(huì)出現(xiàn)用戶操作失敗或者訪問超時(shí)的情況,影響用戶體驗(yàn)。

即官方所說Reads and writes always succeed,服務(wù)在正常響應(yīng)時(shí)間內(nèi)一直可用。

P - 分區(qū)容錯(cuò)性(Partition Tolerance)

分區(qū)容錯(cuò)性是指系統(tǒng)能夠在網(wǎng)絡(luò)分區(qū)或通信故障的情況下繼續(xù)運(yùn)行,也就是節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信出現(xiàn)故障了,或者系統(tǒng)中的某一個(gè)節(jié)點(diǎn)出問題了,我們?nèi)匀恍枰WC業(yè)務(wù)系統(tǒng)可用。

即 The system continues to operate despite arbitrary message loss or failure of part of the system,分布式系統(tǒng)在遇到某個(gè)節(jié)點(diǎn)或者網(wǎng)絡(luò)分區(qū)故障時(shí),仍然能夠?qū)ν馓峁M足一致性或可用性的服務(wù)。

4. CAP 的特點(diǎn)

4.1 分區(qū)容錯(cuò)的重要性

這時(shí),有分布式基礎(chǔ)的同學(xué)可能就會(huì)問了,CAP 理論確實(shí)很重要,但是這三個(gè)特性似乎不能同時(shí)滿足,是吧?

沒錯(cuò),這就是 CAP 理論的核心觀點(diǎn)。

CAP 理論告訴我們,在一個(gè)分布式系統(tǒng)中,我們最多只能同時(shí)滿足其中 2 個(gè)特性,而無法同時(shí)滿足 3 個(gè)。

圖片圖片

為什么 C,A,P 三者不可兼得?首先,我們得知道,在分布式系統(tǒng)中,由于網(wǎng)絡(luò)不可靠,為了保證服務(wù)可以時(shí)刻對(duì)外提供服務(wù),所以分區(qū)容錯(cuò)性是一定要保證的。

試想如果只有一個(gè)分區(qū),談分布式就沒有意義了。而多個(gè)分區(qū),一定會(huì)有分區(qū)的故障問題,分布式系統(tǒng)中保證分區(qū)容錯(cuò)就變成最基本的訴求了。

所以現(xiàn)在我們只需考慮在分區(qū)容錯(cuò)的基礎(chǔ)上,能否同時(shí)滿足一致性和可用性,我們可以用反證法來證明。

4.2 AP Or CP

假設(shè)現(xiàn)在有兩個(gè)分區(qū) P1 和 P2,分區(qū)上都有同一份數(shù)據(jù) D1 和 D2, 現(xiàn)在它們是完全相同的。

圖片圖片

接下來,有一個(gè)請(qǐng)求 1 訪問了 P1,更改了 D1 上的數(shù)據(jù)。然后又有一個(gè)請(qǐng)求 2 訪問了 P2,去訪問 D2 的同一份數(shù)據(jù)。

這時(shí),我們需要權(quán)衡。

先保證一致性

如果先保證滿足一致性和分區(qū)容錯(cuò),即 CP。

這個(gè)過程很容易出現(xiàn):D1 已經(jīng)更新數(shù)據(jù),但是查詢 D2 時(shí),數(shù)據(jù)返回的還是老數(shù)據(jù)。

為了保證 D2 和 D1 數(shù)據(jù)完全一致,必須在更新 D1 數(shù)據(jù)時(shí)給 P2 上的 D2 數(shù)據(jù)上鎖,等待 D1 更新完成后再同步更新 D2。

這個(gè)過程中,鎖住的 D2 就沒法給請(qǐng)求 2 實(shí)時(shí)響應(yīng),也就是違背了 P2 上的可用性。

所以在滿足一致性的前提下,CAP 無法同時(shí)滿足。

先保證可用性

如果先保證滿足可用性和分區(qū)容錯(cuò),即 AP。

可用性要求 P1 和 P2 都可以實(shí)時(shí)響應(yīng),因此在 D2 剛更新完還未同步給 D1 時(shí),兩個(gè) DB 的數(shù)據(jù)是不一致的,也就違背了 P1 和 P2 上的數(shù)據(jù)一致性。

所以在滿足可用性的前提下,CAP 亦無法同時(shí)滿足。

4.3 CAP 如何權(quán)衡

CAP 三者不可兼得,該怎么選擇呢?一般根據(jù)我們的業(yè)務(wù)可以有以下選擇。

滿足一致性和分區(qū)容錯(cuò)CP

保證分區(qū)的強(qiáng)一致性(C),不要求可用(A)。

相當(dāng)于請(qǐng)求到達(dá)某個(gè)系統(tǒng)之前,需要等待數(shù)據(jù)完全同步以后,才會(huì)得到系統(tǒng)的數(shù)據(jù)響應(yīng),一般在數(shù)據(jù)需嚴(yán)格保持一致的金融系統(tǒng)中會(huì)使用這種模式。

滿足可用性和分區(qū)容錯(cuò)AP

保證分區(qū)的可用性(A),不要求強(qiáng)一致性(C)。

當(dāng)請(qǐng)求訪問某個(gè)分區(qū)的數(shù)據(jù)時(shí),可能拿到未同步的老數(shù)據(jù),這種模式一般只要求數(shù)據(jù)滿足最終一致性,進(jìn)而保證系統(tǒng)響應(yīng)速度和高可用。

AP 在業(yè)界使用范圍較廣,比如著名的 BASE 理論(下文會(huì)細(xì)講)。

滿足可用和一致性AC

上文已經(jīng)說過,分布式系統(tǒng)中無法同時(shí)保證系統(tǒng)的強(qiáng)一致性(C)和可用性(A)。

這是因?yàn)榉植际较到y(tǒng)中的分區(qū)是客觀存在無法避免的,而單體系統(tǒng)中的數(shù)據(jù)庫可以通過事務(wù)保證數(shù)據(jù)的一致性和可用性,比如 MySQL 中事務(wù)的四大特性(原子性、一致性、隔離性和持久性,簡稱 ACID)。

5. BASE 理論

BASE 理論是當(dāng)今互聯(lián)網(wǎng)分布式系統(tǒng)的實(shí)踐總結(jié),它的核心思想在于,既然在分布式系統(tǒng)中實(shí)現(xiàn)強(qiáng)一致性的代價(jià)太大,那不如退而求其次。

只需要各應(yīng)用分區(qū)在提供高可用服務(wù)的基礎(chǔ)上,盡最大能力保證數(shù)據(jù)一致性,也就是保證數(shù)據(jù)的最終一致性。

BASE 理論是 CAP 中保證分區(qū)容錯(cuò)(P)的前提下,對(duì)可用性(A)和一致性(C)的權(quán)衡,它由 Basically Available(基本可用),Soft State(軟狀態(tài)),Eventually-Consistent(最終一致性)三方面構(gòu)成,簡稱 BASE 理論。

分布式系統(tǒng)中,CAP 理論提供了一個(gè)理論框架,而 BASE 理論則提供了一種實(shí)際操作的指導(dǎo)原則。

5.1 基本可用

BASE 理論認(rèn)為,分布式系統(tǒng)在面臨故障或異常情況時(shí),可以選擇降低性能或一致性要求,以保持基本的可用性。

這意味著系統(tǒng)可能會(huì)出現(xiàn)一些短暫的不一致性,但最終會(huì)達(dá)到一致狀態(tài)。

正如一個(gè)銀行系統(tǒng)的系統(tǒng)設(shè)計(jì),一般有功能需求和非功能需求,我們首先需要保證核心功能需求的基本可用性。

功能需求

在銀行系統(tǒng)里,用戶提款、轉(zhuǎn)賬等交易模塊就是核心功能,是用戶的基本需求,不能出問題。

而非核心功能可以出現(xiàn)異常,但需要保證在一段時(shí)間內(nèi)修復(fù)。

非功能需求

非功能需求是指用戶業(yè)務(wù)不依賴的其它需求,比如性能相關(guān)的:要求用戶轉(zhuǎn)賬在 0.5 秒內(nèi)完成,但是由于網(wǎng)絡(luò)延遲等原因,可以延遲響應(yīng)至1~2 秒。

由于系統(tǒng)出現(xiàn)此類異常,從而影響了系統(tǒng)的高可用性,但核心流程依然可用,即基本可用性。

5.2 軟狀態(tài)

軟狀態(tài)是指系統(tǒng)服務(wù)可能處于中間狀態(tài),數(shù)據(jù)在保證一致性的過程中可能延遲同步,但不會(huì)影響系統(tǒng)的可用性。

比如我們?cè)谫徺I火車票付款結(jié)束之后,就可能處在一個(gè)既沒有完全成功,也沒有失敗的中間等待狀態(tài)。用戶需要等待系統(tǒng)的數(shù)據(jù)完全同步以后,才會(huì)得到是否購票成功的最終狀態(tài)。

BASE 理論認(rèn)識(shí)到,在分布式系統(tǒng)中,狀態(tài)可能會(huì)隨時(shí)間變化而軟化,而不是立即達(dá)到一致狀態(tài)。

這意味著我們需要容忍一些狀態(tài)的不確定性,比如我們?cè)诨疖嚻焙蜓a(bǔ)排隊(duì)時(shí)是不確定是否可以候補(bǔ)成功的。

5.3 最終一致性

最終一致性是 BASE 理論的核心思想。它指出,分布式系統(tǒng)可以在一段時(shí)間內(nèi)保持不一致狀態(tài),但最終會(huì)收斂到一致狀態(tài)。

它不像強(qiáng)一致性那樣,需要分區(qū)數(shù)據(jù)保證實(shí)時(shí)一致,導(dǎo)致系統(tǒng)數(shù)據(jù)的同步代價(jià)過高。也不像弱一致性那樣,數(shù)據(jù)更新后不保證數(shù)據(jù)一致,導(dǎo)致后續(xù)的請(qǐng)求只能訪問到老數(shù)據(jù)。

當(dāng)前業(yè)界的分布式系統(tǒng),甚至關(guān)系數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù),大都是用最終一致性實(shí)現(xiàn)的。比如 MySQL 的主從備份,就是在一段時(shí)間內(nèi)通過 binlog 日志和監(jiān)聽線程讓從庫和主庫的數(shù)據(jù)保持最終一致。

總的來說,BASE 理論其實(shí)就是犧牲了各節(jié)點(diǎn)數(shù)據(jù)的強(qiáng)一致性,允許不同節(jié)點(diǎn)的數(shù)據(jù)在一段時(shí)間內(nèi)不一致,來獲得更高的性能和高可用性。

在單體系統(tǒng)中,數(shù)據(jù)庫還能通過 ACID 來實(shí)現(xiàn)事務(wù)的強(qiáng)一致性,但分布式事務(wù)需要考慮節(jié)點(diǎn)通信的延遲和網(wǎng)絡(luò)故障。

所以,BASE 理論是我們?cè)趯?shí)際的分布式系統(tǒng)中經(jīng)常使用的方案。

責(zé)任編輯:武曉燕 來源: xin猿意碼
相關(guān)推薦

2024-03-25 14:31:45

2020-10-16 06:36:57

CapBase定理

2021-06-02 22:16:56

框架CAPBASE

2024-11-18 17:09:19

2022-03-06 23:14:56

緩存分布式系統(tǒng)

2021-03-11 07:27:15

CAPBASE分布式

2023-12-26 01:00:49

分布式事務(wù)TCC

2017-03-29 14:50:18

2019-11-21 10:25:28

分布式架構(gòu)系統(tǒng)

2019-04-19 09:39:58

Redis分布式集群

2011-07-04 10:39:57

Web

2021-03-16 08:54:35

AQSAbstractQueJava

2018-01-25 19:01:47

Zookeeper分布式數(shù)據(jù)

2018-05-30 09:27:15

大數(shù)據(jù)分布式計(jì)算

2021-08-11 07:54:47

Commonjs

2022-09-26 09:01:15

語言數(shù)據(jù)JavaScript

2017-07-02 18:04:53

塊加密算法AES算法

2019-01-07 15:29:07

HadoopYarn架構(gòu)調(diào)度器

2021-07-20 15:20:02

FlatBuffers阿里云Java

2012-05-21 10:06:26

FrameworkCocoa
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)