电竞比分网-中国电竞赛事及体育赛事平台

分享

本地事務(wù)和分布式事務(wù)工作實(shí)踐

 昵稱10504424 2013-12-23

一:從事務(wù)的歷史說起

  知已知彼,百戰(zhàn)不敗。想了解事務(wù),我們從事務(wù)的歷史說起。

  在Windows平臺(tái)上,事務(wù)的概念最開始出現(xiàn)在關(guān)系型數(shù)據(jù)庫中,但是隨著.net平臺(tái)的發(fā)展,事務(wù)包括的的范圍也越來越寬,先一睹為快,

  在關(guān)系型數(shù)據(jù)庫中的事務(wù)是通過begin transaction,rollback transaction, commit 等關(guān)鍵字來實(shí)現(xiàn)事務(wù)的。

  隨著面象對(duì)象的發(fā)展,.net的誕生,在.net 1.* 的版本中,可以通過ADO.NET來實(shí)現(xiàn)數(shù)據(jù)庫的事務(wù)。把事務(wù)交給業(yè)務(wù)程序來控制,使業(yè)務(wù)程序的本職發(fā)揮的淋漓盡致,而從數(shù)據(jù)庫的角度來看,數(shù)據(jù)庫也能更專一的進(jìn)行數(shù)據(jù)的存儲(chǔ)。達(dá)到了各盡其責(zé)的效果。

  萬物是發(fā)展的,程序的發(fā)展也是永遠(yuǎn)止境的。某天有一個(gè)需求:創(chuàng)建一個(gè)客戶信息,其中包括姓名和頭像。姓名保存在數(shù)據(jù)庫,頭像保存在服務(wù)器的硬盤中。姓名和頭像的保存有一個(gè)失敗都是一個(gè)不完整的操作,都要回滾到初始狀態(tài)。用ADO.NET的事務(wù)顯示不能實(shí)現(xiàn)這個(gè)要求。因?yàn)榛刭Y源包括了數(shù)據(jù)庫硬盤?;谶@種情況,.net 2.0推出了System.Transactions事務(wù)。

  System.Transactions名稱空間下的事務(wù),是.net的主推事務(wù)。

二:事務(wù)有關(guān)概念

  第一節(jié),我們都用代碼把事務(wù)實(shí)踐了一把,那還有必要來說事務(wù)的概念和事務(wù)在運(yùn)行過程中涉及到的對(duì)象呢?如果你想深入了解事務(wù),這一步是必須的。

