470
技術社區[雲棲]
《雲數據管理:挑戰與機遇》2.3.3 恢複和提交
恢複和提交
集中式恢複
故障恢複是數據庫管理係統不可分割的一部分。集中式恢複可以在單站點數據庫在磁盤上存儲所有數據時確保其持久性或永久性。為了在確保原子性的同時實現故障恢複,很多機製在事務執行的過程中都使用持久性存儲設備,如磁盤,從而確保all-or-nothing屬性。下麵是3種常用的方案。
1. 影子頁:在磁盤上保存兩份數據庫備份,其中一個用於事務更新,當事務提交時,原子指針切換到新的數據庫備份。
2. 前像文件:磁盤日誌用來存儲所有更新數據項的前像文件(before-image),事務會立即更新物理數據庫。一旦故障出現並且事務尚未提交,數據庫就會根據日誌恢複到初始狀態。
3. 後像文件:所有更新操作在後像文件(after image)日誌中執行。事務提交後,根據日誌,將所有的後像文件裝載到數據庫中。
在這些基本概念的基礎上,提出了各種各樣的恢複方法。這些方法以不同的方式對前像文件日誌和後像文件日誌進行組合,從而提高提交事務或中止事務的性能[Bernstein and Newcomer, 2009, Gray and Reuter, 1992, Weikum and Vossen, 2001]。
從集中式數據庫擴展到分布式數據庫(即對象可能存在於不同的站點上)的關鍵挑戰是:當故障出現時,如何在不同站點之間確保原子性。下麵將介紹主要的分布式提交協議。
原子提交(atomic commitment)
提交的根本問題是由於事務在多個服務器上執行操作而引起的。全局提交需要所有參與者的一致本地提交。分布式係統可能會部分失效,在特殊情況下,服務器可能崩潰,極端情況下,會出現網絡故障,從而導致網絡劃分。這可能會導致不一致的決定,即,在某些服務器上事務完成了提交,而在其他服務器上,事務卻中止了。
基本的原子提交協議是一種簡單的分布式握手協議,稱為兩階段提交協議(two-phase commit, 2PC)[Gray, 1978]。在該協議中,協調者(事務管理者)負責一致決定:提交或中止。其他所有的執行事務的數據庫服務器在該協議中都是參與者,都依賴於該協調者。提交時,協調者向所有參與者請求選票。原子提交要求所有進程得到相同的決定,特別是,隻有當所有進程都投讚成(yes)票時,事務才能提交。因此,如果沒有故障發生,並且所有的進程都投讚成(yes)票時,最終結果才可以提交。
該協議執行過程如下。協調者向所有參與者發送投票請求(vote-request)。當參與者接收到投票請求消息時,如果能本地提交,就返回一個yes消息,如果需要中止該事務(由於死鎖或者無法把本地操作寫到磁盤上),就返回no消息。協調者收集所有投票,如果都是讚成票(yes),那麼就認為事務已經提交,否則事務就被中止了。協調者將結果發送給所有參與者,參與者相應地對本地事務進行提交或中止。
如果一個站點沒有接收到預期的消息,該站點會怎麼做呢?注意,該協議假設分布式係統是異步的,因此,其中有一個超時機製。有以下3種情況需要考慮。
1. 參與者等待投票請求:這種情況下,參與者在本地中止事務是安全的。
2. 協調者等待投票:這種情況下,協調者也可以安全地中止事務。
3. 參與者等待最終決定:這是一種不確定的情況,由於事務可能已經提交或者中止,因此,參與者也可能是不確定的,參與者可能不知道實際的決定。而有趣的是,協調者是確定的。
接下來詳細探討不確定參與者的情況。實際上,該參與者可以向其他參與者詢問最終決定並尋求幫助。一旦任何參與者已提交或中止,該參與者就可以發送提交或中止決定。如果一個參與者尚未投票,那麼它就可以安全地中止該事務,並可以向其他參與者發送中止決定。然而,如果所有參與者都投讚成票(yes),那麼所有活動的參與者都是不確定的。這種情況下,該事務就被認為已阻塞,所有活動的參與者都需要一直等待,直到有足夠多的站點讚成該事務進行恢複的決定。直觀來看,活動的參與者處於不確定狀態,其他一些失敗的參與者可能處於提交狀態,還有一些參與者處於中止狀態。一般來說,兩階段提交協議即使是在簡單的係統崩潰故障情況下也可能存在阻塞問題。
為了解決阻塞問題,可以引入中間緩衝狀態,這樣一來,如果任何運行站點是不確定的,那麼,所有進程都不能提交[Skeen and Stonebraker,1983]。這種協議就是三階段提交協議,該協議在站點故障情況下是非阻塞的。然而,三階段提交協議不允許分區故障。實際上,可以證明在分區故障情況下,不存在非阻塞原子提交協議[Skeen and Stonebraker, 1983]。
總之,分布式數據庫中的提交協議可能導致高複雜度和潛在的阻塞問題。實際上,其他站點的故障可能導致本地數據不可用。分布式數據庫需要大量的額外開銷來確保執行的正確性。這種對全局同步機製的依賴會限製係統的可擴展性,並對容錯性和數據可用性產生重要影響。上述所有原因及其他因素(與不同地點的數據權限有關)共同導致分布式數據庫的商業化應用較少。
最後更新:2017-05-19 14:04:53