云計算與大數據進階 | 26、解鎖云架構核心:深度解析可擴展數據庫的5大策略與挑戰(上)

在云應用/服務的 5 層架構里,數據庫服務層穩坐第 4 把交椅,堪稱其中的 “硬核擔當”。它的復雜程度常常讓人望而生畏,不少人都將它視為整個架構中的 “終極挑戰”。

不過,也有人覺得可擴展存儲系統才是最難啃的 “硬骨頭”,其實這場關于誰更復雜的爭論沒有標準答案,很大程度上取決于具體的業務應用模式(就可擴展存儲系統,老夫打算在后續的文章中具體再聊)。

對于那些涉及復雜交易處理的應用來說,數據庫服務層實現面臨的挑戰難度顯然更高,每一次數據的讀寫、每一個事務的處理,都像是在走鋼絲,稍有不慎就可能引發數據混亂、系統崩潰等嚴重問題,實現過程中的挑戰難度堪稱地獄級別。

但如果是單純處理海量數據的簡單事件應用,數據庫服務層反而顯得有些 “多余”,這時候,云存儲層搖身一變,就成為了整個系統的 “難點 C 位”,承擔起了更為復雜的任務。

數據庫擴展大體有縱向擴展主仆讀代理模式主–主模式分區模式分布式共識模式5類解決方案。這些方案共同構成了可擴展數據庫的 “魔法寶典”,助力企業在數據的海洋中乘風破浪。

(1)縱向擴展

在數據庫擴展的工具箱里,縱向擴展就像是給系統注入一劑強化針。它最直觀的方式,是對硬件配置大刀闊斧地升級 —— 換上更強勁的 CPU、擴充海量內存、搭載讀寫速度更快的存儲設備,如同給數據庫系統裝上超級引擎,讓數據處理的吞吐量直線飆升。

同時,縱向擴展也在軟件層面持續發力。以表結構優化為例,它會巧妙運用索引,讓系統能快速定位數據;極力避免多表間復雜的關聯查詢,減少系統的運算負擔。這種軟硬件協同優化的方式,曾是第二平臺應用擴展的黃金法則,在當時的技術環境下屢試不爽。

然而在第三平臺云應用時代,縱向擴展就顯得有些力不從心了。云應用龐大的用戶規模與爆發式增長的數據需求,僅靠縱向擴展的單打獨斗,根本無法滿足日益嚴苛的可擴展性要求,逐漸在新的技術舞臺上退居幕后 。

(2)主仆讀代理模式

數據庫服務層的橫向擴展方法有多種,其中最基礎(簡潔)的是主-仆模式,如圖1所示。

圖1:?數據庫橫向擴展之主-仆模式

主-仆模式通常由一個Master(主)節點“挑大梁”,包攬所有數據的讀寫操作,同時配備一個或多個 Slave(仆)節點組成 “輔助小隊”,專門負責數據的只讀任務。

這樣的設計和分工相當巧妙,相當于給數據讀取能力裝上了“加速器”,數倍提升讀取效率,而主節點卸下部分讀負載后,寫操作的處理也更加游刃有余。我們知道大多數數據庫系統讀操作的數量遠遠超過寫操作(如更改、刪除、添加)的數量,因此讀操作的加快能有效解決這類系統的效能瓶頸,讓系統運行更加絲滑流暢。

主 - 仆模式能高效運轉的關鍵在于 “單點寫入” 的設計智慧。樣的設計只讓主節點執行寫操作,就像給數據管理立下了一個唯一指揮權的規矩,這就從根源上規避了多點同時寫入引發的數據同步混亂。

不過,主節點在完成寫操作后,還得肩負起數據搬運工的重任,及時將更新的數據同步到各個只讀節點。這就好比一場數據接力賽,要求主仆節點之間必須搭建起高帶寬、低時延,否則一旦數據復制延遲,就會出現數據讀取與寫入 “對不上號” 的尷尬局面。

通常來說,為了讓這個架構發揮最大威力,工程師們往往會在主 - 仆數據庫架構中安插負載均衡組件。它就相當于一名智能調度員,可以精準分配數據讀取任務,確保每個 Slave 節點都能物盡其用。

