主備數據庫與多主數據庫的拓撲比較
譯文【51CTO.com快譯】如今,在各種類型的應用項目中,業務規則日趨復雜,數據體量也日益增多。這些都給應用后端的數據庫帶來了不小的壓力。而隨著應用程序持續被越來越多的用戶所使用,您會逐漸發現,數據庫層已經成為了整個系統的關鍵節點和性能瓶頸。因此,實現數據層的高可用性,就成為了我們在項目設計與運維過程中,經常要考慮和解決的問題。
下面,我將以單個站點和多個站點的,主-備和多主模式為例,和您討論數據庫的各種部署類型,它們各自的特點和在功效上的利弊,以便您能夠設計出具有高可用性和業務彈性的數據庫架構。
首先讓我們來看在單個站點上的數據庫部署類型:
單節點
單個站點上的單節點部署
最基本的部署方式當屬單個站點上的單節點架構。在業務連續性方面,這顯然是最不具備優勢的部署模式。由于無法提供高可用性,其唯一的DR(災難恢復)機制只能通過現有的備份文件,去恢復數據庫。可見,這種類型的部署,通常出現在不太重要的環境中。例如,在CI/CD管道的技術中,自動化測試已經成為了該過程的一部分,那么在開發或使用過程中,我們就可以將諸如:CockroachDB、Oracle、以及SQL Server等幾乎所有數據庫,都按照這種方式進行部署。
單節點部署模式的好處是:
- 由于只有一個節點需要獲得數據庫的許可證,因此它具有一定的成本效益。但是,如果在真實的生產中采用此模式,那么由于業務中斷所帶來的損失,以及引發的補救成本,則可能是一個天文數字。
單節點部署模式的缺點是:
- 缺乏HA(高可用性)。如果唯一的節點出現錯誤或問題,則無法實現故障的轉移。因此,您必須手動修復現有的失敗節點,然后再從備份中進行數據恢復。
- 任何可能導致停機的維護,都必須事先考慮到如何轉移數據流的傳輸;而任何對于系統的修補或升級,也都會以某種形式給客戶或服務造成影響。
多節點
我們再來看單個站點上的多節點架構。顯然,在技術實現上,它會對DR和HA有所改進。在此類部署中,我們一般可以選用主-被模式、或多主模式,并配置出2個或更多的節點。而且,這些節點通常可以分布在不同的故障域中,例如:某個機架、某組網絡交換機或磁盤。
主-被模式
主-被
這種模式通常是由一個主節點和n個被節點組成。這意味著,如果主節點出現了問題,應用程序可以立即指向被節點,并將被節點提升為主節點。該過程往往是自動完成的。不過,由于應用程序在重新指向新的節點時需要切換時間,因此服務有可能會出現中斷。可見,該模式雖然優于單節點的架構,但是仍非生產環境的完美部署方案。可以被配置主-被模式的數據庫包括:Oracle、SQL Server、MySQL、以及Postgres。
主-被模式的優點是:
- 在您簽署了主數據庫支持協議后,某些數據庫提供商會允許您免費地將其運行在被節點上,因此該模式仍然具有一定的成本效益。
- 相比單節點架構,該模式提供了更好的HA能力。
主-被模式的缺點是:
- 既然增加了被節點,那么它必然需要跑在相應的硬件、或虛擬資源上,那么您將不得不為此支付額外的費用。而且,它們只會在發生災難或故障時,才會被用到。
- 由于在發生故障時,所有服務器都需要重新同步,才能統一為主-被配置,因此其運維的成本較高。
多主模式
單個站點上的多活模式
在這個模式中,集群中的所有節點,都可以同時進行讀寫操作。由于在多個活動的集群中,所有節點都是平等的,因此它們沒有了所謂主節點和被節點的概念。據此,您不但擁有可控的HA和DR功能,而且還具有可以輕松擴展的固有能力。目前,可以被部署為此類模式的數據庫包括:CockroachDB、Cassandra以及Couchbase。
多主模式的優點是:
- 無論是讀取還是寫入操作,都具有可擴展性。
- 其高可用性體現在系統執行升級和修補等維護任務時,不會產生任何停機。
- 由于所有節點一直都處于活躍且被使用的狀態,因此它們在資源利用率方面具有較高的成本效益。雖然由此會產生更高的預購許可證的相關成本,但是該方案在市場上最具有成本效益。
- 可以達到RPO(恢復數據點目標)為 0,而RTO(恢復時間目標)<10秒。
多主模式的缺點是:
- 由于會導致網絡流量的翻倍增加,因此該解決方案往往會影響到系統的整體性能。不過,這對于單個站點而言影響甚微,畢竟其網絡速度非常快,帶寬也很大。
- 諸如Cassandra之類的技術往往需要定期的維護工作。也就是說,在完成了恢復操作之后,應復查并確保所有節點上的數據,被已完成復制、且保持一致。
總體而言,在單個站點上進行數據庫部署的總體缺點在于,它無法應對整個站點或區域的中斷情況。對此,我們往往需要用到下面將要討論到的多個站點部署的模式。
多個站點上的多活模式
多站點模式主要體現在不同的節點分布在不同的站點或區域中。如果我們需要通過在線狀態監測的方式,及時發現掉線的站點或區域,那么該部署模式則非常適合。也就是說,與單個站點的部署相比,多個站點部署的最大優勢在于,您可以在某個或某幾個區域性數據中心、或站點出現中斷時,仍然可以提供原有的數據服務。
如前所述,在單個站點中,多主與主-被模式有著許多相似的優缺點。但是,對于多個站點而言,我們應當更多地考慮以下兩個方面:
- 網絡延遲 - 由于各個站點通常是通過在地理上分散性,來提高服務的魯棒性,因此,由此帶來的網絡延遲,往往會影響到應用程序的響應時間。不過,諸如CockroachDB之類的數據庫會允許您使用其地理分區(Geo-Partitioning)的功能,來管控部分延遲的現象。您可以通過閱讀鏈接--https://www.cockroachlabs.com/docs/v19.1/demo-geo-partitioning,來了解更多相關內容。當然,您也必須為保持區域性數據中心的魯棒性,而承擔相應的貨幣成本。
- DR — 您必須為集群內的所有節點實施備份,而不僅僅只是為了單個節點的主-被方案。
當然,您可以根據應用的實際需求,選用其他更為可靠的解決方案。
小結
正如我們在上述每一種部署方案的優缺點中所介紹的那樣,無論您選擇的哪一種解決方案,都需要考慮和滿足應用業務的連續性(如HA和DR)、總體擁有成本(完整的TCO,不僅包括前期的構建支出,還包含了運維與中斷所產生的成本)、以及性能上的綜合需求。
原文標題:Active-Passive vs Multi-Active Database Topologies,作者:Daniel Holt
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】