㈠ 架構設計:文件服務存儲設計
在架構設計:文件服務的設計與實現一文中,通過實現一個文件服務來梳理了一個架構設計的一般流程,並得到如下靜態架構圖
本文繼續聊聊文件服務中的子模塊:「存儲模塊」的設計,包括:
前面的架構沒有對存儲進行特別設計,直接使用了本地存儲。考慮到後期文件數量可能會越來越多,本地存儲可能無法支撐,且本地存儲的安全性也沒有保障。為了便於後期擴展,需要對「存儲」部分進行設計。
存儲的方式有很多,本地存儲、NAS、分布式存儲,為了能支持不同的存儲方式,需要對「存儲模塊」進行抽象。考慮到「存儲模塊」涉及到IO,是一個相對底層的模塊。「上傳」這個核心模塊不能依賴於具體的存儲,所以這里也需要對其進行依賴反轉。
見紫色部分,UploadService調用了FileInfoRepository來存儲FileInfo,而FileInfoRepository是個介面,具體實現由存儲模塊中的實現類來實現。
我們先看本地存儲。最簡單的實現,就是直接使用IO將文件寫到對應的目錄下就可以了。但是,本地存儲會有如下幾個問題:
下面我們針對上面的問題,來一個個的解決。
首先,對於多租戶來說,在我們的架構中,實際對應的是Group,我們按照Group的不同,來劃分目錄即可。即 不同的租戶有不同的文件根目錄 ,後期某個租戶遷移時,直接遷移對應目錄即可。這也稍微解決了單目錄文件數量多的問題。
對於單目錄下,隨著文件數量的增加導致訪問速度下降的問題,我們該如何解決呢?
如果你做過分布式系統,那麼想一想, 我們是否可以把單目錄看成是一個伺服器,訪問目錄下的文件看成是一個個的請求呢 ?如果可以,那解決單目錄下訪問速度慢的問題是不是就變成了「如何解決單伺服器下,負載過高」的問題了?那解決服務端負載過高的方法是否適用於解決目錄訪問速度下降的問題呢?
我們從下面幾個方面來分析一下:
首先來看「解決服務端負載過高的方法」!答案很明顯: 分流+負載均衡 !
分布式服務的負載均衡有幾種方式呢?
再來看「目錄訪問和伺服器的區別」,雖然可以把目錄看成伺服器,但是兩者還是有區別的:
也就是說,對於目錄來說,我們不需要考慮創建成本。
那麼針對伺服器負載高的解決方案是否適合目錄訪問呢?或者哪種方式適合目錄訪問呢?我們一個個來分析:
可以看到,主要的問題就是創建目錄的問題!如何保證在目錄數量改變時,不需要調整程序呢?
實際上git已經給出了答案:
也就是說,根據sha1散列的前兩位對文件進行歸類。這樣既解決了目錄創建問題,也解決了文件分布問題。可能的問題是,「sha1散列2^80次,可能會發生一次碰撞」。這個問題對於一般文件系統來說,好像也沒有擔心的必要。
解決了「單目錄文件過多,導致訪問速度下降」的問題,我們來看下一個問題: 數據安全 。
文件數據是存放在電腦磁碟上的,如果硬碟損壞,可能導致文件的丟失。這實際還是一個「單點問題」!
「單點問題」的解決方案是什麼呢? 冗餘 啊!
最簡單的方案就是定時去備份數據,可以有如下幾種方案:
我們繼續一個個的討論。
首先是 人工備份 ,這是最low的方案,當然也是最簡單的,即有人定期去備份就行了。問題是時效性不高,例如一天備份一次,如果磁碟在備份前壞了,那就會丟失一天的數據。同時恢復比較耗時,需要人工處理。
第二個方案是 代碼實現 ,即在上傳文件時,程序就自動備份。以上面的架構為例,可以添加一個BackupListener,當上傳完成後,通過事件,自動備份上傳的文件。同時下載時需要判定文件是否完整,如果有問題則使用備份數據。此方案時效性得到了保障,但是將數據備份和業務放到了一起,且需要編碼實現,增加了業務代碼量。
第三個方案是 libfuse ,libfuse是用戶態文件系統介面。下面是libfuse官方簡介:
簡單來說,就是可以用libfuse構建一個用戶態文件系統。之前在老東家做了一個日誌分析平台,日誌的收集就使用了libfuse,大致架構如下:
業務系統寫日誌到掛載的用戶態文件系統中,用戶態文件系統自動轉發到了後續的處理中間件:redis、消息隊列、文件系統。
在這里也可以用類似的功能,即在文件上傳後,用戶態文件系統自動備份。此方案解耦了文件備案邏輯與業務邏輯。
最後一個方案是 RAID ,即廉價冗餘磁碟陣列。RAID不但可備份文件,還支持並發讀寫,提高上傳下載速率。
常用的RAID有:RAID0,RAID1,RAID01/RAID10,RAID5和RAID6等。我們來看看這幾種RAID的特點,以及是否適用於我們的文件服務。你會發現從RAID0到RAID6,又是一個從單點到分布式的過程。
看下面的兩張圖應該能更好的理解:
無論是RAID10還是RAID01,對磁碟的使用效率都不高。那如何提高磁碟使用率呢?就有了RAID3。
對於本地存儲來說,RAID是個相對實用的解決方案,既能提高數據安全、快速擴容,也提高了讀寫速率。但是無論擴展多少磁碟,容量還是相對有限,吞吐也相對有限,同時由於其還是單點,如果文件服務本身掛掉,就會導致單點故障。所以就有了分布式文件系統。
分布式文件系統下次單獨討論!
最後打個廣告,幫朋友開的專欄《零基礎Unity3D 游戲 開發》,適合沒有基礎、想從事 游戲 開發的小白!朋友從事 游戲 多年,開發了多款 游戲 ,收了30多個徒弟,技術杠杠的!
㈡ 雲存儲架構分哪些層次,各自實現了什麼功能_雲存儲架構包含哪些內容
(1)存儲層
雲存儲系統對外提供多種不同的存儲服務,各種服務的數據統一存放在雲存儲系統中,形成一個海量數據池。從大多數網路服務後台數據組織方式來看,傳統基於單伺服器的數據組織難以滿足廣域網多用戶條件下的吞吐性能和存儲容量需求;基於P2P架構的數據組織需要龐大的節點數量和復雜編碼演算法保證數據可靠性。相比而言,基於多存儲伺服器的數據組織方法能夠更好滿足在線存儲服務的應用需求,在用戶規模較大時,構建分布式數據中心能夠為不同地理區域的用戶提供更好的服務質量。
雲存儲的存儲層將不同類型的存儲設備互連起來,實現海量數據的統一管理,同時實現對存儲設備的集中管理、狀態監控以及容量的動態擴展,實質是一種面向服務的分布式存儲系統。
(2)基礎管理層
雲存儲系統架構中的基礎管理層為上層提供不同服務間公共管理的統一視圖。通過設計統一的用戶管理、安全管理、副本管理及策略管理等公共數據管理功能,將底層存儲與上層應用無縫銜接起來,實現多存儲設備之間的協悔早同工作,以更好的性能對外提供多種服務。
(3)應用介面層
應用介面層是雲存儲平台中可以靈活擴展的、直接面向用戶的部分。根據用戶需求,可以開發出不同的應用介面,提供相應的服務。比如數據存儲服務、空間租賃服務、公共資源服務、多用戶數據共享服務、數據備份服務等。
(4)訪問層
通過訪問層,任何一個授權用戶都可以在任何地方,使用一台聯網的終端設備,按照標準的公用應用介面來登錄雲存儲平台,享受雲存儲服務。
2雲存儲技術的優勢
作為新興的存儲技術,與傳統的購買存儲設備和部署存儲軟體相比,雲存儲方式存在以下優點:
(1)成本低、見效快
傳統的購買存儲設備或軟體定製方式下,企業根據信息化管理的需求,一次性投入大量資金購置硬體設備首飢、搭建平台。軟體開發則經過漫長的可行性分析、需求調研、軟體設計、編碼、測試這一過程。往往在軟體開發完成以後,業務需求發生變化,不得不對軟體進行返工,不僅影響質量,提高成本,更是延誤了企業信息化進程,同時造成了企業之間的低水平重復投資以及企業內部周期性、高成本的技術升級。在雲存儲方式下,企業除了配置必要的終端設備接收存儲服務外,不需要投入額外的資金來搭建平台。企業只需按用戶數分期租用服務,規避了一次性投資的風險,降低了使用成本,而且對於選定的服務,可以立即投入使用,既方便又快捷。
(2)易者前返於管理
傳統方式下,企業需要配備專業的IT人員進行系統的維護,由此帶來技術和資金成本。雲存儲模式下,維護工作以及系統的更新升級都由雲存儲服務提供商完成,企業能夠以最低的成本享受到最新最專業的服務。
(3)方式靈活
傳統的購買和定製模式下,一旦完成資金的一次性投入,系統無法在後續使用中動態調整。隨著設備的更新換代,落後的硬體平台難以處置;隨著業務需求的不斷變化,軟體需要不斷地更新升級甚至重構來與之相適應,導致維護成本高昂,很容易發展到不可控的程度。而雲存儲方式一般按照客戶數、使用時間、服務項目進行收費。企業可以根據業務需求變化、人員增減、資金承受能力,隨時調整其租用服務方式,真正做到「按需使用」。
3雲存儲技術趨勢
隨著寬頻網路的發展,集群技術、網格技術和分布式文件系統的拓展,CDN內容分發、P2P、數據壓縮技術的廣泛運用,以及存儲虛擬化技術的完善,雲存儲在技術上已經趨於成熟,以「用戶創造內容」和「分享」為精神的Web2.0推動了全網域用戶對在線服務的認知
㈢ 常用的存儲架構有
順序存儲方法它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。
鏈接存儲方法它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。
順序存儲和鏈接存儲的基本原理
順序存儲和鏈接存儲是數據的兩種最基本的存儲結構。
在順序存儲中,每個存儲空間含有所存元素本身的信息,元素之間的邏輯關系是通過數組下標位置簡單計算出來的線性表的順序存儲,若一個元素存儲在對應數組中的下標位置為i,則它的前驅元素在對應數組中的下標位置為i-1,它的後繼元素在對應數組中的下標位置為i+1。在鏈式存儲結構中,存儲結點不僅含有所存元素本身的信息,而且含有元素之間邏輯關系的信息。
數據的鏈式存儲結構可用鏈接表來表示。
其中data表示值域,用來存儲節點的數值部分。Pl,p2,…,Pill(1n≥1)均為指針域,每個指針域為其對應的後繼元素或前驅元素所在結點(以後簡稱為後繼結點或前驅結點)的存儲位置。通過結點的指針域(又稱為鏈域)可以訪問到對應的後繼結點或前驅結點,若一個結點中的某個指針域不需要指向其他結點,則令它的值為空(NULL)。
在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中,由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到,訪問任一元素的時間與該元素結點在鏈式存儲結構中的位置有關。
儲存器方面的儲存結構
儲存系統的層次結構為了解決存儲器速度與價格之間的矛盾,出現了存儲器的層次結構。
程序的局部性原理
在某一段時間內,CPU頻繁訪問某一局部的存儲器區域,而對此范圍外的地址則較少訪問的現象就是
程序的局部性原理。層次結構是基於程序的局部性原理的。對大量典型程序運行情況的統計分析得出的結論是:CPU對某些地址的訪問在短時間間隔內出現集中分布的傾向。這有利於對存儲器實現層次結構。
多級存儲體系的組成
目前,大多採用三級存儲結構。
即:Cache-主存-輔存,如下圖:
3、多級存儲系統的性能
考慮由Cache和主存構成的兩級存儲系統,其性能主要取決於Cache和貯存的存取周期以及訪問它們的
次數。(存取周期為: Tc,Tm ;訪問次數為: Nc,Nm)
(1)Cache的命中率 H= Nc / (Nc+Nm)
(2)CPU訪存的平均時間 Ta= H * Tc+ (1-H) Tm
Cache-主存系統的效率
e= Tc / Ta
=1/H+(1-H)Tm/Tc
根據統計分析:Cache的命中率可以達到90%~98%
當Cache的容量為:32KB時,命中率為86%
64KB時,命中率為92%
128KB時,命中率為95%
256KB時,命中率為98%
㈣ 如何在雲計算平台上搭建存儲架構部署提供san區域存儲服務
雲計算架構主要可分為四層,其中有三層是橫向的,分別是顯示層、中間件層和基礎設施層,通過這三層技術能夠提供非常豐富的雲計算能力和友好的用戶界面,還有一層是縱向的,稱為管理層,是為了更好地管理和維護橫向的三層而存在的。
㈤ 雲存儲架構包括哪些內容
雲存儲架構包括存儲層、管理調度層、訪問介面層、應用服務層等四個層次。它可以自主決定虛擬伺服器的類型和配置,然後通過網路連接到雲提供商就能獲得虛擬伺服器的訪問許可權。
雲存儲架構通過以下步驟能夠支持用戶更多:通過試錯找到正確的方法。當創建存儲架構時,很難每次都切中要害,特別當需求並沒有明確列出時。雲存儲架構支持擴展供應,如果這並非正確的措施,只要結束初始嘗試並換其它的。
向上或向下擴展以滿足拆盯需求高峰。很多企業狀況製造了IT需求峰值。無論是聖誕節前後的零售需求,還是月末的關閉處理,又或是晝夜營業時間的彎芹可變,需求都在不斷的增加或降低。應用傳統或融合產品,需要購買足夠擴展能力的基礎設施,以滿足眾多虛擬伺服器的需求埋御畢。施以雲架構,可以隨需求向上或向下擴展,並且當使用的資源較少時花銷也隨之降低。
快速配置環境。融合系統能夠有效降低從多供應商采購以及組裝的交付周期。