值得注意的是,這一層的負載均衡操作主要集中在 TCP/UDP 層,并且常常基于定制的數據庫通信協議展開,和應用服務層常見的標準 HTTP (S) 負載均衡大不相同,堪稱數據庫橫向擴展里的專屬秘籍。

(3)主-主模式

前面咱們通過主-仆模式解決了系統讀操作可擴展難題,那么,可寫操作的 “擴容困境” 該怎么破呢?答案是確切的——有,只不過要攻克的復雜度會高很多。

回顧之前的章節中我們討論過的CAP理論,在強一致性的數據庫系統(ACID 系統)里,數據一致性就是一條金線,不可動搖。

因此,這類系統最大的挑戰是如何保證各節點間所采用的架構能實現數據一致性。

但讓多個節點同時支持并發讀寫,就像在數據王國里打開了 “潘多拉魔盒”,稍有不慎就會引發節點間的數據不一致危機。這類系統的終極挑戰,就像在刀尖上跳平衡舞 —— 既要讓寫操作能橫向擴展,又得像精密齒輪般確保所有節點的數據嚴絲合縫、毫無偏差。

強一致性的數據庫系統(ACID系統)強調CAP中的數據一致性,而多節點同時支持并發讀寫操作極易造成節點間出現數據非一致性,因此,這類系統最大的挑戰是如何保證各節點間所采用的架構能實現數據一致性——這類系統的終極挑戰,就像在刀尖上跳平衡舞 —— 既要讓寫操作能橫向擴展,又得像精密齒輪般確保所有節點的數據嚴絲合縫、毫無偏差。

要知道,多節點并發寫跟奏交響樂沒啥差別,每個節點的寫入動作都可能影響全局。如何設計出既能承載高并發寫操作,又能通過巧妙的架構(比如分布式共識算法、復雜的數據復制協議等)把一致性牢牢 “釘住”,簡直是對工程師創造力和耐心的雙重極限考驗。這時候的系統設計,不再是主 - 仆模式那樣的 “線性思維”,而是要構建一套如同精密鐘表般的復雜協作機制,讓每個寫操作都能在多節點間找到自己的時間刻度,最終拼成完整一致的數據表盤。

以下圖2為例,MySQL數據庫的多Master節點模式采取了環狀復制數據同步機制,就像搭建了一個緊密的接力環。在3個數據庫服務器集群中,數據同步形成了一條閉合的環形鏈路:

圖2:環狀復制的數據同步方式

  • 第一集群的 Master 節點先將更新數據同步給第二集群的對應 Slave 節點,此時第二集群的節點 “接棒” 后切換身份,以 Master 節點的角色將數據傳遞給第三集群的 Slave 節點
  • 第三集群的節點 “接力” 后同樣轉換為 Master,再將數據回傳給第一集群的同一節點,最終形成 “第一集群→第二集群→第三集群→第一集群” 的環形同步閉環。

這種設計的核心邏輯是用環型時序規避沖突。當多個節點需要同時更新數據時,環形鏈路為每個數據集分配了唯一的 “傳遞時區”—— 每個節點在環中只能按固定順序接收和發送數據,就像列車沿著固定軌道行駛,避免了多節點并發寫入同一目標時因 “路徑交叉” 導致的數據交集沖突。例如,若兩個節點同時向同一目標節點發送更新,環形機制會強制數據按順序通過鏈路流轉,確保后到達的數據能基于前序更新進行合并,而非直接覆蓋,從而從架構層面降低了數據不一致的風險。

不過,這種 “環形接力” 也需要付出代價:

  • 鏈路依賴強:任意一環的延遲或故障都會像 “多米諾骨牌” 一樣影響整個集群的同步效率;
  • 一致性延遲:數據需繞環一周才能完成全集群同步,在高并發場景下可能出現短期的節點間數據差異;
  • 復雜度躍升:相比主仆模式的單向同步,環形架構的拓撲管理、故障恢復機制需要更精細的設計,堪稱 “用架構復雜度換一致性保障” 的典型案例。

避免在多Master節點數據庫系統中發生數據一致性沖突的解決方法有以下4種:

