分布式計(jì)算是云計(jì)算和大數(shù)據(jù)的基礎(chǔ)支撐技術(shù)之一,分布式存儲和分布式計(jì)算也是大數(shù)據(jù)平臺和云計(jì)算平臺的核心技術(shù)組成,從這個(gè)角度來看,分布式計(jì)算是非常重要的技術(shù)方向 。未來,隨著5G通信的落地應(yīng)用,分布式計(jì)算與邊緣計(jì)算的發(fā)展空間都會比較大 。首先,機(jī)器學(xué)習(xí)和分布式計(jì)算都是目前比較熱門的方向,近幾年相關(guān)方向研究生的就業(yè)情況也都有不錯(cuò)的表現(xiàn),薪資待遇也比較可觀 。
分布式計(jì)算是如何控制事務(wù)的?
事務(wù)的管理不應(yīng)該屬于Dubbo框架,Dubbo只需實(shí)現(xiàn)可被事務(wù)管理即可,像JDBC和JMS都是可被事務(wù)管理的分布式資源,Dubbo只要實(shí)現(xiàn)相同的可被事務(wù)管理的行為,比如可以回滾,其它事務(wù)的調(diào)度,都應(yīng)該由專門的事務(wù)管理器實(shí)現(xiàn) 。在Java中,分布式事務(wù)主要的規(guī)范是JTA/XA,其中:JTA是Java的事務(wù)管理器規(guī)范,XA是工業(yè)標(biāo)準(zhǔn)的X/Open CAE規(guī)范,可被兩階段提交及回滾的事務(wù)資源定義,比如某數(shù)據(jù)庫實(shí)現(xiàn)了XA規(guī)范,則不管是JTA,還是MSDTC,都可以基于同樣的行為對該數(shù)據(jù)庫進(jìn)行事務(wù)處理 。
首先是不建議采用XA兩階段提交方式去處理分布式事務(wù),要知道要能夠支持XA分布式事務(wù),必須是要實(shí)現(xiàn)XA規(guī)范才可以,而Service本身是無狀態(tài)的,如果這樣去做了等于是把Service內(nèi)部的東西暴露了出去 。對于分布式事務(wù)最好的方式還是事務(wù)補(bǔ)償或者BASE基于消息的最終一致性 。可以設(shè)想一個(gè)最簡單的分布式事務(wù)場景,對于跨銀行的轉(zhuǎn)賬操作,該操作涉及到調(diào)用兩個(gè)異地的Service服務(wù),一個(gè)是本地提供的取款服務(wù),一個(gè)是目標(biāo)銀行提供的存款服務(wù),該兩個(gè)服務(wù)本身無狀態(tài)且獨(dú)立,構(gòu)成一個(gè)完整的事務(wù) 。
對于事務(wù)的處理初步分析:事務(wù)補(bǔ)償機(jī)制事務(wù)補(bǔ)償即在事務(wù)鏈中的任何一個(gè)正向事務(wù)操作,都必須存在一個(gè)完全符合回滾規(guī)則的可逆事務(wù) 。如果是一個(gè)完整的事務(wù)鏈,則必須事務(wù)鏈中的每一個(gè)業(yè)務(wù)服務(wù)或操作都有對應(yīng)的可逆服務(wù) 。對于Service服務(wù)本身無狀態(tài),也不容易實(shí)現(xiàn)前面討論過的通過DTC或XA機(jī)制實(shí)現(xiàn)的跨應(yīng)用和資源的事務(wù)管理,建立跨資源的事務(wù)上下文 。
因此也較難以實(shí)現(xiàn)真正的預(yù)提交和正式提交的分離 。在這種情況下以上面例子來說,首先調(diào)用取款服務(wù),完全調(diào)用成功并返回,數(shù)據(jù)已經(jīng)持久化 。然后調(diào)用異地的存款服務(wù),如果也調(diào)用成功,則本身無任何問題 。如果調(diào)用失敗,則需要調(diào)用本地注冊的逆向服務(wù)(本地存款服務(wù)),如果本地存款服務(wù)調(diào)用失敗,則必須考慮重試,如果約定重試次數(shù)仍然不成功,則必須log到完整的不一致信息 。
也可以是將本地存款服務(wù)作為消息發(fā)送到消息中間件,由消息中間件接管后續(xù)操作 。在上面方式中可以看到需要手工編寫大量的代碼來處理以保證事務(wù)的完整性,我們可以考慮實(shí)現(xiàn)一個(gè)通用的事務(wù)管理器,實(shí)現(xiàn)事務(wù)鏈和事務(wù)上下文的管理 。對于事務(wù)鏈上的任何一個(gè)服務(wù)正向和逆向操作均在事務(wù)管理和協(xié)同器上注冊,由事務(wù)管理器接管所有的事務(wù)補(bǔ)償和回滾操作 。
基于消息的最終一致性在這里首先要回答的是我們需要時(shí)實(shí)時(shí)一致性還是最終一致性的問題,如果需要的是最終一致性,那么BASE策略中的基于消息的最終一致性是比較好的解決方案 。這種方案真正實(shí)現(xiàn)了兩個(gè)服務(wù)的真正解耦,解耦的關(guān)鍵就是異步消息和消息持久化機(jī)制 。還是以上面的例子來看 。對于轉(zhuǎn)賬操作,原有的兩個(gè)服務(wù)調(diào)用變化為第一步調(diào)用本地的取款服務(wù),第二步發(fā)送異地取款的異步消息到消息中間件 。
如果第二步在本地,則保證事務(wù)的完整性基本無任何問題,即本身就是本地事務(wù)的管理機(jī)制 。只要兩個(gè)操作都成功即可以返回客戶成功 。由于解耦,我們看到客戶得到成功返回的時(shí)候,如果是上面一種情況則異地卡馬上就能查詢賬戶存款增加 。而第二種情況則不一定,因?yàn)楸旧硎且环N異步處理機(jī)制 。消息中間件得到消息后會去對消息解析,然后調(diào)用異地銀行提供的存款服務(wù)進(jìn)行存款,如果服務(wù)調(diào)用失敗則進(jìn)行重試 。
推薦閱讀
- 48級水滸中劉唐怎么得,10分鐘讀完《水滸傳》
- 【一分鐘系列】關(guān)于其他內(nèi)置應(yīng)用
- 壓瘡護(hù)理的新觀點(diǎn)有哪些,平均1分鐘接診
- 5分鐘短片記錄雙11幕后,無名子有多少家店面
- 強(qiáng)者之路怎么提升戰(zhàn)力,一分鐘教你快速提升
- 你買到一部充電五分鐘的手機(jī)又怎樣
- 你們的錘2玩王者榮耀
- 這是什么都提示,有知道的嗎,分分鐘跳出來
- 自動擋停幾分鐘掛什么檔 自動檔停留一段時(shí)間掛什么檔
- 我的錘1經(jīng)歷了可怕的五分鐘
