引言
編寫應用程序是很難的。隨著時間的推移,我們不斷發掘允許建立大型應用程序的概念和技術。模塊化,或者說將應用程序構建成獨立的模塊,使我們得以由簡單的部分構建復雜的系統,並使軟件得到重復使用。面向對象概念和 Microsoft® 組件對象模塊 (COM) 可提供編寫模塊化應用程序的技術。
當某個應用程序構建為組件時,各個單獨部分可共同駐留在單台計算機上,也可通過遠程過程調用在網絡上相互作用。因此,組件同時提供了模塊化和自然分布。
將應用程序構建成獨立的組件會產生組件的管理問題。單個程序失敗後,將作為一個單位重新啟動。但在使用模塊化系統時,一個組件的失敗不應當破壞其它組件。這就必須有隔離故障和限制故障傳播的方法。事務提供了模塊化執行方式,因此簡化了故障處理,並使故障處理自動實現。它們同時為執行者和用戶提供了簡單的概念化執行框架。
用戶認為事務是單個的要麼發生或要麼不發生的更改事件。執行者認為事務是一種允許他們編寫能參與分布式計算的模塊的編程形式。假定您要將資金從一個銀行帳戶轉到另一個帳戶。執行者和用戶需要確保兩個帳戶都更改或都不更改。在分布式系統中很難完成這項工作 - 計算機可能失敗,並且會丟失信息。事務提供了一種方法,能夠將一組操作集合成具有原子性的執行單位。
原子性要麼全有要麼全無的屬性並不新鮮:它在生活中隨處可見。例如,如果輸入一個合同,escrow(由第三者保存附帶條件委付蓋印的契約)官員將協調這項事務:escrow 官員會收集此合同每一方的簽字。當 escrow 官員宣布所有人都已簽字後,此合同就完成了。主持結婚典禮的牧師先問新娘和新郎“願意此人成為您的配偶嗎?” 如果他們都回答“願意”,牧師就會宣布他們結婚。電影導演在某一場景會先問“布景准備好了嗎?” 如果都回答已准備好,導演就會喊“開拍!” 在帆船上預備掉轉航向的舵手會先問船員,“准備好轉向了嗎?” 如果都回答已准備好,舵手就會喊“轉舵!”,改變船的方向。
這些情景說明了事務的基本原理:幾個獨立的實體必須達成一致。如果任何一方不同意,交易就會失敗。一旦同意後,事務就會發生。Microsoft Distributed Transaction Coordinator (MS® DTC) 為 COM 結構的其它組件執行這項事務協調任務。
在 MS DTC 術語中,執行者被稱為事務管理器。在執行事務保護資源的事務中,其參與者(如關系數據庫)被稱為資源管理器。
應用程序通過調用事務管理器的 BeginTransaction 方法開始事務。這樣可創建一個代表事務的事務對象。然後應用程序會調用資源管理器來完成事務工作。
應用程序對每個資源管理器的第一次調用確定應用程序的當前事務。例如,如果應用程序在使用關系數據庫,它會調用 ODBC 接口,此接口將事務對象與 ODBC 連接關聯起來。在此之後,所有通過此連接的數據庫調用都會代表該事務執行,直到該事務結束為止。
當某個資源管理器首先代表某個事務工作時,會通過調用事務管理器“登記”到該事務中。隨著事務的發展,事務管理器會跟蹤每個登記到該事務中的資源管理器。
通常,應用程序用 Commit 事務方法來完成事務。如果應用程序無法完成,則調用 Abort 事務方法,該方法可以撤消事務的操作。如果應用程序失敗,MS DTC 就會放棄此事務。
當應用程序成功地完成事務的工作後,它會調用 MS DTC 來“提交”事務。然後 MS DTC 會仔細檢查“兩階段” “提交協議”,使所有已登記的資源管理器都提交。兩階段提交協議可確保所有的資源管理器提交此事務,或全都放棄此事務。在第一階段,MS DTC 詢問每個資源管理器是否“准備”提交。如果所有參與者都回答“是”,那麼在第二階段 MS DTC 將向所有參與者廣播提交信息。如果事務的任何部分失敗,或資源管理器響應准備請求失敗,或資源管理器響應“否”,那麼 MS DTC 將通知所有資源管理器該事務已被放棄。
事務管理器是大多數數據庫系統的關鍵部分。事務管理器還是某些操作系統的可選部分。Microsoft 相信事務對分布式應用至關重要 - 事務提供了模塊化執行,從而使 COM 模塊化編程更加完備。Microsoft 提供 Microsoft Windows® 95 和 Microsoft Windows NT® 操作系統的事務管理軟件。
將事務概念與 COM 必需的創新相結合。傳統的事務系統要求具有很高的安裝和管理技巧。而集成 MS DTC 與 Microsoft 操作系統的難點是自動實現安裝、管理和使用。許多概念和技術必須針對新的客戶/服務器、面向對象和可視化管理環境重新創造。
在第一版中,MS DTC 使用了一個資源管理器:Microsoft SQL Server®。