PostgreSQL Replication系列翻譯自PostgreSQL Replication一書
在本章中,將會介紹不同的復制概念,您會了解哪些類型的復制對哪一種實用場景是最合適的。 在本章的最后,您將能夠判斷某個概念在各種情況下是否是可行的。
我們在本章將介紹以下主題:
• CAP理論
•復制的物理限制
•為什么延遲有影響
•同步和異步復制
•拆分和復制
在我們使用PostgreSQL實際工作之前,我們將引導您完成一些非常基本的與復制相關想法和事實。
1.1 CAP理論和物理限制
您可能會問,為什么一個理論可以在一本書這樣一個突出的地方被發現,這被認為是非常實用的。那么,有一個很簡單的理由:一些商業數據庫廠商的一些看起來很好看的市場方案留給您的印象是一切皆有可能,是沒有任何嚴重限制的,容易做的。這並不是事實;每一個軟件供應商必須處理這些限制。沒有任何辦法繞過自然規律,市場並不能克服自然。
在本章中,您將被介紹到所謂的CAP理論。在解決一些不能被變成現實的需求的情況下,理解這一理論的基本思想是必不可少的。
1.1.1 理解CAP理論
在我們深入到細節之前,我們必須討論CAP的實際意義。CAP是一下三個特征的縮寫:
Consistency(一致性):該特征表明集群中的所有節點在同一時刻是否看到了相同的數據。
Availability(可用性):該特征表明是否所有的請求都可以收到一個返回結果。用戶是否可以認為一個集群中的所有節點是可用的?在兩台機器之間拆分數據或狀態信息。發出一個請求,機器1有一部分數據,機器2擁有剩余部分的數據。如果任何一台機器出現故障,並不是所有的請求都可以被滿足,因為並不是所有的數據或狀態信息在任何一台機器上都是可用的。
Partition tolerance(分區容忍性):該特征表明在工作過程中如果有任意的消息丟失,系統是否能夠繼續工作。當一個系統不再接受訪問時(考慮一個網絡連接失敗),就會發生一個網絡分區事件。考慮分區容忍性的一個不同的方法是把它作為消息傳遞。如果一個專用系統不能再發送/接收消息到/從其他系統,它已被有效地從網絡中除去。
為什么這前三個要點與普通用戶有關呢?壞消息是一個復制(或分布)系統只能同時提供2/3的特征。
在理論上是不可能同時提供一致性,可用性,分區容忍性。正如您將在本書后面看到的,這對系統的的安全和可用的布局有顯著的影響。根本沒有如此簡單的事情作為解決所有復制相關的問題。當您規划一個大規模的系統,您可能要想出不同的概念去滿足您的需求,這些概念取決於您的需要。
[PostgreSQL,Oracle,DB2等等將為您提供Cap,而NoSQL系統,例如,MongoDB 或者 Cassandra 將為您提供cAP。這就是為什么NoSQL通常被稱為是最終一致的。]
1.1.2 為什么光速重要
光速不僅是一個理論問題,它確實會對您的日常生活產生影響。更重要的是,它對您找到適合您集群的解決方案有重要的含義。
我們都知道,宇宙的極限速度是光速。那么,為什么要在乎?好吧,讓我們做一個簡單的心里實驗。讓我們假設我們的數據庫服務器以3GHz的時鍾速度運行。
在您的CPU的一個時鍾周期內光可以走多遠的距離?如果您計算的話,您會發現光在每個時鍾周期(純真空)走的距離為10厘米。我們可以假設在CPU內的電信號會比在真空中的光的幅度較慢。核心思想是:一個時鍾周期10厘米?一點都不多。
為了我們的心理實驗,現在讓我們考慮不同的距離:
•兩個CPU之間的距離
•您的服務器到隔壁其他服務器的距離
•您在歐洲中部的服務器到中國服務器的距離
考慮到在電路板上的一個CPU核的大小,您可以假設從CPU的一個部分發送一個信號(盡管他沒有光的速度快)到其他部分相當地快。計算已經在您的CPU的一級緩存中的兩個數據的和它根本用不了一百萬個時鍾周期。
但是,如果您必須從一個服務器發送一個信號到其他服務器發生了什么?您可以安全地假設從服務器A發送一個信號到隔壁的服務器B需要花費很長時間,因為電纜是比較長的。通常情況下,它超過10厘米。除此之外,網絡交換機和別的網絡組件將產生額外的延遲。(此處電纜的長度不是電纜的帶寬)
[這里我說的是電纜的長度,而不是關於它的帶寬。]
從歐洲發送消息(或事物)到中國,通常情況下和發送一些數據到隔壁的服務器相比要耗費更多的時間。再次,重要的是,這里的數據量和所謂的延遲時間並不相關。
1.1.3 遠程傳輸
讓我嘗試通過給出一個非常簡單的例子來解釋延遲的概念。假設您是歐洲人,您在發送一封信到中國。您會很容易接受這個事實:您的信的大小並不是這里的限制因素。不論您的信是兩頁或二十頁,並沒有任何區別;到達目的地所花費的時間是基本相同的。此外,如果您同時發送一封,兩封,十封信也是沒有區別的。考慮到合理的信的數量,運送東西到中國的飛機(帶寬)的大小通常不是問題。但是,所謂的往返很可能是一個問題。如果您依賴來自中國信件的響應來繼續您的工作,您很快就會發現自己等了很久。
1.1.4 為什么延遲有影響
同樣的概念也適用於復制(replication):如果您從歐洲發送數據塊到中國,您應該避免等待響應。如果兩台在同一個機架上的服務器之間發送數據塊,您可能可以等待響應,因為您的電信號會足夠快使信號即使返回。
[本節中描述的延遲的基本問題不是PostgreSQL所特有的。相同的概念和物理限制適用於所有類型的數據庫和系統。和以前一樣,這個事實有時候在閃亮的商業營銷論文里靜靜地被隱藏和被忽視。盡管如此,物理定律是不變的。這適用於商業和開源軟件。]
最重要的一點,您必須記住的是:在復制環境中,帶寬不總能解決性能問題。在許多設置中,延遲至少和帶寬一樣重要。