5.1.分布式事務(wù)(基于DTC的分布式事務(wù))
以往包括目前很多項(xiàng)目還是傾向于使用DTC來(lái)處理分布式事務(wù),這個(gè)方案多數(shù)適用于一般的企業(yè)應(yīng)用,業(yè)務(wù)、訪問(wèn)量、數(shù)據(jù)量要求都不是很高的情況下。用DTC很方便,事務(wù)的自動(dòng)傳播、事務(wù)的自動(dòng)感知、事務(wù)的自動(dòng)回滾和提交,這都是中央DTC幫我們管理好了。
由于有中央DTC的統(tǒng)一協(xié)調(diào),看似好像幫我們解決了很多我們需要考慮的問(wèn)題,但是它也是整個(gè)平臺(tái)的致命的瓶頸,一旦DTC由于某個(gè)問(wèn)題出現(xiàn)錯(cuò)誤,而且這種錯(cuò)誤都是系統(tǒng)層面的錯(cuò)誤,很多問(wèn)題我們是無(wú)能為力的。如果出現(xiàn)問(wèn)題,整個(gè)應(yīng)用平臺(tái)都無(wú)法完成任何一個(gè)跨服務(wù)的業(yè)務(wù)流程,這其實(shí)很危險(xiǎn),你不無(wú)法控制系統(tǒng)的穩(wěn)定性。
這里總結(jié),DTC用于一般的小型企業(yè)應(yīng)用,不建議用在中等規(guī)模的企業(yè)應(yīng)用中,不是說(shuō)這個(gè)東西不好,而是無(wú)法控制它。
5.2.事務(wù)補(bǔ)償(提供正向或反向的操作來(lái)讓數(shù)據(jù)在業(yè)務(wù)上是一致的)
世界級(jí)SOA專家所編寫(xiě)的書(shū)籍里都提到了使用“補(bǔ)償”操作來(lái)完成數(shù)據(jù)的不一致性,當(dāng)我們編寫(xiě)了一個(gè)服務(wù)方法A,就需要一個(gè)服務(wù)方法A1的補(bǔ)償接口來(lái)完成A服務(wù)的補(bǔ)償操作。但是真實(shí)的業(yè)務(wù)情況下很難實(shí)施這種看起來(lái)好像很優(yōu)美很柔性的設(shè)計(jì)。沒(méi)有實(shí)踐就沒(méi)有發(fā)言權(quán),我們公司的技術(shù)團(tuán)隊(duì)就實(shí)施過(guò)這種方案,但是很不理想,這跟技術(shù)本身及技術(shù)團(tuán)隊(duì)沒(méi)關(guān)系,只是我們的平臺(tái)業(yè)務(wù)太復(fù)雜,很難去“補(bǔ)償”一個(gè)已經(jīng)做過(guò)的操作。
這當(dāng)然也要看你所面對(duì)的項(xiàng)目情況,量變引起質(zhì)變,如果你的各種量都上去了,這個(gè)“補(bǔ)償”方案不實(shí)際,而且很難在數(shù)據(jù)層面進(jìn)行“補(bǔ)償“。總之,這不是一個(gè)中長(zhǎng)期的方案。
5.3.異步EDA(基于異步事件流來(lái)實(shí)現(xiàn)柔性的分布式事務(wù))
EDA簡(jiǎn)稱”事件驅(qū)動(dòng)架構(gòu)“。多個(gè)系統(tǒng)之間通過(guò)傳播”事件“來(lái)驅(qū)動(dòng)整個(gè)業(yè)務(wù)的運(yùn)轉(zhuǎn)。系統(tǒng)之間沒(méi)有緊耦合的同步調(diào)用的操作,都是通過(guò)發(fā)出異步的“事件”來(lái)通知下一個(gè)業(yè)務(wù)環(huán)節(jié)。
可能你會(huì)有一個(gè)疑問(wèn),異步操作,是不是系統(tǒng)之間延遲會(huì)很長(zhǎng),其實(shí)不是,現(xiàn)在有很多成熟的消息中間件在內(nèi)網(wǎng)內(nèi)幾乎是毫秒級(jí)別的延遲,至于跨機(jī)房就看物理上的距離了。
異步操作有很多好處,這里我就不浪費(fèi)大家時(shí)間重復(fù)那些好處。使用EDA實(shí)現(xiàn)系統(tǒng)之間的一個(gè)松散的事務(wù)關(guān)系,要把控好項(xiàng)目的質(zhì)量,對(duì)系統(tǒng)的非功能需求、BUG數(shù)等等可能會(huì)影響業(yè)務(wù)操作中斷的地方都要建立起適當(dāng)?shù)臋C(jī)制,讓這些問(wèn)題盡早的在線下解決。比如可以實(shí)施UnitTest、持續(xù)集成等一些敏捷的方法論。
6.總結(jié)
同樣一個(gè)工具在于什么人用,真正的工匠都是使用很樸實(shí)的工具來(lái)雕刻無(wú)法超越的藝術(shù)品,這就是工匠情懷。最近對(duì)工匠情懷感受越來(lái)越深,一直以為自己是一個(gè)比較喜歡專的人,這是不是偏離了一個(gè)大的方向沖進(jìn)了一個(gè)小胡同,直到最近我才領(lǐng)悟,這其實(shí)是”軟件工匠“的精神。但是這不代表不考慮全局,這只是一種情懷,一種態(tài)度,對(duì)于架構(gòu)也是,對(duì)于代碼也是,不要認(rèn)為那些看似無(wú)關(guān)緊要的問(wèn)題就忽視它,帶著工匠精神雕刻它。
參考書(shū)籍:《SOA實(shí)踐指南》、《SOA概念、技術(shù)與設(shè)計(jì)》、《精益軟件》、《UML與模式應(yīng)用》、《軟件預(yù)構(gòu)的藝術(shù)》
Via:作者:王清培