概念
1. 節點
可以獨立按照分散式協議完成一組邏輯的程式個體,也可以認為節點是一個完整的,不可分的整體,如果整個程式程式實際上是由多個獨立的部分構成的,則可以將一個程式劃分為多個節點。
2. 通訊
節點之間的網路通訊是完全獨立且相互隔離的,網路通訊是不可靠的,傳送訊息的節點無法確認訊息是否被其他節點接收或者被消費到。
3. 儲存
資料庫,磁碟。有無狀態節點判斷,比如A節點把資料同步到B節點儲存,不能說A節點是有狀態的,只能說B節點是有狀態的節點
4.異常
機器當機,網路異常都是異常的表現
機器當機好理解,伺服器因為一些不可抗拒的原因停止工作,可能是load過高,程式碼問題,物理因素等等。解決方案有很多,比如節點分散在各個機器上,異地多活等等。
網路異常分為訊息丟失,訊息亂序,資料錯誤,不可靠TCP
訊息丟失是最常見的網路異常,網路擁塞 路由變動 裝置異常等情況發生時都是造成傳送的資料丟失,由於傳輸的資訊會存在各種異常情況,所以這也是分散式中需要解決的棘手問題之一。
有A B C三個節點時,AB在機房a C在機房b,當出現機房a和機房b由於物理原理網路不通時,則這種特殊的網路異常為網路分化。這裡可能就會造成機房a和機房b的資料不一致(這裡也引入了資料一致性問題,我們下面會講到這個)
異常不可能100%被避免,只能保證多少個9,大多數情況下都是在業務允許的範圍內補償。
副本
副本,分為資料副本和服務副本。 在分散式系統中為資料或服務提供的冗餘,保證高可用。
多份副本存在的情況下,就一定存在一致性問題。
強一致性: 顧名思義 每個節點的資料都是保持一致的。
單調一致性: 任何使用者在讀取資料的時候,只會讀取到最近一次成功更新的資料,不會讀取到比這之前還早的資料。弱於強一致性
會話一致性: 使用者在一次會話的時候,只會讀取到某次更新後的資料,這次會話結束後,讀取到的值可能不是最近一次更新的值。
最終一致性: 只要在某個節點中完成了業務,將廣播至各個節點更新資料。這一過程使用者無感知,會在之後的某個時刻資料在各節點都是一致的。同步資料時間通常要求極短,如果很長的話,會退化成弱一致性系統
弱一致性:節點更新成功後,無法在一個缺點的時間內把所有節點資料都同步。