【数据库09】数据库系统体系结构
前 言
🍉 作者簡介:半舊518,長跑型選手,立志堅持寫10年博客,專注于java后端
?專欄簡介:相當硬核,黑皮書《數據庫系統概念》讀書筆記,講解:
1.數據庫系統的基本概念(數據庫設計過程、關系型數據庫理論、數據庫應用的設計與開發…)
2.大數據分析(大數據存儲系統,鍵值存儲,Nosql系統,MapReduce,Apache Spark,流數據和圖數據庫等…)
3.數據庫系統的實現技術(數據存儲結構,緩沖區管理,索引結構,查詢執行算法,查詢優化算法,事務的原子性、一致性、隔離型、持久性等基本概念,并發控制與故障恢復技術…)
4.并行和分布式數據庫(集中式、客戶-服務器、并行和分布式,基于云系統的計算機體系結構…)
5.更多數據庫高級主題(LSM樹及其變種、位圖索引、空間索引、動態散列等索引結構的拓展,高級應用開發中的性能調整,應用程序移植和標準化,數據庫與區塊鏈等…)
🌰 文章簡介:概述在服務器系統上運行的數據庫系統的體系結構,這些體系結構用于集中式和客戶-服務器體系結構中。然后概述并行計算機體系結構,以及為不同類型的并行計算機設計的并行數據庫體系結構。最后概述分布式數據系統構建中的體系結構問題。
文章目錄
- 1.概述
- 2.集中式數據庫系統
- 3.服務器系統體系結構
- 3.1 事務服務器體系結構
- 3.2 數據服務器與數據存儲系統
- 3.3 客戶端高速緩存
- 4.并行系統
- 4.1 并行數據庫的動機
- 4.2 并行系統的性能度量
- 4.3 互連網絡
- 4.4 并行數據庫體系結構
- 4.5 共享內存
- 4.5.1 共享內存體系結構
- 4.5.2 高速緩存一致性
- 4.6 共享磁盤
- 4.7 無共享
- 4.8 層次
- 5.分布式系統
- 6.并行和分布式系統中的事務處理
- 7.基于云的服務
- 7.1 云服務模型
1.概述
最早的數據庫是在單臺支持多任務的物理機器上運行的,這種集中式的數據庫系統仍然在被廣泛使用,如今在集中式數據庫系統上運行的企業級應用可能擁有成千上萬的用戶,數據庫的規模從兆字節到數百G字節不等。
并行數據庫系統(paraller data system)是上世紀80年代末開始開發的,用在大量計算機上并行執行任務,它是為處理高端企業應用而開發的,用于在大量計算機并行執行任務。
并行數據存儲系統(paraller data storage system)主要被設計用于存儲和檢索基于碼的數據,與并行數據庫不同,數據庫存儲系統通常對事務提供非常有限的支持,而且它們缺乏對聲明性查詢的支持。另外,這樣的系統能夠在非常多的機器(成千上萬)上并行運行,這是大多數并行數據庫無法處理的規模。
此外,數據通常在不同的數據庫上生成和存儲,從而需要跨多個數據庫執行查詢和更新事務,這導致了分布式數據庫系統的發展。分布式數據庫環境中開發的容錯技術在確保大規模并行數據庫和數據存儲系統的可靠性和可用性。
2.集中式數據庫系統
集中式數據庫系統是運行在單個計算機系統上的系統,這些數據庫系統應用很廣,既有單用戶系統,又有多用戶系統。集中式數據庫系統廣泛應用于企業級應用。
使用計算機通常有兩種方式:作為單用戶系統和作為多用戶系統。智能手機和個人電腦屬于第一類。典型的單用戶系統(single user system)是由單個人使用的系統,通常只有一個處理器(一般有多個核)、一個或兩個磁盤。典型的多用戶系統有多個磁盤、多個處理器和大量內存。這種系統為大量與遠程用戶連接的用戶服務,因此被稱為服務器系統(server system)
為單用戶系統設計的系統一般不提供多用戶數據庫系統所提供的的許多功能,特別是,它可能只支持非常簡單的并發控制方案,因為對數據庫進行高并發訪問基本是不太可能的。支持弱的故障恢復(更新前備份)或者不支持。可能不支持SQL,而是提供用于數據訪問的API。因為通常被設計來鏈接到單個應用程序,只能從該應用程序訪問,因此,這些系統被稱為嵌入式數據庫
多數據庫系統支持之前章節學習到的全部事務特性,被稱為服務器。
如今我們使用的大多數通用計算機系統都有幾個多核處理器(通常是1-4個),每個多核處理器有幾個核(通常是4-8個)。主存在所有處理器之間共享。具有這樣少量的核和共享內存的并行被稱為粗粒度并行(coarse-grained parallelism)
在單處理器系統上運行的操作系統支持多任務,允許多個進程以分時方式運行在同一個處理器上,因此,不同進程的動作可能是交錯的。為單處理器機器設計的數據庫長期以來一直被設計為允許多個進程或線程并發訪問共享的數據庫結構。因此,在處理真正并行運行的多個進程時的許多問題(例如對數據的并發訪問)已經有為單處理器機器設計的數據庫解決。其結果是,為分時的單處理器機器設計的數據庫系統可以相對容易的在粗粒度并行系統上運行。
在粗粒度并行機器上運行的數據庫通常不會嘗試將單個查詢劃分給多個處理器,而是將每個查詢運行在單個處理器上,允許多個查詢并發執行。因此,這樣的系統支持更高的吞吐量,也就是說,允許每秒運行更多的事務,盡管單個事務不會運行得更快。近年來,甚至連移動電話都開始支持多核,粗粒度并行系統也在不斷演進,以支持對單個查詢的并行處理。
細粒度并行(fine-grained parallelism)的機器擁有大量的處理器,在這類機器上運行的數據庫系統視圖對用于提交的單個任務(例如查詢)進行并行化。
總的來說,并行性已經成為軟件系統設計的一個關鍵問題,第4節將介紹并行數據庫系統的體系結構。
3.服務器系統體系結構
服務器系統可以大致分為事務服務器和數據服務器。
3.1 事務服務器體系結構
事務服務器系統也被稱為查詢服務器,它提供接口,客戶端通過向該接口發送請求來執行操作,服務器將執行結果返回給客戶端。迄今為止,相對于數據服務器系統結構,事務服務器體系結構應用更加廣泛。
當今典型的事務服務器系統有訪問共享內存的多個進程組成,如下圖,構成數據庫系統的組成部分的進程包括。
- 服務器進程。該進程接收用戶的查詢(事務),執行結果并返回。查詢可以來自用戶視圖或者運行嵌入式SQL的用戶進程,也可以是通過JDBC或者ODBC將其提交到服務器進程。有些數據庫對每個用戶使用一個單獨的數據庫進程,有些數據庫會對所有用戶使用一個數據庫進程,但是使用多個線程來讓查詢并發執行。許多數據庫系統使用混合體系結構,具有多個進程、每個進程運行多個線程。
- 鎖管理進程。實現鎖管理功能,包括鎖授予、鎖釋放和死鎖檢測。
- 數據庫寫進程。一個或者多個進程不斷地將修改過的緩沖塊輸出到磁盤。
- 日志寫進程。服務器進程會將日志簡單的輸出到日志緩沖區,如果需要強制輸出日志,日志寫進程會將日志記錄從緩沖區輸出到穩定的存儲器。
- 檢查點進程。定期執行檢查點操作。(檢查點:實現介質恢復時將以最近的checkpoint為執行事務前滾的參照點)
- 進程監控進程。
共享內存包含所有的共享數據。 - 緩沖池
- 高速緩存的查詢計劃。它在同一個查詢再次被提交時可以復用。
- 鎖表。
- 日志緩沖區。包含待輸出到穩定存儲器上的日志記錄。
由于多個進程可以訪問數據庫,必須設計一種機制確保互斥,即同一時刻最多有一個進程來修改共享內存中的數據結構,且當數據結構被寫時不能有進程讀。
可以通過操作系統的信號量實現互斥,但是使用計算機硬件所支持的原子操作指令(atomic instruction)開銷更小。比如compare-and-swap或者test-and-set。
原子指令的實現機制一般是在cpu的互聯網絡中實現一個全局的原子寄存器,所有cpu對這個原子寄存器的訪問是互斥的。cpu使用原子指令申請訪問原子寄存器時,互聯網絡會對所有CPU進行仲裁,確保只有一個cpu可以獲得對原子寄存器的訪問權;如果有cpu獲得了原子寄存器訪問權,其他cpu必須等待該cpu釋放權限才能繼續執行。
原文鏈接:https://blog.csdn.net/qianniuwei321/article/details/124817265
注意原子操作指令可以用于互斥,但是這僅相當于支持排它鎖,不支持共享鎖,不能夠直接用于實現數據庫中通用的鎖,但是原子操作指令可以用于實現短時間的鎖,也稱為閂(shuuan)鎖,以用于數據庫中的互斥。
共享鎖與排它鎖
1.共享鎖,又稱之為讀鎖,簡稱S鎖,當事務對數據加上讀鎖后,其他事務只能對該數據加讀鎖,不能做任何修改操作,也就是不能添加寫鎖。只有當數據上的讀鎖被釋放后,其他事務才能對其添加寫鎖。共享鎖主要是為了支持并發的讀取數據而出現的,讀取數據時,不允許其他事務對當前數據進行修改操作,從而避免”不可重讀”的問題的出現。
2.排它鎖,又稱之為寫鎖,簡稱X鎖,當事務對數據加上寫鎖后,其他事務既不能對該數據添加讀寫,也不能對該數據添加寫鎖,寫鎖與其他鎖都是互斥的。只有當前數據寫鎖被釋放后,其他事務才能對其添加寫鎖或者是讀鎖。寫鎖主要是為了解決在修改數據時,不允許其他事務對當前數據進行修改和讀取操作,從而可以有效避免”臟讀”問題的產生。
為了避免消息傳遞帶來的開銷,許多數據庫系統直接更新共享內存的鎖表(鎖表如下圖),而不是向鎖管理器進程發送鎖消息。
進程必須保證對鎖表訪問互斥,這通常是通過獲取鎖表上的互斥鎖完成的,方法是在代表鎖表的鎖的內存位置上使用test-and-set或compare-and-swap指令。
通過直接更新共享內存中鎖表的方式,可以按以下步驟執行希望獲得鎖的事務。
1.獲取鎖表上的互斥鎖(閂鎖)
2.檢查是否可以分配請求的鎖,如果可以,則更新鎖表以表示已分配鎖,否則,更新鎖表以表示鎖請求在該鎖的隊列中
3.釋放表上的互斥鎖。
如果由于鎖沖突而無法立即獲取鎖,則事務可以定期讀取鎖表,檢查是否有鎖釋放可以將鎖分配給它。這個過程是:
1.獲得鎖表上的互斥鎖
2.對于即將被釋放的鎖,從鎖表中刪除其記錄項。
3.如果有任何其他掛起的鎖請求該數據項,且鎖可以分配給該請求,鎖表將被更新以將這些請求標記為已分配。
4.釋放表上的互斥鎖。
為了避免對鎖表進行不必要的重復檢查,鎖請求代碼可以使用操作系統的信號量來等待鎖授予的通知,然后,鎖釋放代碼必須使用信號量機制通知等待事務其鎖已經被授予。
即使系統是通過共享內存來處理鎖的請求的,也仍然使用鎖管理器進程進行死鎖檢測。
3.2 數據服務器與數據存儲系統
數據服務器系統允許客戶端以文件、頁面或對象發送讀取或更新數據的請求,從而與服務器進行交互。例如,文件服務器提供一個文件系統接口,客戶端可以在其中創建、更新、讀取和刪除文件。同時,數據服務器系統提供對于小于文件大小的數據單元的支持,比如頁面元組或者對象。還提供索引工具和事務工具,以保證數據在客戶端或者進程故障時數據不會處于不一致的狀態。數據服務器系統被廣泛應用于處理網絡規模的流量。
數據服務器最初是允許程序員使用面向對象數據庫訪問設計而開發的,面向對象允許程序員使用允許創建、檢索和更新持久對象的編程語言。
面向對象數據庫的許多目標應用都需要對檢索到的設計軟件進行大量的計算,比如CAD軟件可以存儲計算機芯片或者建筑物的模型,進行仿真等,這在CPU上的代價是很大的。
如果將所有計算都放在服務端,那么服務器就會過載。相反,這種情況下將數據存儲在單獨的數據服務器上,在需要時將數據提取到客戶端,由客戶端執行計算,將更新后的數據存儲回服務器。
已經開發了許多并行數據存儲系統來處理大量的數據和事務。這樣的系統不必支持SQL,而是僅僅用于存儲、檢索和更新數據項的API。存儲在此類系統的數據項可以是元組,也可以是JSON或XML等格式表示的對象,甚至可以是文件或文檔。
我們使用術語數據項來指代元組、對象、文件或文檔,也交替使用術語數據服務器和數據存儲系統。
早期存儲系統中的數據服務器支持頁面傳送,如今不再支持,因為存儲系統不應該向客戶端公開底層的存儲布局。
3.3 客戶端高速緩存
客戶端與服務端通信相比本地內存引用的時間代價是很高的。
客戶端可以采取優化策略來減少網絡延遲(network-latency,指在網絡上發消息得到響應的時間)的影響。數據庫系統也可以采取同樣的策略。
- 預取。當一個數據項被請求時,同時發送可能在不久的將來使用的其他數據項。
- 數據高速緩存。在單個事務范圍內或者事務完成后,都可以將數據緩存在客戶端。但是高速緩存一致性(cache coherecy)是一個值得關注的問題,可能服務器的數據已經被其他客戶端更新了,而本地客戶端與其不一致。
- 鎖高速緩存。如果數據的使用主要是在客戶端之間進行劃分的,而客戶端很少請求其他客戶端也請求的數據項,可以將鎖也在客戶端高速緩存。假設客戶端在高速緩存中找到一個數據項,并且它還找到訪問該數據項所需要的鎖,那么就可以在不與服務器進行任何通信的情況下繼續進行該訪問,但是服務器必須跟蹤被高速緩存的鎖,如果客戶端向服務器請求鎖,服務器必須從高速緩存該鎖的任何其他客戶端回調數據項上的所有沖突鎖。如果考慮機器故障,此任務變得更加復雜。
- 自適應鎖粒度。如果一個事務需要對事務中的多個數據項加鎖,并且獲取每個鎖都需要與數據服務器進行往返通信,則該事務在鎖的獲取上會浪費大量時間。這種情況下可以使用多粒度鎖來避免多重請求。例如,一個頁面中存儲了多個數據項,那么單個的頁面鎖較于多個數據項鎖更敏捷。但是鎖爭用較多的情況下,獲取粗粒度鎖會顯著影響并發度。鎖降級是在出現高爭用是自適應降低鎖粒度的方式。
4.并行系統
4.1 并行數據庫的動機
萬維網發展創造了許多網站,瀏覽器收集到的數據越來越多,過去的集中式數據庫系統已經不足以處理此類應用。
4.2 并行系統的性能度量
數據庫系統的衡量指標主要是兩個:
- 吞吐量。
- 響應時間。
對應地,并行研究的兩個重要問題是:加速比(更短時間運行一個任務)和擴展比(并行運行更多的任務數)。
如下圖,為執行一個大型任務擴展cpu、磁盤等資源,假如資源增長N倍。其并行性也增長N倍,則稱為線性加速比,否則稱為亞線性加速比。
同樣地,如果給定N倍的任務規模,擴大N倍的資源,其執行任務時間不變,則稱為線性擴展比,否則為亞線性擴展比。
根據對問題規模的度量方式不同,并行系統的擴展比分為兩種:
- 批量型擴展比。數據庫的任務是運行時間依賴于數據庫規模的大型作業。比如掃描與數據庫規模成比例的關系。
- 對事務型擴展比,數據庫的事務提交率增加,并且數據庫規模的增長與事務率稱正比。這類擴展比適用于的事務是小更新類的事務處理系統,比如銀行的存款和取款。
下面這些因素影響并行操作的效率,并且可能同時降低加速比與擴展比。
- 串行計算,有些任務必須要串行執行。
- 干擾,并行系統中進程經常訪問共享資源,因此當它們競爭共同持有資源時(如系統總線、共享磁盤、甚至鎖),會使速度降低。
- 傾斜。將單項任務分解為多個并行步驟來減少平均步驟的規則,很難分成均等部分,運行速度會取決于最慢的步驟的服務時間。
- 啟動代價,進程初始化需要相對應的啟動代價。
4.3 互連網絡
并行系統包括一套組件(處理器、存儲器和磁盤),這些組件通過互連網絡(interconnenction network)進行通信,下圖顯示了常見的互連網絡類型。
- 總線。如圖a,所有組件通過一根通信總線來收發數據。早期把它用于多個節點的互連,但總線在同一時間只能夠處理一個組件的通信,這太不利于擴展了,現在甚至單個節點都采用環或網格互連機制了,因此總線方式不太主流了。
- 環。組件按環狀互連。這樣彼此之間可以并發通信,但是可能一個消息需要通過n/2個鏈接,而且節點越多,傳輸延遲越大。
- 網格。組件通過網格互聯,圖c是二維網格,一個組件最多與四個組件相連,對三維網格來說,一個組件最多與六個組件相連。網格互連用于將處理器中的多個核或單臺服務器中的多個處理器相互連接。早期網格互連還用于節點互連,但是由于其節點越多,傳輸消息的鏈接也越多,現在網格也不用與節點互連了。
- 超立方體。每個組件采用二進制編碼,如果節點的二進制編碼差一位,則互連。因此,n個組件采用超立方體連接,每個組件將與log(n)個節點互連。超立方體的通信延遲顯著低于立方體的通信延遲。
- 樹形拓撲。組件之間按照樹形拓撲互連。圖中e是三層樹形拓撲(tree-like topolopy)結構。
基本的樹形拓撲是,同一機架的數十臺機器通過機架頂部交換機互連,機架頂部交換機與聚合交換機相連接,以便多組機架之間可以進行互連,聚合交換機依次連接到核心交換機。這被稱為三層樹拓撲(tree topolopy)。
組織機構的內部的局域網通常采用這種基本的樹形結構,不過如果一個機架中的多臺機器試圖與來自其他機架的機器進行大量數據的通信,那么機架之間的可用帶寬就會不夠。
為了避免樹形結構的帶寬瓶頸,數據中心通常將每個機架頂部(邊緣)交換機連接到多個聚合交換機,每個聚合交換機依次鏈接下一層的多臺核心交換機。這被稱為樹形拓撲(tree-like topolopy),這種結構增強了帶寬,并且使網絡具有容錯性。
三層樹形拓撲可以處理具有數萬臺機器的集群。三層樹形拓撲及其變體在現在得到了廣泛的應用,數據中心中復雜的互連網絡被稱為數據中心網絡。
網絡性能特別關鍵,網絡性能的一個關鍵是用于單個鏈路的網絡技術,流行的有:
- 以太網。當前網絡連接的主流技術是以太網技術,主要是1GB以太網和10GB以太網。
- 光纖通道。光纖通道協議標準被設計用于存儲系統和計算機之間的高速互連。
- 無限帶寬。無限帶寬標準為與數據中心的互連而設計,是專門為需要高帶寬低延遲的高性能計算應用而設計的。
什么是以太網技術?
以太網技術提供的規則允許網絡連接的設備相互通信,而無需相互通信。在口頭對話中,當兩個人同時說話時,每個人都可能難以理解對方在說什么。例如,當 10 個人同時說話時,這種情況就會被放大。想象一下一次 100 或 1000 個。
數據網絡也是如此。如果共享網絡上的兩個或多個連接的設備嘗試同時傳輸數據包,則會發生數據包沖突。構成數據包的電脈沖或光子在通過共享銅纜或光纜同時發送時重疊。
以太網旨在解決數據包沖突問題。它為網絡設備提供了一套規則,基本上是說:“在你說話之前,確保沒有其他人在說話。如果你在說話時聽到有人說話,停下來,聽,等談話結束再說話。
關于無限帶寬技術可以參考:Infiniband技術簡介
一種用于降低延遲的重要技術是允許應用程序繞過操作系統直接與硬件接口,來收發消息。這會大大減少通信延遲。還可以采用遠程直接內存訪問(Remote Direct Memory Acess,RDMA),一種允許一個節點的進程直接讀取另一個節點的內存的技術減少延遲。
4.4 并行數據庫體系結構
并行數據庫有若干種體系結構模型,其中下圖是最重要的幾種,其中M表示內存,P表示處理器,圓柱體表示磁盤。
- 共享內存。所有處理器共享一個公共的內存
- 共享磁盤。一組節點共享一組公共的磁盤,每個節點都有單獨的處理器和內存,共享磁盤系統有時候又被稱作集群。
- 無共享。一組節點既不共享公共的內存,也不共享磁盤。
- 層次。這種模型是前三種的混合,是當前使用最廣泛的模型。
4.5 共享內存
在共享內存體系結構中,處理器可以訪問公共內存,這使得進程間通信變得特別高效,因為只需要把內容寫到共享內存其他進程就可以“看到”。磁盤也被共享。
多核處理器現在迅猛發展,一個芯片上可以有若干個處理器,為了與傳統意義上的處理器區分開,我們將片上處理器稱為核。低成本多核處理器使得共享內存的并行處理越來越重要。
4.5.1 共享內存體系結構
早期的共享內存體系結構通過總線將處理器和內存互連。
這樣無疑會造成擴展上的瓶頸。現代內存共享結構每個處理器都有本地連接的內存,并且可以訪問其他處理器關聯的內存。由于訪問本地內存和其它處理器內存的速度差異,被稱為非統一內存體系結構(Non-Uniform Memory Architecture,NUMA)。
由于共享內存體系需要在核與核之間和處理器之間互連,其規模限制為最多幾百個核。
由于高速緩存比主存快的多,因此共享內存體系也加入了高速緩存,如果需要對不在高速緩存中的數據項訪問,需要從主存提取,稱為高速緩存未命中(cache miss).
許多處理器體系結構支持超線程(hyper-threading),或稱為硬件線程(hardware threading)的功能,其中單個物理核可以劃分為多個邏輯核,當一個邏輯核緩存未命中時,同一物理核的其他邏輯核可以開始工作,不至于等待從主存中提取數據而陷入空閑狀態。
典型的多核處理器具有多級緩存,其中L1最快,但也最小,其他級別同理。L1,L2為核的本地緩存,L3被多核共享。數據以高速緩存行(cache line,通常為64個連續字節)為單位讀寫到高速緩存。
4.5.2 高速緩存一致性
只要存在多個核或者多處理器,每個核擁有自己的本地高速緩存,就可能出現高速緩存不一致(cache coherency)的問題。比如core0的本地緩存更新,但是core2中維護的還是同一內存地址的舊值。因此,當內存位置發生更新時,要確保該內存位置的副本都失效。
許多處理器體系結構中,內存失效從傳輸到執行會存在延遲,可能導致從一個處理器寫入,但是在另一個處理器中讀時無法讀到更新。
這會導致問題,現代處理器支持內存屏障(memory barrier)指令,它確保了屏障之前的加載/存儲操作與屏障之后的加載/存儲操作之間的特定順序。用通俗的話解釋就是,它可以保證在之前的高速緩存失效前,讓處理器等一等,直到確保接收到的作廢消息已經被應用。
值得高興的是,寫程序是不需要包含任何額外的代碼來處理高速緩存的一致性,只需要在訪問數據之前獲取鎖,在訪問數據之后釋放鎖即可。因為鎖的獲取與釋放過程中就包括了所需的內存屏障指令。各種語言支持的同步原語也在內部執行內存屏障指令。
許多處理器體系還支持硬件級別的共享鎖和排他鎖來確保高速緩存的一致性,這比軟件更高效,其中MESI協議是一種廣泛使用的協議。緩存一致性協議通過監控獨立的loads和stores指令來監控緩存同步沖突,并確保不同的處理器對于共享內存的狀態有一致性的看法。當一個處理器loads或stores一個內存地址a時,它會在bus總線上廣播該請求,其他的處理器和主內存都會監聽總線(也稱為snooping)。
MESI原理可以參考:緩存一致性協議(MESI)——緩存加鎖協議
原則上,可以確保基于這種鎖的高速緩存一致性協議具有"強"的高速緩存一致性,從而使得內存屏障指令冗余,然而,許多實現包含一些加速處理的優化,例如允許延遲傳遞無效的消息,但代價是不保證高速緩存的一致性,因此許多處理器體系結構需要內存屏障指令來確保高速緩存的一致性。
4.6 共享磁盤
共享磁盤系統模型中,一組節點共享一組公共的磁盤,每個節點都有單獨的處理器和內存。這種體系結構有兩個優點。共享磁盤系統可以擴展比共享內存系統更多的處理器。其次,它提供了一種經濟的容錯(fault ):如果一個節點發生故障,其他節點可以接管這個節點的任務,因為數據庫駐留在所有節點都可以訪問的磁盤上。
我們可以使用RAID來使磁盤子系統本身具有容錯性,即使單個磁盤發生故障,系統也可以正常工作;RAID還提供了一定程度的并行性。
存儲區域網SAN是一種高速局域網,可以將多個物理上磁盤陣列抽象稱一個邏輯磁盤,隱藏物理磁盤的復雜細節。邏輯磁盤還可以隨時擴展物理磁盤,處理節點可以像訪問本地磁盤一樣訪問磁盤。
存儲區域網通常具有冗余,例如節點之間有多條路徑,因此諸如鏈接或到網絡的連接這樣的組件故障,網絡還可以繼續工作。
存儲區域網非常適合構建共享磁盤系統。適用于對并發要求低但是對可靠性要求高的應用。
與共享內存系統相比,共享磁盤系統可以擴展更多的處理器,但是其網絡通信較慢。
共享磁盤系統到網絡連接的帶寬小于本地存儲器的可用帶寬,因此存儲器的訪問可能成為瓶頸,限制了可擴展性。
4.7 無共享
無共享系統。一組節點既不共享公共的內存,也不共享磁盤。節點之間通過高速互連的網絡進行通信。由于無共享模型的磁盤訪問由本地磁盤提供,克服了所有I/O通過單個互連網絡的缺點。
此外,無共享系統的互連網絡(如樹形互連網絡),通常被設計成為可擴展的,因此其傳輸容量會隨著節點的增加而增加,因此,無共享網絡更具有可擴展性,并可以輕松支持大量的節點。
無共享系統的主要缺點是本地磁盤和通信的成本更高、由于具有很高的擴展性,無共享體系結構被廣泛用于處理非常大的數據量,支持對數千個節點或者極端情況下甚至數萬個節點的可擴展性。
4.8 層次
層次模型是前三種的混合,是當前使用最廣泛的模型。在頂層,系統由通過互連網絡的無共享節點組成,因此其頂層是無共享體系結構。每個節點實際上是一個共享內存結構。或者可以是三層結構,頂層是無共享結構,底層是共享內存結構,中間還有一層是共享磁盤的體系結構。
當今的并行數據庫系統通常運行在層次體系結構上,其中每個節點都支持共享內存的并行性,多個節點以無共享方式互連。
5.分布式系統
在分布式數據庫系統中,數據存儲在節點中,節點分布在地理上分散的站點上,它們不共享內存和磁盤,其結構如下。
無共享的并行數據庫和分布式數據庫的主要區別如下。
- 分布式數據庫具有在地理位置上分散的站點,因此分布式的網絡連接具有更低的帶寬,更高的延遲和更大的故障概率。
- 并行數據庫無法保證諸如自然災害等導致數據中心故障時的系統可用性,但分布式可用。
- 分布式數據庫可以單獨管理,每個站點具有一定的自主權。許多分布式數據庫其實是通過集成多個數據庫構建的,這樣可以允許查詢和事務跨數據庫邊界。不過為了跨地理站點而構建的分布式數據庫可能是集中式管理的。
- 分布式數據庫中的節點往往在規模和功能上差異更大。
- 分布式數據庫區分局部事務和全局事務,局部事務是僅從啟動事務的節點訪問數據的事務,全局事務要么從啟動節點外的單個節點訪問數據,要么則跨多個節點訪問數據。
如今的web級應用運行在數據管理系統上,結合了并行性和分布式的支持,并行性保證高負載的支持,分布式則保證高可用。這種系統的一個特點是集中式管理。
相反,通過集成現有數據庫系統構建的分布式數據庫具有一些不同的特性。
- 共享數據。比如一個校園中的用戶可以訪問另外一個校園中的數據。
- 自治。
在同構分布式數據庫系統中,節點共享一個通用的全局模式,所有節點都運行同一個分布式數據庫管理軟件,并且節點在處理事務和查詢時積極合作。相反地,將多個已經存在的數據庫系統鏈接在一起構成分布式數據庫,每個數據庫系統都有自己的模式,自己的數據庫管理系統,稱為聯邦數據庫系統或異構分布式數據庫系統
分布式數據庫的節點通過廣域網進行通信,帶寬昂貴且低速。網絡故障可能會導致節點無法通信,即網絡分區,影響系統的可用性。
6.并行和分布式系統中的事務處理
事務的原子性是構建并行和分布式數據庫系統時的一個重要問題。如果事務跨兩個節點,可能出現一個節點上提交事務,另一個節點上棄用事務的不一致情行。事務提交協議用來避免這樣的情況,其中2PC(two-Phase commit Protocol)是最廣泛的協議。
2PC協議的核心思想是,每個節點執行事務,直到事務進入部分提交狀態,此時選擇一個節點作為決策節點,該節點進入ready狀態,當所有節點都ready以后,同一執行事務的提交,如果有節點出現故障,則決策節點同一執行中止或者恢復提交策略。
并發控制是并行和分布式系統的另一個關鍵問題,多個節點的事務管理器可能需要跨節點合作,如果使用封鎖,可以在包含被訪問數據項的本地執行封鎖,但是涉及原子多個節點的事務也可能出現死鎖。因此,死鎖檢測需要跨多個節點進行。
分布式的故障更常見,因為除了計算機故障,網絡還可能故障。數據項的復制是分布式數據庫在發生故障時運行的關鍵。這會使得并發控制進一步復雜化。
當要執行的任務很復雜,涉及到多個數據庫和與人的多次交互時,可以使用工作流管理系統。
7.基于云的服務
對很多企業來說,自己管理服務器很貴而且很麻煩,因此近幾年云計算變得很流行了,直接從云服務上購買云服務,包括硬件,甚至包括諸如數據庫等軟件。
7.1 云服務模型
利用云計算的方式有幾種,下圖是一個基礎設施即服務的模型。
- 基礎設施即服務模型
- 平臺即服務模型
- 軟件即服務模型
總結
以上是生活随笔為你收集整理的【数据库09】数据库系统体系结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows无法访问指定设备_微软为安
- 下一篇: 【C++】小猫钓鱼纸牌游戏--C++实现