日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 架構(gòu)師社區(qū)
[導(dǎo)讀]本文用倚天屠龍記中的太極拳來聊下三大理論:CAP理論、ACID理論、BASE理論。

倚天屠龍記中趙敏郡主攜帶一幫高手圍攻武當(dāng),武當(dāng)派掌門張三豐被暗算,傳了一套武功給張無忌用來對付趙敏的手下。這套武功就是太極拳。

張三豐:無忌,我教你的還記得多少?

張無忌:我全忘了!

張三豐:很好,你只要記住把玄冥二老打趴下就可以了。

用太極拳講分布式理論,真舒服!

上篇三國殺講分布式中的拜占庭將軍問題,還挺有意思的,這次我們用倚天屠龍記中的太極拳來聊下剩下的三大理論

  • CAP 理論
  • ACID 理論
  • BASE 理論

太極拳的精髓:以柔克剛,剛?cè)岵⑦M,四兩撥千斤,無招勝有招。

我把 CAP 理論稱作太極,ACID 理論稱為陽或剛,BASE 理論稱為陰或柔。ACID 理論追求一致性,BASE 理論本來就叫做柔性事務(wù),追求的是可用性。那張無忌為什么會全忘了還打敗了玄冥二老呢?因為太極拳的精髓是拳意,無招勝有招。

1、太極的兩面

CAP 理論是對分布式系統(tǒng)的特性做了一個高度的抽象,變成了三大指標:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分區(qū)容錯性(Partition Tolerance)

分布式中的一致性,我們可以理解為客戶端的每次讀操作,不管訪問的是哪個幾點,要么讀到的都是同一份最新寫入的數(shù)據(jù),要么讀取失敗。這就很剛了,不能說這種剛不好,在很多場景中,也確實需要保證高度的一致性。

為了幫助大家理解一致性,我舉個倚天屠龍記的故事:六大派圍攻光明頂。用太極拳講分布式理論,真舒服!峨眉派滅絕師太作為統(tǒng)領(lǐng),帶領(lǐng)江湖六大派圍攻光明頂,最開始的進攻策略是從北邊進攻。滅絕師太發(fā)現(xiàn)從北邊進攻不妙,于是飛鴿傳書給武當(dāng)派和少林派南邊進攻的命令,但是少林派的飛鴿被明教輕功絕頂?shù)那嘁眚鹜蹴f一笑截獲了,最后的結(jié)果是少林派北邊進攻,???武當(dāng)派南邊進攻,這不就亂套了嗎?如下圖所示:

用太極拳講分布式理論,真舒服!攻光明

1.1 理解分布式中的 CAP

CAP 放到分布式系統(tǒng)中該如何理解呢?下面舉個例子幫助大家理解。

  • 初始環(huán)境:客戶端查詢或更新節(jié)點 1 和 節(jié)點 2,兩個節(jié)點存的值 A = 1。
用太極拳講分布式理論,真舒服! 初始環(huán)境
  • 客戶端更新節(jié)點 1 中 A 的值,設(shè)置 A = 5。
用太極拳講分布式理論,真舒服! 客戶端更新節(jié)點 1
  • 節(jié)點 1 將 A 的值更新為 5 后,返回更新成功給客戶端。

    用太極拳講分布式理論,真舒服! 節(jié)點 1 返回更新成功
  • 客戶端訪問到了節(jié)點 2 ,請求獲取 A 的值,結(jié)果返回 A = 1。這和節(jié)點 1 中存儲的 A 的值就不一致了。

用太極拳講分布式理論,真舒服! 客戶端訪問到節(jié)點 2
  • 那么怎么保證兩個節(jié)點中的值都是 A = 5 呢?客戶端將節(jié)點 1 更新后,節(jié)點 2 也需要更新,才能告訴客戶端更新成功了。
用太極拳講分布式理論,真舒服! 節(jié)點 2 也需要更新
  • 兩個節(jié)點都更新成功后,客戶端訪問其中任意一個節(jié)點獲取到的都是 A = 5。這個就叫做一致性。
用太極拳講分布式理論,真舒服! 兩個節(jié)點都更新后

一致性強調(diào)的是數(shù)據(jù)正確,每次讀取節(jié)點中的數(shù)據(jù)都是最新寫入的數(shù)據(jù)。這個我稱作剛。

但是我們生產(chǎn)的集群環(huán)境下如果發(fā)生分區(qū)故障時(節(jié)點失聯(lián),節(jié)點無法響應(yīng),節(jié)點無法寫入數(shù)據(jù)),客戶端查詢節(jié)點時,我們不能返回錯誤信息給客戶端。比如說業(yè)務(wù)集群中的一些關(guān)鍵系統(tǒng),如注冊中心,不能因為某個節(jié)點失聯(lián)了,就不響應(yīng)最新的數(shù)據(jù)。那么相關(guān)的業(yè)務(wù)也獲取不到正確的注冊信息而導(dǎo)致系統(tǒng)癱瘓。