①徹底避免多節點寫操作(這樣又回到了主-仆模式)?。

②在應用服務層邏輯上嚴格區分不同Master節點的寫入區域,確保它們之間無交集(如不出現同時間內更改同一行數據的操作)?。

③保證不同Master節點在不重疊的時間段內對同一區域進行操作。

④同步復制,所有節點會同時進行寫操作,且當所有節點完成后,整個操作才會返回。這種模式顯然對網絡帶寬的要求極高,并且為了滿足數據的一致性而犧牲了可用性。

以下圖所示的分布式數據庫為例,我們可以按表1設計數據庫CS中的表,以確保位于舊金山、紐約和達拉斯的Master節點可以同時完成寫操作,并且不會出現沖突。

提3:分布式數據庫
表1:3個Master節點避免寫入區域重疊的設計方法

?

今天先到此結束,下篇內容我們再敘分區模式和分布式共識兩種模式。88~

?(文/Ricky - HPC高性能計算與存儲專家、大數據專家、數據庫專家及學者)
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81149.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81149.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81149.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux——UDP/TCP協議理論

1. UDP協議 1.1 UDP協議格式 系統內的UDP協議結構體: 注1:UDP協議的報頭大小是確定的,為8字節 注2:可以通過報頭中,UDP長度將UDP協議的報頭和有效載荷分離,有效載荷將存儲到接收緩沖區中等待上層解析。 注…

考研復習全年規劃

25考研以330分成功上岸。 備考期間,我深知學習規劃的重要性,為大家精心整理了一份初試備考時間線任務規劃,希望能為正在備考的同學們提供參考。如果你對如何規劃學習路線仍感迷茫,不妨參考這份時間表,合理分配時間&…

PhpStudy | PhpStudy 環境配置 —— PhpStudy 目錄結構 環境變量配置 · Windows 篇

🌟想了解這個工具的其它相關筆記?看看這個:[網安工具] 服務器環境配置工具 —— PhpStudy 使用手冊 在前面的章節中,筆者詳細介紹了如何在 Windows 和 Linux 系統中安裝 PhpStudy,但可能會有崽崽在安裝完成后發現依舊…

DDS(數據分發服務) 和 P2P(點對點網絡) 的詳細對比

1. 核心特性對比 維度 DDS P2P 實時性 微秒級延遲,支持硬實時(如自動駕駛) 毫秒至秒級,依賴網絡環境(如文件傳輸) 架構 去中心化發布/訂閱模型,節點自主發現 完全去中心化,節…

java中XML的使用

文章目錄 什么是XML特點XML作用XML的編寫語法基本語法特殊字符編寫 約束XML的書寫格式DTD文檔schema文檔屬性命名空間XML命名空間的作用 解析XML的方法??DOM解析XMLDOM介紹DOM解析包:org.w3c.dom常用接口DOM解析包的使用保存XML文件添加DOM節點修改/刪除DOM節點 S…

Spring Boot異步任務失效的8大原因及解決方案

Spring Boot異步任務失效的8大原因及解決方案 摘要:在使用Spring Boot的@Async實現異步任務時,你是否遇到過異步不生效的問題?本文總結了8種常見的異步失效場景,并提供對應的解決方案,幫助你徹底解決異步任務失效的難題。 一、異步失效的常見場景 1. 未啟用異步支持 ? …

QT6 源(104)篇一:閱讀與注釋QAction,其是窗體菜單欄與工具欄里的菜單項,先給出屬性測試,再給出成員函數測試,最后給出信號函數的學習于舉例測試

(1) (2) (3)接著給出成員函數測試 : (4) 給個信號函數的舉例 : (5) 謝謝

visual studio生成動態庫DLL

visual studio生成動態庫DLL 創建動態庫工程 注意 #include “pch.h” 要放在上面 完成后點擊生成 創建一個控制臺項目 設置項目附加目錄為剛才創建的動態庫工程Dll1: 配置附加庫目錄: 配置動態庫的導入庫(.lib):鏈…

matlab多智能體網絡一致性研究

