這是一道關(guān)于Seata的Java面試題
Seata在大廠也是屬于高頻的面試題,有一位3年工作經(jīng)驗(yàn)的小伙伴被問到一道這樣的面試題,說(shuō)“談?wù)勀銓?duì)Seata的理解”。那么,今天我給大家來(lái)聊一聊。
另外,我花了很長(zhǎng)時(shí)間,準(zhǔn)備了一份500頁(yè)的PDF面試資料文檔和一份10W字的Java總結(jié)面試題和答案,
1、Seata是什么
在微服務(wù)架構(gòu)下,由于數(shù)據(jù)庫(kù)和應(yīng)用服務(wù)的拆分,導(dǎo)致原本一個(gè)事務(wù)單元中的多個(gè) DML 操作,變成了跨進(jìn)程或者跨數(shù)據(jù)庫(kù)的多個(gè)事務(wù)單元的多個(gè) DML 操作,而傳統(tǒng)的數(shù)據(jù)庫(kù)事務(wù)無(wú)法解決這類的問題,所以就引出了分布式事務(wù)的概念。
ENTER TITLE
分布式事務(wù)本質(zhì)上要解決的就是跨網(wǎng)絡(luò)節(jié)點(diǎn)的多個(gè)事務(wù)的數(shù)據(jù)一致性問題,業(yè)內(nèi)常見的解決方法有兩種:
ENTER TITLE
1、強(qiáng)一致性
就是所有的事務(wù)參與者要么全部成功,要么全部失敗,全局事務(wù)協(xié)調(diào)者需要知道每個(gè)事務(wù)參與者的執(zhí)行狀態(tài),再根據(jù)狀態(tài)來(lái)決定數(shù)據(jù)的提交或者回滾!
2、最終一致性,也叫弱一致性
也就是多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的數(shù)據(jù)允許出現(xiàn)不一致的情況,但是在最終的某個(gè)時(shí)間點(diǎn)會(huì)達(dá)成數(shù)據(jù)一致。
基于 CAP 定理我們可以知道,強(qiáng)一致性方案對(duì)于應(yīng)用的性能和可用性會(huì)有影響,所以對(duì)于數(shù)據(jù)一致性要求不高的場(chǎng)景,就會(huì)采用最終一致性算法。
在分布式事務(wù)的實(shí)現(xiàn)上,對(duì)于強(qiáng)一致性,我們可以通過(guò)基于 XA 協(xié)議下的二階段提交來(lái)實(shí)現(xiàn),對(duì)于弱一致性,可以基于 TCC 事務(wù)模型、可靠性消息模型等方案來(lái)實(shí)現(xiàn)。市面上有很多針對(duì)這些理論模型實(shí)現(xiàn)的分布式事務(wù)框架,我們可以在應(yīng)用中集成這些框架來(lái)實(shí)現(xiàn)分布式事務(wù)。而 Seata 就是其中一種,它是阿里開源的分布式事務(wù)解決方案,提供了高性能且簡(jiǎn)單易用的分布式事務(wù)服務(wù)。
1、Seata事務(wù)模式
Seata 中封裝了四種分布式事務(wù)模式,分別是:AT模式、TCC 模式、Saga 模式和XA 模式。下面我給大家詳細(xì)介紹一下:
第1種:AT 模式,是一種基于本地事務(wù)+二階段協(xié)議來(lái)實(shí)現(xiàn)的最終數(shù)據(jù)一致性方案,也是Seata 默認(rèn)的解決方案
第2種:TCC 模式,TCC 事務(wù)是 Try、Confirm、Cancel 三個(gè)詞語(yǔ)的縮寫,簡(jiǎn)單理解就是把一個(gè)完整的業(yè)務(wù)邏輯拆分成三個(gè)階段,然后通過(guò)事務(wù)管理器在業(yè)務(wù)邏輯層面根據(jù)每個(gè)分支事務(wù)的執(zhí)行情況分別調(diào)用該業(yè)務(wù)的 Confirm 或者 Cacel 方法。
第3種:Saga 模式,Saga 模式是 SEATA 提供的長(zhǎng)事務(wù)解決方案,在 Saga 模式中,業(yè)務(wù)流程中每個(gè)參與者都提交本地事務(wù),當(dāng)出現(xiàn)某一個(gè)參與者失敗則補(bǔ)償前面已經(jīng)成功的參與者。
第4種:XA 模式,XA 可以認(rèn)為是一種強(qiáng)一致性的事務(wù)解決方法,它利用事務(wù)資源(數(shù)據(jù)庫(kù)、消息服務(wù)等)對(duì) XA 協(xié)議的支持,以 XA 協(xié)議的機(jī)制來(lái)管理分支事務(wù)的一種事務(wù)模式。
從這四種模型中不難看出,在不同的業(yè)務(wù)場(chǎng)景中,我們可以使用 Seata 的不同事務(wù)模型來(lái)解決不同業(yè)務(wù)場(chǎng)景中的分布式事務(wù)問題,因此我們可以認(rèn)為 Seata是一個(gè)一站式的分布式事務(wù)解決方案。
以上就是我對(duì)Seata的理解!面試的時(shí)候經(jīng)常會(huì)遇到這種寬泛的面試題,一般就是問“談?wù)勀銓?duì)XX的理解”。遇到這類面試題,先不用慌,我告訴大家一個(gè)回答的思路。可以按照技術(shù)發(fā)展的邏輯,就是先在自己的大腦中的建立一個(gè)知識(shí)索引,然后基于索引來(lái)定位你的知識(shí)。
比如,對(duì)于這類問題,一般可以建立一個(gè)這樣的思維邏輯:
它是什么?
它能解決什么問題?
它有哪些特點(diǎn)和優(yōu)勢(shì)?
它的核心原理是什么?
為什么它能解決這類問題?
大家對(duì)照這個(gè)邏輯去回答這類面試題,是不是感覺思路異常更清晰呢?
最后,我把之前分享的資料全部整理成了文字,希望能夠以此來(lái)提高各位粉絲的通過(guò)率。? ?