可用性就派上用場了,犧牲數(shù)據(jù)準確性,每個節(jié)點使用本地數(shù)據(jù)來響應(yīng)客戶端的請求。另外當(dāng)節(jié)點不可用時,可以使用快速失敗策略,至少不能讓服務(wù)長時間不能響應(yīng)??捎眯詮娬{(diào)的是服務(wù)可用,不保證數(shù)據(jù)正確。這個我稱作柔。

如下圖所示:節(jié)點 1 和節(jié)點 2 返回給客戶端的值分別是 A = 5 和 A = 1,也就是節(jié)點 1 和 節(jié)點 2 并沒有保證數(shù)據(jù)一致性,而是考慮了節(jié)點的可用性。

用太極拳講分布式理論,真舒服! 數(shù)據(jù)不一致

分區(qū)容錯性的含義就是節(jié)點間出現(xiàn)任意數(shù)量的消息丟失或高延遲的時候,系統(tǒng)仍然在繼續(xù)工作。分布式系統(tǒng)告訴客戶端,我的內(nèi)部不論出現(xiàn)什么樣的數(shù)據(jù)同步問題,我會一直運行。強調(diào)的是集群堆分區(qū)故障的容錯能力。

1.2 CAP 三角

那么這三個指標又有什么關(guān)系呢?這個就是我們經(jīng)常聽到的 CAP理論。C代表一致性(Consistency),A代表可用性(Availability)、P代表分區(qū)容錯性(Partition Tolerance)。

對于分布式系統(tǒng),CAP 三個指標只能選擇其中兩個。

  • CA:保證一致性和可用性。當(dāng)分布式系統(tǒng)正常運行時(大部分時候所處的狀態(tài)),這個時候不需要 P,那么 C 和 A 能夠同時保證。只有在發(fā)生分區(qū)故障時,才需要 P,這個時候就只能在 C 和 A 之間做出選擇。典型應(yīng)用:單機版部署的 MySQL。

  • CP:保證數(shù)據(jù)的一致性和分區(qū)容錯性,比如配置信息,必須保證每個節(jié)點存的都是最新的,正確的數(shù)據(jù)。比如 Raft 的強一致性系統(tǒng),會導(dǎo)致無法執(zhí)行讀操作和寫操作。典型應(yīng)用:Etcd、Consul、Hbase。

  • AP:保證分布式系統(tǒng)的可用性和分區(qū)容錯性。用戶訪問系統(tǒng),都能得到相應(yīng)數(shù)據(jù),不會出現(xiàn)響應(yīng)錯誤,但是可能會讀到舊的數(shù)據(jù)。典型應(yīng)用:Cassandra 和 DynamoDB。

2、太極的剛

2.1 ACID 的剛

最開始知道 ACID 是研究 SQL 數(shù)據(jù)庫的時候,原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

這四個屬性是針對事務(wù)而言的,而事務(wù)就是為單個工作單元而執(zhí)行的一系列操作。如查詢、修改數(shù)據(jù)、修改數(shù)據(jù)定義。

事務(wù)不僅僅只用在數(shù)據(jù)庫上,還可以用在業(yè)務(wù)系統(tǒng)中,比如發(fā)券后扣減庫存,這種業(yè)務(wù)場景可以定義為一個事務(wù)。單機場景我們可以通過加鎖、時間序列等機制來保證單個節(jié)點上的 ACID 特性,但無法保證節(jié)點間操作的 ACID 特性。

那么分布式系統(tǒng)下該如何解決事務(wù)問題呢?這也是面試中經(jīng)常遇到的題。分布式事務(wù)協(xié)議大家一定聽過,比如二階段提交協(xié)議和 TCC 協(xié)議,下面我還是用六大派圍攻光明頂故事來講解二階段協(xié)議。

2.2 圍攻光明頂

峨眉派想?yún)R集少林派、武當(dāng)派、昆侖派明天一起進攻光明頂。如果有一方不同意進攻,或者進攻時機不一致,則需要取消整個行動計劃。少林派、武當(dāng)派、昆侖派進攻光明頂這一組行動可以看成是一個分布式事務(wù),要么全部執(zhí)行、要么全部不執(zhí)行。如下圖所示:

用太極拳講分布式理論,真舒服!

那如何幫助滅絕師太解決這個協(xié)同問題?我們可以用二階段提交協(xié)議來說明。

2.3 二階段提交協(xié)議

