www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 架構(gòu)師社區(qū)
[導(dǎo)讀]絮絮叨叨 還記得剛?cè)胄虚_始寫Java時,接觸的第一個項目是國家電網(wǎng)的一個業(yè)務(wù)系統(tǒng),這個系統(tǒng)據(jù)說投資了5億人民幣進行研發(fā),鼎盛時期研發(fā)人員一度達到過500人。項目采用當時最流行的ssh(Struts+Spring+Hibernate)框架,典型的三層架構(gòu)(controller - > servic


絮絮叨叨

還記得剛?cè)胄虚_始寫Java時,接觸的第一個項目是國家電網(wǎng)的一個業(yè)務(wù)系統(tǒng),這個系統(tǒng)據(jù)說投資了5億人民幣進行研發(fā),鼎盛時期研發(fā)人員一度達到過500人。項目采用當時最流行的ssh(Struts+Spring+Hibernate)框架,典型的三層架構(gòu)(controller - > service -> dao)簡單又粗暴,所有人寫的代碼都放在一個大工程里,項目文件大小達到幾百M,解決代碼沖突是當時最大的工作量。

然而戲劇性的是,交測當天五人同時上線,項目崩 崩 崩潰了。。。哎!你永遠想象不到甲方憤怒的樣子,項目組每個人的祖宗都被問候到了。

面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛?。? >
    <figcaption style=
說了一些沒用的,腦子里總想起這個事,不說不痛快,大家姑且就當笑話聽吧,下邊我們進入正題

背景

前兩天有個學(xué)弟公眾號留言,說讓講講分布式事務(wù),面試就掛在這個問題上。時下隨著微服務(wù)架構(gòu)體系的流行,面試的題目也都慢慢開始升級,不再是早些年單純的問點SSH框架知識、數(shù)據(jù)結(jié)構(gòu)了。高并發(fā)、高可用、分布式服務(wù)治理、分布式文件系統(tǒng)、分布式xxx,反正和分布式沾邊的都會問點, 項目實際用不用不要緊,關(guān)鍵你得了解,是不是總有一種學(xué)不動了的感覺?

什么是分布式事務(wù)?

我們看看百度上對于分布式事務(wù)的定義:分布式事務(wù)是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點之上。

面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛?。? >
    <figcaption style=

額~ 看了反而更懵逼了,簡單的畫個圖好讓大家理解一下,拿下單減庫存來說舉例:當系統(tǒng)的業(yè)務(wù)量很小時,“一站式”的系統(tǒng)完全可以滿足現(xiàn)有業(yè)務(wù)需求,所有的業(yè)務(wù)都共用一個數(shù)據(jù)庫,整個下單流程或許只用在一個方法里同一個事務(wù)下操作數(shù)據(jù)庫即可。

此時所有操作都在一個事務(wù)里,要么全部提交,要么全部回滾 。

面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛病!
圖糙理不糙

但隨著業(yè)務(wù)量不斷增長,“一站式”系統(tǒng)漸漸扛不住巨大的流量,就需要對數(shù)據(jù)庫進行分庫分表,將業(yè)務(wù)服務(wù)化拆分(SOA),就會分離出了訂單中心、用戶中心、庫存中心。而這樣就造成業(yè)務(wù)間相互隔離,每個業(yè)務(wù)都維護著自己的數(shù)據(jù)庫,數(shù)據(jù)的交換只能進行RPC調(diào)用。

用戶再下單時,創(chuàng)建訂單和扣減庫存,需要同時對訂單DB和庫存DB進行操作。兩步操作必須同時成功,否則就會造成業(yè)務(wù)混亂,可此時我們只能保證自己服務(wù)的數(shù)據(jù)一致性,無法保證調(diào)用其他服務(wù)的操作是否成功,所以為了保證整個下單流程的數(shù)據(jù)一致性,就需要分布式事務(wù)介入。

面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛??!
圖糙理不糙

在說分布式事務(wù)之前,先回憶一下事務(wù)的基本概念:事務(wù)是一個程序執(zhí)行單元,里面的所有操作要么全部執(zhí)行成功,要么全部執(zhí)行失敗。

一個事務(wù)有四個基本特性,也就是我們常說的(ACID)。

Atomicity(原子性) :事務(wù)是一個不可分割的整體,事務(wù)內(nèi)所有操作要么全做成功,要么全失敗。

Consistency(一致性) :務(wù)執(zhí)行前后,數(shù)據(jù)從一個狀態(tài)到另一個狀態(tài)必須是一致的(A向B轉(zhuǎn)賬,不能出現(xiàn)A扣了錢,B卻沒收到)。

Isolation(隔離性):多個并發(fā)事務(wù)之間相互隔離,不能互相干擾。

Durablity(持久性) :事務(wù)完成后,對數(shù)據(jù)庫的更改是永久保存的,不能回滾。

上面這些知識點都是反反復(fù)復(fù)念叨的概念,面試必背的東西。

分布式事務(wù)解決方案

有困難就一定會有解決問題的辦法,什么都難不倒聰明的程序員。

XA協(xié)議是一個基于數(shù)據(jù)庫的分布式事務(wù)協(xié)議,其分為兩部分:事務(wù)管理器本地資源管理器。事務(wù)管理器作為一個全局的調(diào)度者,負責(zé)對各個本地資源管理器統(tǒng)一號令提交或者回滾。二階提交協(xié)議(2PC)和三階提交協(xié)議(3PC)就是根據(jù)此協(xié)議衍生出來而來。如今Oracle、Mysql等數(shù)據(jù)庫均已實現(xiàn)了XA接口

1、兩段提交(2PC)

兩段提交顧名思義就是要進行兩個階段的提交:第一階段,準備階段(投票階段) ;第二階段,提交階段(執(zhí)行階段)。

面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛病!
上邊圖片源自網(wǎng)絡(luò),如有侵權(quán)聯(lián)系刪除


下面還拿下單扣庫存舉例子,簡單描述一下兩段提交(2PC)的原理:

之前說過業(yè)務(wù)服務(wù)化(SOA)以后,一個下單流程就會用到多個服務(wù),各個服務(wù)都無法保證調(diào)用的其他服務(wù)的成功與否,這個時候就需要一個全局的角色(協(xié)調(diào)者)對各個服務(wù)(參與者)進行協(xié)調(diào)。


面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛??!
一個下單請求過來通過 協(xié)調(diào)者 ,給每一個 參與者 發(fā)送 Prepare 消息,執(zhí)行本地數(shù)據(jù)腳本但不提交事務(wù)。

如果協(xié)調(diào)者收到了參與者的失敗消息或者超時,直接給每個參與者發(fā)送回滾(Rollback)消息;否則,發(fā)送提交(Commit)消息;參與者根據(jù)協(xié)調(diào)者的指令執(zhí)行提交或者回滾操作,釋放所有事務(wù)處理過程中被占用的資源,顯然2PC做到了所有操作要么全部成功、要么全部失敗。

兩段提交(2PC)的缺點

二階段提交看似能夠提供原子性的操作,但它存在著嚴重的缺陷

  • 網(wǎng)絡(luò)抖動導(dǎo)致的數(shù)據(jù)不一致: 第二階段中協(xié)調(diào)者參與者發(fā)送commit命令之后,一旦此時發(fā)生網(wǎng)絡(luò)抖動,導(dǎo)致一部分參與者接收到了commit請求并執(zhí)行,可其他未接到commit請求的參與者無法執(zhí)行事務(wù)提交。進而導(dǎo)致整個分布式系統(tǒng)出現(xiàn)了數(shù)據(jù)不一致。

  • 超時導(dǎo)致的同步阻塞問題: 2PC中的所有的參與者節(jié)點都為事務(wù)阻塞型,當某一個參與者節(jié)點出現(xiàn)通信超時,其余參與者都會被動阻塞占用資源不能釋放。

  • 單點故障的風(fēng)險: 由于嚴重的依賴協(xié)調(diào)者,一旦協(xié)調(diào)者發(fā)生故障,而此時參與者還都處于鎖定資源的狀態(tài),無法完成事務(wù)commit操作。雖然協(xié)調(diào)者出現(xiàn)故障后,會重新選舉一個協(xié)調(diào)者,可無法解決因前一個協(xié)調(diào)者宕機導(dǎo)致的參與者處于阻塞狀態(tài)的問題。

2、三段提交(3PC)

