一般的程式設計師對於單一資料源的交易處理機制都有一定的了解。所謂的交易控管,用白話文來說,就是只要我需要一次更動多筆資料,而這個更動的行為在邏輯
上是一個具有業務價值的單一行為,我就需要交易的處理機制。但是比較少人花心思去了解的是J2EE裡頭規範ApplicationServer必須Follow的XA Transaction Protocol以及更具有價值的Transaction Recovery機制。
接下來我想要點出的是一般人的迷思:
- 迷思:只有在多重資料庫的資料更新場合才需要2PC。事實上只要你有兩個以上的DataSource想要同時參與一個Transaction,你就需要2PC。除非你自行處理所有的交易補償邏輯,否則兩個以上的Local Transaction,是不會有相互關連,資料的正確性也就大大的有問題了。
- 迷思:只要依賴資料庫的交易機制,我的資料正確性就無懈可擊!
假設Application Server正在處理一個交易,一個Batch
update好了。你從DataSource1把資料傾倒到DataSource2,一邊將DataSource1的資料清除掉。這時候,不知道什麼原
因,網路斷了,或者電源線被踢到了....源源不絕的客服電話把你灌爆。你以為你把電源插上就沒事了,可是.....咦,資料好像不太對?這時候如果你用
得是WebLogic Server Advantage以上的版本,你可以透過Transaction Log自我恢復的機制,來讓WebLogic
Server幫你Rollback資料庫裡頭的資料,維護你資料的Consistency。當然,你可以自己花錢花時間寫這個機制....但是你的客戶是
否可以接受哪怕是幾分鐘的資料不正確?
Transaction
Recovery的功能。Transaction的問題很難Debug,已經看到太多英才死在這邊了,拜託大家緬懷先列的犧牲,不要再為了這種問題而強制
性失眠了,請愛用XA,謝謝!
Powered by ScribeFire.
No comments:
Post a Comment