事務(wù)的定義和屬性:

  1,什么是事務(wù):它是一個(gè)操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個(gè)不可分割的工作單位。

  2,事務(wù)特性:接觸事務(wù),都是從事務(wù)的ACID開始,原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。每個(gè)特性的定義僵硬,枯燥,不易理解,讀了好幾篇都有讓人想跳樓的欲望。今兒換一個(gè)方式來說事務(wù)特性。

  銀行轉(zhuǎn)款是事務(wù)的經(jīng)典示例,可能因?yàn)殄X與銀行扯的上關(guān)系,一提到銀行,大家都精神倍爽,為了不另類,所以我也決定用銀行轉(zhuǎn)款來說事務(wù)的四大特性。

  2.2:一致性:給朋友轉(zhuǎn)款888元RMB作為婚禮的禮金,但是朋友只收到777元RMB。這時(shí)你不爽了,你朋友也不爽,所以轉(zhuǎn)款要必須保證數(shù)據(jù)的一致性。

  2.4:持久性:轉(zhuǎn)款這個(gè)操作被銀行記錄起來,過很多年后,你都還能查詢到轉(zhuǎn)款這個(gè)記錄。這就是持久性。

  事務(wù)涉及的對(duì)象:

  1,資源:應(yīng)用程序存儲(chǔ)和獲取數(shù)據(jù)的地方,可以是數(shù)據(jù)庫,文件,也可以是內(nèi)存。如果是應(yīng)用程序的事務(wù)塊代碼中涉及到的數(shù)據(jù)庫,文件,內(nèi)存,那這些資源就稱為事務(wù)型資源。

  2,資源管理器:在事務(wù)模型中,應(yīng)用不是直接訪問資源,而是通過中間介訪問資源,這個(gè)中間介就叫資源管理器。資源分為可持久化資源(對(duì)應(yīng)了持久化資源管理),易失資源(對(duì)應(yīng)了易失資源管理器)。

  3,事務(wù)管理器:實(shí)現(xiàn)事務(wù)的開始,提交,回滾。

  事務(wù)提升:

  要認(rèn)識(shí)事務(wù)提升,必須要弄清楚事務(wù)管理器的類型。如下作了非常詳細(xì)的介紹:

  1:輕量級(jí)事務(wù)管理器:作用于開啟事務(wù)的應(yīng)用程序域,只能包含一個(gè)持久化資源,如果再添加一個(gè)持久化資源,將被輕量級(jí)事務(wù)管理器忽略。但是可以登記多個(gè)易失資源。目前輕量級(jí)事務(wù)管理器只支持SQL 2005以及SQL2005以上的版本持久化資源。

  3:內(nèi)核事務(wù)管理器:在Vista被引入,并后續(xù)于Windows Server 2008,WIN7。引入內(nèi)核事務(wù)管理器主要是把文件管理(NTFS文件系統(tǒng))和注冊(cè)表管理納入事務(wù)范疇。我們將那些支持事務(wù)的文件系統(tǒng)和注冊(cè)表叫作事務(wù)型文件系統(tǒng)(TxF)和事務(wù)型注冊(cè)表(TxR)。 之所以稱為內(nèi)核事務(wù)管理器,是因它運(yùn)行在內(nèi)核模式上,而不是在用戶模式上。同樣內(nèi)核事務(wù)管理器只支持一個(gè)持久化資源。

  3:分布式事務(wù)協(xié)調(diào)器:每一臺(tái)電腦上只有一個(gè)分布式事務(wù)協(xié)調(diào)器,它管理了當(dāng)前計(jì)算機(jī)的所有事務(wù)資源。它可以跨程序域,跨進(jìn)程,跨機(jī)器,跨網(wǎng)絡(luò)來執(zhí)行事務(wù)。當(dāng)事務(wù)跨機(jī)器時(shí),每臺(tái)機(jī)器的分布式事務(wù)協(xié)調(diào)器按照相應(yīng)的協(xié)議工作,實(shí)現(xiàn)對(duì)整個(gè)事務(wù)的管理,它對(duì)應(yīng)的事務(wù)管理協(xié)議有Ole-Tx和WS-Atomic Transaction(WS-AT)這些。 分布式事務(wù)協(xié)調(diào)器能夠管理一個(gè)分布式事務(wù)涉及的所有事務(wù)型資源,不管具體的事務(wù)型資源分布在何處。

  事務(wù)提升:事務(wù)是一個(gè)動(dòng)態(tài)執(zhí)行的操作序列,在整個(gè)過程中,不可能預(yù)知資源的登記情況。所以輕量級(jí)事務(wù)管理器作為默認(rèn)的事務(wù)管理器,隨著事務(wù)的逐步執(zhí)行,如果涉及到內(nèi)核事務(wù)資源,那么將提升為內(nèi)核事務(wù)管理器。如果出現(xiàn)對(duì)多個(gè)事務(wù)資源的訪問,或者當(dāng)前事務(wù)涉及跨域(調(diào)用另外一個(gè)服務(wù)),就會(huì)提升為分布式事務(wù)協(xié)調(diào)器。Windows采用事務(wù)提升機(jī)制進(jìn)行事務(wù)管理器的選擇。

  