三段提交(3PC)是對兩段提交(2PC)的一種升級優(yōu)化,3PC2PC的第一階段和第二階段中插入一個準備階段。保證了在最后提交階段之前,各參與者節(jié)點的狀態(tài)都一致。同時在協(xié)調(diào)者和參與者中都引入超時機制,當參與者各種原因未收到協(xié)調(diào)者的commit請求后,會對本地事務(wù)進行commit,不會一直阻塞等待,解決了2PC的單點故障問題,但3PC 還是沒能從根本上解決數(shù)據(jù)一致性的問題。

面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛?。? >
    <figcaption style= 上邊圖片源自網(wǎng)絡(luò),如有侵權(quán)聯(lián)系刪除

3PC 的三個階段分別是CanCommit、PreCommit、DoCommit

CanCommit:協(xié)調(diào)者向所有參與者發(fā)送CanCommit命令,詢問是否可以執(zhí)行事務(wù)提交操作。如果全部響應(yīng)YES則進入下一個階段。

PreCommit協(xié)調(diào)者向所有參與者發(fā)送PreCommit命令,詢問是否可以進行事務(wù)的預(yù)提交操作,參與者接收到PreCommit請求后,如參與者成功的執(zhí)行了事務(wù)操作,則返回Yes響應(yīng),進入最終commit階段。一旦參與者中有向協(xié)調(diào)者發(fā)送了No響應(yīng),或因網(wǎng)絡(luò)造成超時,協(xié)調(diào)者沒有接到參與者的響應(yīng),協(xié)調(diào)者向所有參與者發(fā)送abort請求,參與者接受abort命令執(zhí)行事務(wù)的中斷。

DoCommit:在前兩個階段中所有參與者的響應(yīng)反饋均是YES后,協(xié)調(diào)者向參與者發(fā)送DoCommit命令正式提交事務(wù),如協(xié)調(diào)者沒有接收到參與者發(fā)送的ACK響應(yīng),會向所有參與者發(fā)送abort請求命令,執(zhí)行事務(wù)的中斷。

3、補償事務(wù)(TCC)

很多初學(xué)者總是被TCC、2PC、3PC這幾個概念搞混淆,傻傻分不清,實際上 TCC與 2PC、3PC一樣,都只是實現(xiàn)分布式事務(wù)的一種方案而已。

TCC(Try-Confirm-Cancel)又被稱補償事務(wù),TCC2PC的思想很相似,事務(wù)處理流程也很相似,但2PC 是應(yīng)用于在DB層面,TCC則可以理解為在應(yīng)用層面的2PC,是需要我們編寫業(yè)務(wù)邏輯來實現(xiàn)。

TCC它的核心思想是:"針對每個操作都要注冊一個與其對應(yīng)的確認(Try)和補償(Cancel)"。

還拿下單扣庫存解釋下它的三個操作:

Try階段:

下單時通過Try操作去扣除庫存預(yù)留資源。

Confirm階段:

確認執(zhí)行業(yè)務(wù)操作,在只預(yù)留的資源基礎(chǔ)上,發(fā)起購買請求。

Cancel階段:

只要涉及到的相關(guān)業(yè)務(wù)中,有一個業(yè)務(wù)方預(yù)留資源未成功,則取消所有業(yè)務(wù)資源的預(yù)留請求。

面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛??!
上邊圖片源自網(wǎng)絡(luò),如有侵權(quán)聯(lián)系刪除

TCC的缺點:

  • 應(yīng)用侵入性強:TCC由于基于在業(yè)務(wù)層面,至使每個操作都需要有 try、confirm、cancel三個接口。

  • 開發(fā)難度大:代碼開發(fā)量很大,要保證數(shù)據(jù)一致性 confirm 和 cancel 接口還必須實現(xiàn)冪等性。

總結(jié)

很淺顯的介紹了一下2PC、3PC、TCC的概念,如有錯誤還望溫柔指正,分布式事務(wù)一直都是面試中比較熱點的問題,也是進階高級Java工程師必備的知識點。

面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛??!

長按訂閱更多精彩▼

面試被問分布式事務(wù)(2PC、3PC、TCC),這樣解釋沒毛?。? ></p><p style=如有收獲,點個在看,誠摯感謝


免責(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ā)展的當下,工業(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)閉