在二階段提交協(xié)議中,滅絕師太先給少林派發(fā)送進攻的消息,少林派作為協(xié)調(diào)者的身份,由少林派聯(lián)系武當(dāng)派和昆侖派是進攻還是撤退。

二階段就是說有兩個階段,1.提交請求階段(投票階段),2.提交執(zhí)行階段(完成階段)。

階段一:提交請求階段:

  • 第一步:少林派作為協(xié)調(diào)者分別給武當(dāng)派和昆侖派發(fā)送消息: “明天進攻光明頂,可行?”
  • 第二步:少林派、武當(dāng)派、昆侖派分別評估明天是否能進攻光明頂,如果能,就預(yù)留時間并鎖定,不再安排其他的進攻事項。
  • 第三步:少林派得到全部的回復(fù)結(jié)果,包括少林派自己的評估結(jié)果。最后三方的結(jié)果都是 可行。

如下圖所示:

用太極拳講分布式理論,真舒服! 階段一

階段二:提交執(zhí)行階段:

  • 第一步:少林派統(tǒng)計自己、昆侖派和武當(dāng)派的消息,都是 可以進攻,所以可以執(zhí)行分布式事務(wù),進攻光明頂。
  • 第二步:少林派通知昆侖派和武當(dāng)派進攻光明頂。
  • 第三步:少林派、昆侖派、武當(dāng)派召集手下弟子,進攻光明頂(執(zhí)行事務(wù))。
  • 第四步:昆侖派、武當(dāng)派將 是否已發(fā)起進攻告訴少林派。
  • 第五步:少林派匯總自己、昆侖派、武當(dāng)派的進攻結(jié)果給滅絕師太。這樣滅絕師太看到的就是統(tǒng)一的作戰(zhàn)計劃。
用太極拳講分布式理論,真舒服! 階段二

注意:

  • 可以將滅絕師太當(dāng)做客戶端。少林派、武當(dāng)派、昆侖派當(dāng)做分布式系統(tǒng)的三個節(jié)點。少林派作為協(xié)調(diào)者。
  • 將評估是否能進攻光明頂以及預(yù)留時間可以理解為需要操作的對象和對象狀態(tài),是否已經(jīng)準備好了,能否提交新的操作。
  • 發(fā)送消息、飛鴿傳書可以理解為網(wǎng)絡(luò)消息。
  • 第一個階段中,每個參與者投票表決事務(wù)是放棄還是提交,一旦投票要求提交事務(wù),那么就不允許放棄事務(wù)。
  • 第二個階段中,每個參與者執(zhí)行最終統(tǒng)一的決定,提交事務(wù)或者放棄事務(wù)。這個就是 ACID 的原子性。
  • 第一個階段中,需要預(yù)留資源,預(yù)留期間,其他人不能操作這個資源。

2.4 二階段協(xié)議帶來的問題

ACID 特性是 CAP 中一致性的邊界,可以稱作最強的一致性,如果分布式系統(tǒng)中實現(xiàn)了一致性,必然會影響到可用性。如果一個節(jié)點失敗,這個分布式事務(wù)的執(zhí)行都是失敗的。

絕大數(shù)場景中,對一致性要求沒那么高,并不需要保證強一致性,短暫的不一致也能接收,最后能保證數(shù)據(jù)是正確的就OK。也就是說我們可以用最終一致性方案來保證數(shù)據(jù)的一致性。

另外要提到的就是 TCC協(xié)議(三階段提交協(xié)議),他是針對二階段提交中的:協(xié)調(diào)者故障,參與者長期鎖定資源的痛點而出的協(xié)議。引入了詢問階段和超時機制,減少資源被長時間鎖定。但是需要更多的消息進行協(xié)商,增加了系統(tǒng)負載和響應(yīng)延遲,所以三階段提交協(xié)議很少被使用。

3、太極的柔

3.1 BASE 的柔

講了太極的剛,下面來講太極的柔。談到分布式事務(wù)的柔,一定會提到 BASE理論,俗稱柔性事務(wù)。BASE 理論是 CAP 理論中 AP 的擴展。大部分互聯(lián)網(wǎng)分布式系統(tǒng)都強調(diào)可用性,都會考慮引入 BASE 支持。這個理論非常非常重要,我要告訴你的是,掌握了這個理論,設(shè)計出符合自己業(yè)務(wù)的分布式架構(gòu)也會變得容易很多,而不是摸不著頭腦。

BASE 的核心:基本可用 BA(Basically Available)、軟狀態(tài) S(Soft state)、最終一致性 E(Eventually consistent)。

那為什么叫它柔性事務(wù)?其實它和 ACID 是相對的,不需要保證強一致性,比如一根橡皮筋被拉彎了,你放開橡皮筋后,它就會自行恢復(fù),這個就是橡皮筋柔性的一面。

