<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ***** #### **1.1 CAP理論和BASE理論** * **分布式事物:** 指事物參與者、支持事物的服務器、資源服務器以及事物管理器分別于分布式系統的不同節點之上。通常一個分布式事物中會涉及對多個數據源或者業務系統的操作。 * **本地事物:** 可以采用ACID模型保證數據的嚴格一致性。但在分布式系統中,實現事物的嚴格一致性會和服務的可用性產生沖突,這是有分布式系統的特征決定的。因此,在可用性和一致性之間永遠無法存在一個兩全其美的方案,于是如何構建一個兼顧可用性和一致性的分布式系統成為一個難題,因此出現了諸如CAP和BASE這樣的分布式經典理論。 ***** 1. **CAP理論** CAP 定理(CAP theorem)又被稱作布魯爾定理(Brewer's theorem),是加州大學伯克利分校的計算機科學家埃里克·布魯爾(Eric Brewer)在 2000 年的 ACM PODC 上提出的一個猜想。2002 年,麻省理工學院的賽斯·吉爾伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)發表了布魯爾猜想的證明,使之成為分布式計算領域公認的一個定理。對于設計分布式系統的架構師來說,CAP 是必須掌握的理論。 >[] 在一個分布式系統(指互相連接并共享數據的節點的集合)中,當涉及讀寫操作時,只能保證一致性(Consistence)、可用性(Availability)、分區容錯性(Partition Tolerance)三者中的兩個,另外一個必須被犧牲。 ![](https://img.kancloud.cn/f5/bd/f5bd764172813bb8c1529a5d22ee51f4_700x417.png) 1.1 **一致性** >[] 一致性指數據在多個副本之間是否能夠保持一致性的特性。在一致性的需求下,當一個系統在數據一致的狀態下執行了更新操作后,應該保證系統的數據任然處于一致的狀態。**布魯爾提到對某個指定的客戶端來說,讀操作保證能夠返回最新的寫操作結果。** * 在分布式系統中如果能夠針對一個數據項的更新操作執行成功后,所有用戶都可以讀取到其最新的值,那么這樣的系統就被認為具有強一致性。 1.2 **可用性** >[] 可用性指系統提供的服務必須一致處于可用的狀態,對于用戶的每一個操作請求總是能夠在 **有限的時間內(指用戶的一個操作,系統必須能夠在指定的時間內返回對應的處理結果,如果超過了這個時間,系統就認為不可用)返回結果(返回結果是可用性的另一個重要指標,要求系統在完成對用戶請求處理后,返回一個正常的響應結果,失敗或者成功,而不是一個困惑的結果)**。 1.3 **分區容錯性** >[] 分區容錯性約束了一個分布式系統需要具有如下特征:分布式系統在遇到任何網絡分區故障的時候,仍熱能夠保證對外提供滿足一致性或可用性的服務,除非整合網絡環境發生了故障。 * **網絡分區** 指在分布式系統中,不同節點分布在不同的子網絡(機房或者異地網絡等)中,由于一些特殊的原因導致這些網絡之間出現網絡不連通的狀態,但是各個子網絡的內部網絡是正常的,從而導致整個系統的網絡呼喊經被切分為若干個孤立的區域。 1.4 **總結** * 在分布式環境中,我們會發現必須選擇 P(分區容忍)要素,因為網絡本身無法做到 100% 可靠,有可能出故障,所以分區是一個必然的現象。**也就是說分區容錯性是分布式系統的一個最基本要求。** * 在CAP理論中,不能同時滿足一致性、分區容忍性、可用性,而分區容忍性優勢分布式系統的基本要求,因此在架構設計的時候只能在**CA或者CP中**取舍,也就是只能在一致性或者可用性之間取舍。 1.5 **CAP理論中幾個重要的細節** * **CAP 關注的粒度是數據,而不是整個系統** C 與 A 之間的取舍可以在同一系統內以非常細小的粒度反復發生,而每一次的決策可能因為具體的操作,乃至因為牽涉到特定的數據或用戶而有所不同。但在實際設計過程中,每個系統不可能只處理一種數據,而是包含多種類型的數據,有的數據必須選擇 CP,有的數據必須選擇 AP。而如果我們做設計時,從整個系統的角度去選擇 CP 還是 AP,就會發現顧此失彼,無論怎么做都是有問題的。 * (以一個最簡單的用戶管理系統為例,用戶管理系統包含用戶賬號數據(用戶 ID、密碼)、用戶信息數據(昵稱、興趣、愛好、性別、自我介紹等)。通常情況下,用戶賬號數據會選擇 CP,而用戶信息數據會選擇 AP,如果限定整個系統為 CP,則不符合用戶信息數據的應用場景;如果限定整個系統為 AP,則又不符合用戶賬號數據的應用場景。) * **CAP 是忽略網絡延遲的。**意味著,CAP 理論中的 C 在實踐中是不可能完美實現的,在數據復制的過程中,節點 A 和節點 B 的數據并不一致。 * **正常運行情況下,不存在 CP 和 AP 的選擇,可以同時滿足 CA。**CAP 理論告訴我們分布式系統只能選擇 CP 或者 AP,但其實這里的前提是系統發生了“分區”現象。如果系統沒有發生分區現象,也就是說 P 不存在的時候(節點間的網絡連接一切正常),我們沒有必要放棄 C 或者 A,應該 C 和 A 都可以保證,這就要求架構設計的時候既要考慮分區發生時選擇 CP 還是 AP,也要考慮分區沒有發生時如何保證 CA。(同樣以用戶管理系統為例,即使是實現 CA,不同的數據實現方式也可能不一樣:用戶賬號數據可以采用“消息隊列”的方式來實現 CA,因為消息隊列可以比較好地控制實時性,但實現起來就復雜一些;而用戶信息數據可以采用“數據庫同步”的方式來實現 CA,因為數據庫的方式雖然在某些場景下可能延遲較高,但使用起來簡單。) * **放棄并不等于什么都不做,需要為分區恢復后做準備。**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看