三:事務(wù)的分類

  1:本地事務(wù)

  輕量級(jí)事務(wù)管理器,內(nèi)核事務(wù)管理器都只支持本地事務(wù)。本地事務(wù)相對(duì)簡單,這兒不作重點(diǎn)簡述。

  2:分布式事務(wù)

  理解分布式事務(wù)是怎樣實(shí)現(xiàn)的,事務(wù)提交樹是關(guān)鍵。

  事務(wù)提交樹:事務(wù)提交樹的根是事務(wù)初始化服務(wù)所在的機(jī)器的DTC,它在整個(gè)事務(wù)提交過程中充當(dāng)著總協(xié)調(diào)者,又被稱為全局提交協(xié)調(diào)器。資源管理器充當(dāng)著事務(wù)提交樹的葉子節(jié)點(diǎn),它們的父結(jié)點(diǎn)為本機(jī)的DTC,分布于不同機(jī)器的DTC按照事務(wù)的傳播路徑形成了上下級(jí)關(guān)系。

  

  在一個(gè)分布式事務(wù)中,事務(wù)的初始化和提交是屬于一個(gè)對(duì)象,只有最初開始的事務(wù)才能被提交,我們將這種能被初始化和提交的事務(wù)稱作可提交事務(wù)。隨著參與者逐個(gè)登記到事務(wù)中,它們本地的事務(wù)實(shí)際上依賴著這個(gè)最初開始的事務(wù),所以我們稱這種事務(wù)叫依賴事務(wù)。

四:示例

  文件事務(wù)

  在MSDN上對(duì)文件事務(wù)有詳細(xì)的闡述 使用文件系統(tǒng)事務(wù)增強(qiáng)您的應(yīng)用程序 我們?nèi)绻亲屑?xì)閱讀這篇文章不難發(fā)現(xiàn)他提供了一個(gè).exe類型文件的下載。先把這個(gè)TxF2007_07.exe文件下載到本地硬盤,執(zhí)行它,可以得到一個(gè)關(guān)于 c#的 KtmIntegration.csproj 的項(xiàng)目,我們用visual studio來打開這個(gè)項(xiàng)目,并且重新重成這個(gè)項(xiàng)目,可以得到一個(gè)KtmIntegration.dll文件。在你要實(shí)現(xiàn)的文件事務(wù)的項(xiàng)目中引入這個(gè).dll文件,那你就可以很順利的實(shí)現(xiàn)文件事務(wù)的操作了。具體代碼:

不要忘記了引入using Microsoft.KtmIntegration;名稱空間。在段代碼沒有異常的情況下,我們可以看到D盤里順利創(chuàng)建了一個(gè)關(guān)于Sam Xiao.txt的文件。我們故意在這段代碼中拋出一個(gè)被0整除的異常,那么整個(gè)操作就會(huì)回滾。

  分布式事務(wù)

  在.net平臺(tái)上,主要是通過WCF的手段來實(shí)現(xiàn)程序的分布式開發(fā)。在WCF事務(wù)體系:主要解決了事務(wù)在服務(wù)中的流轉(zhuǎn),以及解決服務(wù)內(nèi)部直接或間接訪問事務(wù)型資源的協(xié)作。

  用WCF來演示事務(wù)的時(shí)候,要選擇好WCF的綁定類型,有一部份綁定是不支持WCF的事務(wù)傳播的。我們選擇wsHttpBinding 來做WCF的事務(wù)演示。

  1,首先定義好WCF的服務(wù)契約

  2,實(shí)現(xiàn)WCF的服務(wù)

  3,WCF宿主配置

  4,WCF客戶端配置

  5,調(diào)用服務(wù)

  此時(shí)我們WCF演示事務(wù)的五步曲就完成了。我們做敏捷開發(fā)都知道,可運(yùn)行的代碼高于詳細(xì)的文檔。如果還有不太明白的地方,可以在網(wǎng)上搜索,也可以留言問我。

五:總結(jié)

【推薦】,你們的推薦是我的動(dòng)力。

  滴水之恩,當(dāng)涌泉相報(bào)。回報(bào)幫助過我的人,以及需要我?guī)椭娜?span style="COLOR: rgb(255,0,0); FONT-SIZE: 18pt">源碼下載



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多