軟體設計與交易<2>-What is Transaction?

資訊系統的設計,只有良好的 OOAD 是不夠的,同時也要考慮到分散式系統的現實環境,其中,Middleware 要能確保有穩健的交易環境是相當重要的,所以,對於 “交易(Transaction)” 這個術語,需要有清晰的瞭解才行。

在商業上, ”交易” 係指兩個契約當事人之間的一種交換行為。例如,向小販購買冰淇淋甜筒,是以金錢來換取零食 ; 在一家公司工作,是以技能及時間來交換金錢。
在交易的過程中,會試圖來保持交易的穩定性,也就是說,你會確信交易能符合雙方的期望,所以商業交易的第一法則定律就提到:

「Every movement of commerce in one direction is accompanied by an equivalent movement in the opposite direction」
(每項朝某個方向的商業行為,必然伴隨一個等值但是反方向的商業行為)

例如,您投一塊錢到公用電話機,電話公司就讓您通話三分鐘,這種商業活動是等值但呈相反方向。這符合商業第一法則,雙方誰也不欠誰,皆感到公平合理。萬一您投了錢幣,卻被電話機吃掉了,您會感到吃虧,就違背商業第一法則了。

在軟體系統上,交易就包含了商業上的交換觀念。針對企業資訊系統的交易,是一種 “工作單元(unit-of-work)” 的執行,以存取一或多個共享的資源(在實體環境上,資源經常是置於資料庫上),所謂的工作單元,就是一連串的相關活動必須一起完成。例如,向航空公司預購飛機票,”預購”的程序就是一個 “unit-of-work” 而組成許多的活動:記錄飛機班次及座位、信用卡刷卡(debiting a credit card)、產生機票,三個活動共組成一個 “unit-of-work”。

交易是存在於各種不同系統的一部份,而每一筆的交易,其目標都是一樣的:執行一串活動的 “工作單元(unit-of-work)” 而結果導致具可靠性的交換。

例如:
ATM(automatic teller machine):
主要功用為存款、提款、轉帳等。執行這些工作單元而成為交易。例如,執行提款的工作單元,首先,ATM 會檢查帳戶內的金額以確定沒有透支,然後再從你的帳戶內扣除該筆金額,並從 ATM 內吐出該筆現金,完成交易。

線上書籍及訂購:
例如透過 Web 向博客來訂購書籍,這樣型態的購買也是一種 “工作單元” 而發生了一筆交易。在線上訂購的過程中,首先鍵入了信用卡卡號,然後經由博客來訂購系統的驗證,費用就從信用卡上扣款,而書籍就經由郵局等掛號寄送過來,經由一連串的活動而完成了交易。

可以瞭解的是,交易是高度複雜並且經常伴隨的是訴諸於大量資料的操作,交易的過程當中如果發生錯誤,不僅僅是金錢的損失,甚而可能影響到身家性命!所以,交易必須要能保持資料的完整性,也就是說,每一次的交易均要能完美地執行該工作,否則就要回復到交易之前的狀態。

交易的四大特性
在高度大量資料交易的環境或者是 mission-critical 的系統,交易是不允許有絲毫的錯誤,因為這個理由,在交易服務領域的專家們鑑定了交易需要有四大特性的遵循才得以說這個系統是有安全的交易環境:

交易必須是 atomic, consistent, isolated, and durable (ACID)

Atomic
所謂的 Atomic,係指交易必須是完全地執行否則就根本不執行,這也就意味著在 “工作單元” 內的每一項工作在執行過程中皆不能有差錯,若任一工作發生錯誤時,則整個的 “工作單元” 或交易就中斷,所有已變更的資料必須回復為未修改前(undone or rollback)的狀態。若在 “工作單元” 內的所有工作皆執行成功,則該交易就被 “commit”,代表著所變更的資料需要永存到 Database。

Consistent
保證當交易完成後,必須讓系統的狀態保持一致性。何謂一致性的系統狀態?例如,在顧客完成提款的交易後,銀行系統的一致性狀態必須依循著 “客戶帳號的存款總額不能是負數的” 的規則。

Isolation
單一交易的執行不能受到其它程序或另一交易的干擾,也就是說,在該筆交易所存取的資料不能被系統的其它部分影響,直到交易或 “工作單元” 完成執行。

Durable
意味著在交易的過程當中所變更的資料必須在交易完全地執行成功前寫入到某些型態的實體儲存機制,例如 Database,而不會因為系統的當機(crash)而導致資料的遺失。

文章導覽

   

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *