2015-04-24 36 views
0

我只是深入分佈式系統的概念及其優點和缺點。在我正在閱讀的這本書中討論了分佈式系統的複雜性,並且它本質上是複雜的,它列出了以下可能的複雜性原因:爲什麼分佈式系統被認爲是複雜的?

  • 異質
  • 異步通信
  • 部分失敗

什麼,我努力理解什麼是這些概念實際上包含(即什麼是局部的失敗,什麼是部分的原因失敗?),以及它們在現代系統中如何處理?中間件是否成功地解決了系統中所有這些複雜性問題?

回答

2

這個問題可以在很多的話來回答,但我會盡力熬下來要領:

異質是集成試圖解決的主要問題之一。這是大多數分佈式系統的固有特性,它指的是大多數,往往不是,當你有多個系統整合,他們會:

  • 在不同的平臺,不同的網絡中;
  • 在融合方面的能力不同;
  • 數據有差異,即使是涉及同一業務域的數據也是如此;
  • 使用和支持不同的(有時甚至被遺忘或不支持的)技術和標準;
  • 有不同的所有者(由不同部門,公司控制)。

以上所有內容都增加了越來越多的複雜性。

異步通信解決了無狀態通信的一些問題,但引入了其他一系列複雜性,當不執行不合適時很容易導致問題。這主要是因爲您只能保證消息將在另一端成功接收,但無法保證何時處理操作。所以與同步任務相比,執行相互依賴的異步任務的編排要困難得多。

部分故障 - 當您有涉及多個相互依賴寫入操作的進程時,您需要確保ACID事務。在涉及多個系統的場景中必須這樣做更加困難,因爲在異構分佈式環境中無法像在單個系統邊界內那樣容易地實現通用事務上下文。通常情況下,您需要在服務中實施相反的操作(或更糟糕的是,實施two-phase commit),只是爲了能夠補償流程中的所有先前寫入,以防某些任務出現問題。

希望這可以清除一些事情!

1

分佈式系統如此複雜的原因很簡單:時間

在分佈式系統中,狀態的完美同步變得不可能,因爲一個簡單的事實是,消息離開一臺服務器的時間必須經過一段時間,並且它指向它到達其預定目的地的時間點。除此之外,網絡是一種更不可靠的通信媒介,這意味着信息可能永遠不會成爲可能。

缺乏完美的時間同步意味着不可能對事件的順序做出絕對的假設。例如,在高度可用的分佈式數據庫中,如果寫入相同資源的兩個請求幾乎同時到達兩個不同的服務器,則無法確定這些事件的絕對順序。因此,分佈式系統必須使用邏輯時間近似值和衝突解決方案來解決這些類型的事件順序問題。

0

部分失敗 - 對於涉及許多客戶端(@ 2或更多)的事務,使用的調度技術很多涉及衝突的寫操作和可能的寫操作,在發出鎖的過程中會出現複雜性以防萬一發生死鎖。當鎖管理器嘗試檢測,避免或防止系統可能部分失敗導致整個過程的回滾。

相關問題