一個基于連續時間多智能體系統(Multi-Agent Systems, MAS)的一階一致性協議的MATLAB仿真代碼,包含網絡拓撲建模、一致性協議設計和收斂性分析。代碼支持固定拓撲和時變拓撲,適用于學術研究。 1. 基礎模型與代碼框架 (1) 網絡拓撲…

【omnet++】omnet++6.0.3中調用python

版本: omnet 6.0.3 Ubuntu 20.04.6 LTS omnet的installguide中對ubuntu版本是有要求的,找到對應版本下載即可 先安裝omnet再安裝anaconda omnet 6.0.3安裝 別在網上找教程了,官方的installguide手冊是最好的。按照手冊安裝一些依賴包后 so…

【C++】 —— 筆試刷題day_29

一、排序子序列 題目解析 一個數組的連續子序列,如果這個子序列是非遞增或者非遞減的;這個連續的子序列就是排序子序列。 現在給定一個數組,然后然我們判斷這個子序列可以劃分成多少個排序子序列。 例如:1 2 3 2 2 1 可以劃分成 …

UE RPG游戲開發練手 第二十七課 普通攻擊2

UE RPG游戲開發練手 第二十七課 普通攻擊2 1. 創建普通攻擊的蒙太奇動畫 2.打開4個蒙太奇動畫,修改插槽為FullBody,修改動畫速度 3.編輯動畫藍圖,插入FullBody插槽讓普通攻擊動畫得以播放 4. 編輯GA_LightAttack技能藍圖

MySQL——日志

undo log(回滾日志):引擎層生成的日志,實現了事務的原子性,用于事務回滾和MVCC。redo log(重做日志):引擎層生成的日志,實現了事務的持久性,用于非正常關閉的數據恢復。bin log(歸檔日志):Serve…

QML 動畫控制、順序動畫與并行動畫

目錄 引言相關閱讀基礎屬性說明工程結構示例代碼解析示例1:手動控制動畫(ControlledAnimation.qml)示例2:順序動畫(SequentialAnimationDemo.qml)示例3:并行動畫(ParallelAnimationD…

PowerShell 實現 conda 懶加載

問題 執行命令conda init powershell會在 profile.ps1中添加conda初始化的命令。 即使用戶不需要用到conda,也會初始化conda環境,拖慢PowerShell的啟動速度。 解決方案 本文展示了如何實現conda的懶加載,默認不加載conda環境,只…

R語言學習--Day03--數據清洗技巧

在一般情況下,我們都是在數據分析的需求前提下去選擇使用R語言。而實際上,數據分析里,百分之八十的工作,都是在數據清洗。并不只是我們平時會提到的異常值處理或者是整合格式,更多會涉及到將各種各樣的數據整合&#x…

谷歌地圖代理 | 使用 HTML 和矢量模式 API 更輕松地創建 Web 地圖

在過去的一年里,谷歌對 Maps JavaScript API 進行了兩項重要更新,以便更輕松地采用我們最新、最好的地圖:HTML 地圖和矢量模式 API。今天谷歌地圖亞太區最大代理商之一的 Cloud Ace云一 為大家介紹一下更新的具體內容。 聯系我們 - Cloud Ac…

WL-G4048 Multi-Port PCIe 4.0 Switch

系列文章目錄 文章目錄 系列文章目錄《WL-G4048 Multi-Port PCIe 4.0 Switch數據手冊》總結一、芯片介紹二、芯片規格介紹(一)功能指標(二)管理調試和監控(三)參考時鐘(四)系統復位 …

召回11:地理位置召回、作者召回、緩存召回

GeoHash 召回 屬于地理位置召回,用戶可能對附近發生的事情感興趣。GeoHash 是一種對經緯度的編碼,地圖上每個單位矩形的 GeoHash 的前幾位是相同的,GeoHash 編碼截取前幾位后,將相同編碼發布的內容按時間順序(先是時間…

高效批量合并Word文檔的工具介紹

軟件介紹 本文介紹一款專門用于批量合并Word文檔的工具,名為批量合并word工具。 使用方法與特點 如果需要將多個Word文檔合并到一個Word文檔中,就可以使用這款工具。使用前,需把要合并的Word文檔都放在名為“word”的文件夾下。 該軟件沒有…