3.2 BASE 和太極拳有什么關(guān)系

太極拳每一招都不是直直的打出去的,每一招都講求圓滑、畫弧線,看起來軟綿綿的,其實是柔中帶剛。每一招的最后一下都是非常剛硬的抖動一下(這效果我用文字實在描述不出來,大家去看電視吧)。這最后一下就可以看成是剛的一面,也就是最終一致性。用太極拳講分布式理論,真舒服!

3.3 基本可用

怎么理解基本可用?重點是在這個基本,這個理論并沒有告訴我們怎么定義基本,這是一個模糊的概念。其實就是要柔到什么程度。

在分布式系統(tǒng)中,我們可以把基本可用理解為保證核心功能可用,允許損失部分功能的可用性。基本可用可以用四種方案來實現(xiàn)。

  • 流量削峰:比如多個秒殺場次,某東的 8 點秒殺場,12 點的秒殺場。
  • 延遲響應(yīng):比如雙 11 期間某商城創(chuàng)建的訂單,會提示客戶訂單正在創(chuàng)建中,可能需要等個十幾秒。
  • 體驗降級:比如某次比賽活動,有大量用戶進活動頁查看圖片,這個時候,大量圖片因為網(wǎng)絡(luò)超時而無法顯示,這個時候就可以考慮替換原有圖片,返回清晰度沒有那么高或圖片比較小的圖片。
  • 過載保護:比如我們常用的消息隊列占滿了,可以考慮丟棄后來的請求,或清除隊列中的一些請求,保護系統(tǒng)不過載,但這都需要結(jié)合自身的業(yè)務(wù)場景來設(shè)計。

3.4 最終一致性

最終一致性:系統(tǒng)中的所有的數(shù)據(jù)副本在經(jīng)過一段時間的同步后,最終能夠達到一個一致的狀態(tài)。最終可以理解為一個短暫的延遲。

最終一致性在非常多的互聯(lián)網(wǎng)業(yè)務(wù)中采用。但是跟錢打交道或金融系統(tǒng)會采用強一致性或事務(wù)。

前面提到了 ACID 的強一致性,而最終一致性和它是什么關(guān)系?

強一致性其實也是最終一致性的一種。那最終一致性怎么理解?強一致性可以看作不存在延遲的一致性。如果無法容忍延遲就用強一致性,否則就用最終一致性。

3.5 最終一致性和太極拳有什么關(guān)系

太極拳最神奇的一個地方就是卸力,當(dāng)對方使出全力攻擊你的時候,用太極的招式將對方使出的力量卸下來,使對方的攻擊無效。卸力可以和我們之前講到的流量削峰對應(yīng)。另外卸完力之后,就是我們發(fā)動攻擊的時候。

用太極拳講分布式理論,真舒服!

4、無招勝有招

回到文章的開頭,張三豐教給張無忌的太極拳,張無忌全忘了,還怎么能打敗玄冥二老的呢?

因為太極拳重視的是拳意,而不是招式。所以張無忌領(lǐng)會了拳意,無招勝有招。

我們設(shè)計分布式系統(tǒng)的時候,也不要死記硬背三大理論,要真正懂得原理,然后才能一點一點迭代出最適合當(dāng)前業(yè)務(wù)系統(tǒng)的分布式架構(gòu)。

5、總結(jié)

  • 太極拳分為陰和陽兩方面,就如 CAP 中的 C 和 A。
  • CAP 理論是分布式中基礎(chǔ)理論,有三個重要指標:一致性、可用性、分區(qū)容錯性。
  • ACID 是傳統(tǒng)數(shù)據(jù)庫的設(shè)計理念,追求強一致性。四個指標:原子性、一致性、隔離性、持久性。是 CAP 中 CP 的延伸。
  • BASE 理論是 CAP 中一致性和可用性權(quán)衡的結(jié)果。是 CAP 中的 AP 的延伸。注重可用性和性能優(yōu)先,根據(jù)業(yè)務(wù)的場景特點,實現(xiàn)彈性的基本可用,然后實現(xiàn)數(shù)據(jù)的最終一致性。
  • BASE 理論在很大程度上,解決了事務(wù)性系統(tǒng)在性能、容錯、可用性等方面的通病。
  • BASE 理論在 NoSQL 中應(yīng)用廣泛,是 NoSQL 系統(tǒng)設(shè)計的事實上的理論支撐。

文中也通過六大派圍攻光明頂?shù)陌咐o大家講解了二階段提交的核心原理,相信大家一定能看懂。

本篇文章構(gòu)思 2 周,終于出爐了,悟空不要臉地求個再看和轉(zhuǎn)發(fā)~

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