2009-12-01 65 views
1

理論上,是否可以定義一個協議,其中一臺機器在另一臺機器(或多臺機器)上進行一些遠程調用,以及在該進程的任何部分中,如果任何機器(或操作)發生故障或通信中斷,一切都回滾了? (就像數據庫一樣)是否可以通過機器邊界(通過tcp-ip)進行事務處理?

我問這個問題,因爲在硬件層面上,人們總是說如果沒有原子處理器操作(測試和設置),就不能進行原子操作(一個非常重要的事務成分)。

但是,既然我們現在正在談論多臺機器,這不會飛。作爲一個例子,這將是一個棘手的問題:假設我有一個協議在遠程機器上發出一個命令,並得到一個迴應。這可能是該方法被調用,但在傳輸響應期間,連接會死亡。這也可能是執行操作的機器認爲一切正常,但接收機從未得到答案。

添加Ack's沒有幫助,因爲ack可能在傳輸中丟失。

有興趣閱讀他人的想法(並瞭解到一些27年前的教授已經提出了一個堅實的解決方案)。

[R

+0

,因爲我猜會有一個明確的答案,這我不盯着這是一個社區的wiki。如果事實證明情況並非如此,我總是可以改變它 – Toad 2009-12-01 12:00:18

回答

3

是的,這個問題已經(或多或少)已經解決了:)

什麼你要找的是Two-Phase Commit protocol

在事務處理,數據庫, 和計算機網絡,所述兩階段 提交協議(2PC)是一種類型的 原子提交協議。它是一個 分佈式算法,它協調 參與 分佈式原子事務處理的所有進程是否提交或中止(回滾) 事務。該協議甚至在許多情況下系統 失敗(涉及任一進程, 網絡節點,通信等, 失敗),並因此廣泛地使用 ,其目標達到 。

+0

正是我在找的東西。謝謝 – Toad 2009-12-01 12:23:53

相關問題