分布式存儲系統(tǒng)概述_第1頁
分布式存儲系統(tǒng)概述_第2頁
分布式存儲系統(tǒng)概述_第3頁
分布式存儲系統(tǒng)概述_第4頁
分布式存儲系統(tǒng)概述_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

一、內(nèi)容總括分布式存儲系統(tǒng)是基于分布式架構(gòu),由多個軟硬件協(xié)同的存儲節(jié)點通過網(wǎng)絡(luò)互聯(lián)來提供存儲服務(wù)的系統(tǒng)?;蚝喲灾植际酱鎯ο到y(tǒng)使用分布式的方法來提供存儲服務(wù)。分布式存儲系統(tǒng)首先是存儲系統(tǒng)。作為存儲存儲系統(tǒng),最基本的需求是提供系統(tǒng)的可靠性和可用性??煽啃允侵?,用戶在存儲系統(tǒng)寫入的數(shù)據(jù)不能丟,讀取的數(shù)據(jù)不能錯;可用性是指,系統(tǒng)提供的服務(wù)不中斷。除了可靠性和可用性,存儲系統(tǒng)還需要具備高性能、高數(shù)據(jù)存儲效率、高安全、易管理等特點。高性能是指系統(tǒng)提供高IOPS、高帶寬、低時延;高數(shù)據(jù)存儲效率是指,存儲系統(tǒng)利用數(shù)據(jù)縮減方法(如RAID、EC、重刪、壓縮等)使用戶寫入的數(shù)據(jù)占用盡量小的存儲空間;高安全主要針對存儲系統(tǒng)的用戶業(yè)務(wù)、存儲設(shè)備、存儲網(wǎng)絡(luò)等,需要保證它們不易受到安全威脅和攻擊,即使收到攻擊后也易于恢復(fù);易管理是指系統(tǒng)在生命周期內(nèi)可以進(jìn)行方便的配置、維護(hù)、優(yōu)化等。分布式存儲是使用分布式的方法設(shè)計的,必然具有分布式系統(tǒng)的特點。這些特點包括易擴展、融合存儲服務(wù)、生態(tài)開放等。易擴展是指可以在方便地在已有的分布式存儲系統(tǒng)中添加(或縮減)節(jié)點,并且系統(tǒng)的整體性能(IOPS、帶寬)和節(jié)點數(shù)量(近)線性相關(guān);融合服務(wù)能力是指存儲系統(tǒng)可以同時支持塊、文件、對象、HDFS等多種存儲服務(wù);生態(tài)開放是指分布式存儲不僅可以方便地對接各種上層應(yīng)用,其系統(tǒng)自身的軟硬件也具有相對開放的生態(tài)。人們總是追求完美的產(chǎn)品。對于分布式存儲產(chǎn)品,也不例外。比如數(shù)據(jù)高可靠要高,永遠(yuǎn)不會丟數(shù)據(jù);系統(tǒng)可用性要高,永遠(yuǎn)在線;系統(tǒng)擴展性要強,可任意擴、縮存儲節(jié)點;系統(tǒng)容錯性強,隨便壞幾塊硬盤,甚至壞幾個節(jié)點都不會影響存儲系統(tǒng)的可靠性和系統(tǒng)可用性;當(dāng)然,存儲還必須具備高性能。但是,完美的存儲系統(tǒng)是不存在的。這倒不完全是由于技術(shù)的原因,一些更深層的原理,比如分布式存儲中的CAP理論,就從理論上制約了完美存儲的存在。實際上,我們在設(shè)計分布式系統(tǒng)的時候,往往要在可靠性、可用性、性能、存儲效率、成本等不同的方面進(jìn)行權(quán)衡和取舍。不同的用戶、不同的應(yīng)有場景,對分布式存儲系統(tǒng)的關(guān)注點也不盡相同。這也是為什么即使是同一個的廠商的分布式存儲產(chǎn)品,也會分成不同的產(chǎn)品系列和型號。其主要作用就是滿足不同場景和用戶的需求。本文的主要目的,是對分布式存儲系統(tǒng)設(shè)計中所關(guān)注的問題和方法做一些簡要的說明,以期讀者通過此文對分布式存儲系統(tǒng)有一個基本的了解。下面,我將對本文中提及的分布式存儲的特征做一個基本描述。因為文章長度的限制,這里的描述是粗略的。之后,我希望根據(jù)讀者的興趣和本人的能力,對分布式存儲系統(tǒng)中的一些問題和方法進(jìn)行專題論述。二、可靠性首先,我們看一下分布式存儲系統(tǒng)的可靠性。“可靠性”在不同的語境下有不同的含義。為避免歧義,此文中我們特指存儲系統(tǒng)數(shù)據(jù)的可靠性。更加嚴(yán)格一點說,是指存儲系統(tǒng)在給定的時間內(nèi)(定量計算中一般取一年)數(shù)據(jù)不丟失的概率。比如,亞馬遜S3存儲服務(wù)的數(shù)據(jù)可靠性指標(biāo)是11個9,也就是99.999999999%。照此計算,用戶存儲百億對象,平均十年可能出現(xiàn)1個對象丟失。對分布式存儲系統(tǒng)來說,造成數(shù)據(jù)丟失的主要原因是硬件失效(除硬件失效外,軟件Bug也會造成數(shù)據(jù)可靠性降低,軟件Bug不在本文中論述)。硬件失效包括硬盤失效、存儲節(jié)點失效、網(wǎng)絡(luò)異常、IDC故障等。硬件失效時不可避免的。為了保證在發(fā)生硬件失效時,從整個存儲系統(tǒng)的角度不丟失數(shù)據(jù),一般采用數(shù)據(jù)冗余的方法,在分布式存儲集群內(nèi)做數(shù)據(jù)冗余,甚至在IDC機房間的不同分布式存儲集群間做數(shù)據(jù)冗余(數(shù)據(jù)備份)。當(dāng)前較為成熟的數(shù)據(jù)冗余方法包括多副本和糾刪碼,一些新的網(wǎng)絡(luò)編碼方案也探索中。多副本,顧名思義,就是把數(shù)據(jù)在分布式系統(tǒng)中保存多份;糾刪碼是RAID技術(shù)的拓展,它把將存儲數(shù)據(jù)分割成固定長度的數(shù)據(jù)片段,基于這些數(shù)據(jù)片段,利用算法計算出若干個校驗片段,然后把數(shù)據(jù)片段和校驗片段存儲到不同的存儲介質(zhì)上。為了最大限度的提高數(shù)據(jù)可靠性,數(shù)據(jù)的不同副本或糾刪碼片段盡量要存儲在不同存儲節(jié)點(甚至不同機架)?;谟布Вㄓ脖P、節(jié)點、網(wǎng)絡(luò)等)的數(shù)據(jù)可靠性可以通過建模的方法計算出來。常見的算法模型包括蒙特卡洛方法和基于泊松分布的數(shù)據(jù)估計方法,后續(xù)文章專門論述,本文從略。數(shù)據(jù)可靠性還包含了數(shù)據(jù)完整性。用戶寫入存儲系統(tǒng)的數(shù)據(jù)再讀取時必須正確的。實際上,數(shù)據(jù)進(jìn)入存儲系統(tǒng),要經(jīng)過網(wǎng)卡、CPU、內(nèi)存、RAID(HBA)卡、硬盤等多個部件的處理,理論上,每個部件在處理過程中都可能發(fā)生數(shù)據(jù)錯誤。為避免這些可能的錯誤,需要數(shù)據(jù)中添加校驗信息,以保障最終落盤數(shù)據(jù)的完整性。校驗信息不僅可以保障落盤數(shù)據(jù)的完整性,還可以避免另一類重要問題,即靜默錯誤(SilentDataCorruption)。磁盤發(fā)生靜默錯誤的原因包括介質(zhì)損壞、firmware問題等。在讀取發(fā)生靜默錯誤的數(shù)據(jù)時,通過校驗信息,就可以發(fā)現(xiàn)讀物數(shù)據(jù)的問題,此時,通過其他副本(或其他校驗方法)可以重新讀出正確的數(shù)據(jù),保證讀取數(shù)據(jù)的完整性。為了提升分布式存儲系統(tǒng)的數(shù)據(jù)可靠性,需要從多個維度進(jìn)行考量。從存儲節(jié)點部件(硬盤、內(nèi)存、CPU、RAID/HBA卡)級,到存儲集群系統(tǒng)級,再到解決方案級,需要多個層次通盤考慮。在部件級,硬盤(包括HDD和SSD)最終承載了用戶數(shù)據(jù),且其數(shù)量大,相對易出錯,所以,如何有效、快速地識別和處理硬盤故障,把硬盤故障對整個系統(tǒng)的影響降到最低,是可靠性設(shè)計面臨的關(guān)鍵挑戰(zhàn)。對硬盤可靠性提升的方法包括硬盤壞道檢測、錯誤處理、滿盤檢測和隔離、故障預(yù)測等內(nèi)容。除硬盤外,網(wǎng)卡、內(nèi)存等部件有需要相應(yīng)的可靠性檢測和保護(hù)技術(shù)。存儲集群系統(tǒng)級的可靠性技術(shù)包括數(shù)據(jù)布局的方法、故障節(jié)點的快速檢測和切換、數(shù)據(jù)的快速重構(gòu)等。數(shù)據(jù)布局技術(shù)就是數(shù)據(jù)的副本或EC分片在存儲集群中的分布方法。良好的數(shù)據(jù)布局在可以在相同副本或EC配置下最大化數(shù)據(jù)可靠性。為此,經(jīng)常需要綜合利用節(jié)點池、硬盤池、故障域、保護(hù)域等多種技術(shù)。節(jié)點故障(包括硬盤故障)的快速檢測對提升存儲系統(tǒng)數(shù)據(jù)可靠性和系統(tǒng)可用性(下文中詳細(xì)講解)都要重要作用。通常利用基于軟件心跳的方法檢測節(jié)點故障,部分廠商基于硬件故障上報或軟硬結(jié)合的方法,可以更快地進(jìn)行故障檢測和切換。在單個硬盤或節(jié)點失效時,存儲系統(tǒng)部分?jǐn)?shù)據(jù)可靠性處于降級狀態(tài),此時,需要盡快地進(jìn)行數(shù)據(jù)重構(gòu),恢復(fù)數(shù)據(jù)完整性。計算表明,數(shù)據(jù)重構(gòu)的時間和數(shù)據(jù)可靠性并非線性關(guān)系,而是指數(shù)型關(guān)系,所以快速重構(gòu)對于數(shù)據(jù)可靠性的提升具有重大意義。而數(shù)據(jù)重構(gòu)速度在很大程度上依賴于數(shù)據(jù)布局策略,良好的數(shù)據(jù)布局可以充分發(fā)揮分布式存儲的特點,多個節(jié)點(硬盤)并行重構(gòu)數(shù)據(jù),從而大幅提升重構(gòu)效率。解決方案級的數(shù)據(jù)可靠性技術(shù)主要包括不同存儲系統(tǒng)間的異步復(fù)制和同步復(fù)制技術(shù)。此處不詳述。三、可用性系統(tǒng)的可用性(availability)指系統(tǒng)可以正常提供服務(wù)的能力。對分布式存儲系統(tǒng)而言,可用性就是指系統(tǒng)可以正常提供讀/寫數(shù)據(jù)的能力。這里所謂的“正?!?,是指用戶的讀寫操作在合理的時間內(nèi)被存儲系統(tǒng)執(zhí)行,用戶寫入數(shù)據(jù)被正確地持久化在存儲系統(tǒng)內(nèi),用戶讀出的數(shù)據(jù)是最近更新成功的數(shù)據(jù)??捎眯砸话阌孟到y(tǒng)提供正常服務(wù)的時長與總時長的比例來衡量。比如,若一個存儲系統(tǒng)的可用性指標(biāo)是99.9999%,則該系統(tǒng)在一年內(nèi)不能提供服務(wù)的時間約為30秒。對分布式存儲系統(tǒng)來說,硬件部件(如硬盤)故障、節(jié)點失效、網(wǎng)絡(luò)故障都被視為無可避免的正常情況。要實現(xiàn)系統(tǒng)高可靠,就是在這些情況出現(xiàn),分布式存儲整體作為一個系統(tǒng),將不可提供讀寫服務(wù)的時間壓縮到最短,甚至沒有(主機應(yīng)用讀寫無感知)。理論上將,對于一個含有N個節(jié)點的對稱式分布式存儲集群來說,每一份寫入集群的數(shù)據(jù)最好能在每個節(jié)點上有一個副本,這樣,及時N-1個節(jié)點全部失效,剩下的一個節(jié)點也包含完整數(shù)據(jù),可以對外提供讀寫服務(wù)。但如果這樣做,必然導(dǎo)致數(shù)據(jù)存儲效率的降低,以及較低的性能。這時顯而易見的。所以,系統(tǒng)設(shè)計時,要在可用性和存儲效率、性能之間做一定的取舍和均衡。分布式存儲系統(tǒng)的一個好處是,系統(tǒng)中的任何一個節(jié)點都可以提供讀寫服務(wù)。一個自然的要求是,我們希望每個節(jié)點在同一時刻看到的數(shù)據(jù)是一致的。更具體地說,就是在一個具有一致性的分布式系統(tǒng)中,一旦對任何一個節(jié)點的寫入返回成功,后續(xù)系統(tǒng)中其它任何節(jié)點都可以立即讀到這個更新值。這個性能稱為分布式系統(tǒng)的一致性(Consistency)。一致性的要求是合理的,比如對于一個分布式應(yīng)用來說,一些節(jié)點需要從存儲系統(tǒng)的不同節(jié)點上讀取數(shù)據(jù)的最新寫入值,并根據(jù)這個值做進(jìn)一步處理。此時,如果不能滿足數(shù)據(jù)一致性的要求,就可能導(dǎo)致應(yīng)用錯誤。分布式系統(tǒng)的另一個合理要求是分區(qū)容錯性(Partitiontolerance)。分區(qū)即網(wǎng)絡(luò)分區(qū),是因為網(wǎng)絡(luò)故障導(dǎo)致網(wǎng)絡(luò)不連通,不同節(jié)點分布在不同的子網(wǎng)絡(luò)中,子網(wǎng)內(nèi)通信正常。分區(qū)容錯性就是在發(fā)生網(wǎng)絡(luò)分區(qū)時,系統(tǒng)仍然可提供服務(wù),系統(tǒng)仍然可用。從需求上說,系統(tǒng)可用性、一致性、分區(qū)容錯性都是分布式存儲的必備性質(zhì)。然而,2002年,麻省理工學(xué)院的Gilbert和Lynch發(fā)表了著名的CAP定理,證明了在分布式系統(tǒng)中,一致性(Consistency)、可用性(Availability)、分區(qū)容錯性(Partitiontolerance)不可兼得。雖然CAP定理存在一定爭議,但爭議本身已在不斷加深人們對分布式系統(tǒng)內(nèi)在性質(zhì)的理解。實際上,一致性的模型是比較復(fù)雜的。從概念上分,一致性模型包括嚴(yán)格一致性、線性一致性、順序一致性、因果一致性、單調(diào)一致性、最終一致性等。CAP定理中的一致性指線性一致性,屬于強一致性中的一種。對一致性的詳細(xì)介紹在專門的文章中討論。對分布式存儲來說,網(wǎng)絡(luò)分區(qū)(P)是不可避免的。而C、A、P又不能共存,那么我們只能選擇CP或者AP。對于一個通用的分布式存儲系統(tǒng)來說,缺少一致性對部分應(yīng)用來說是不可接受的,所以,大部分分布式存儲系統(tǒng)都是CP型系統(tǒng)。當(dāng)然,這并不意味著完全舍棄了可用性(A)。實際上,CAP理論中的A是理論上的最高可用性。在實際的系統(tǒng)中,并不會放棄A,設(shè)計者只是選擇在C和A中選擇哪個更多一點,再一次做權(quán)衡和取舍。在發(fā)生分區(qū)的時候,我們選擇了CP;不發(fā)生分區(qū)的時候,C和A自然是可以兼顧的。然而在此時,可用性和性能,具體地說,是可用性和時延又成了一對不可兼得的特性。也就是說,在無分區(qū)的情況下,要追求更強的一致性,就得接受更高的響應(yīng)時長。這個結(jié)論出自PACELC定理。對這個定理的一個粗略解釋是:更強的一致性必然要求數(shù)據(jù)以同步的方式進(jìn)行復(fù)制,相比于異步復(fù)制,同步復(fù)制需要花費更多的時間。響應(yīng)時長就是性能三大指標(biāo)之一的時延。從這里我們也可以看到,及時在不發(fā)生網(wǎng)絡(luò)分區(qū)的情況下,可用性和性能(時延)之間也要做仔細(xì)的權(quán)衡和取舍。分布式存儲系統(tǒng)要做到高可用,需要從多個角度進(jìn)行設(shè)計。分布式存儲系統(tǒng)自身首先要做到高可用。存儲系統(tǒng)中保存多份數(shù)據(jù)(數(shù)據(jù)可靠性),并且其中多個(甚至所有)節(jié)點都可以獨立對外提供存儲服務(wù),這是高可用的基礎(chǔ)。另外,在系統(tǒng)中發(fā)生故障時,需要系統(tǒng)具備快速的故障檢測和故障轉(zhuǎn)移能力。距離來說,外部主機通過虛擬地址連接到存儲集群中的某一臺存儲節(jié)點讀寫集群數(shù)據(jù),在該存儲節(jié)點發(fā)生宕機等事件無法繼續(xù)提供服務(wù)時,存儲系統(tǒng)要具備快速將服務(wù)切換到虛擬地址對應(yīng)的備用存儲節(jié)點上繼續(xù)提供服務(wù)。要提升可用性,有時還需要應(yīng)用側(cè)(主機側(cè))進(jìn)行配合。比如,在主機通過多路徑軟件連接到分布式存儲集群時,在存儲集群檢測到其中某個存儲節(jié)點故障時,可以立即通知主機側(cè)(如通過主機上安裝的代理軟件),進(jìn)行快速路徑切換。這種方法比簡單地通過主機側(cè)利用軟件超時的方法進(jìn)行故障倒換要快的多。再比如,在主機側(cè)安裝特定的存儲客戶端軟件,使主機以負(fù)載分擔(dān)的方法,和存儲集群中的多個節(jié)點同時通信。此時,若某個節(jié)點故障,主機還可以通過其他鏈路讀寫集群數(shù)據(jù),這也是對可用性的提升。除了在本地分布式存儲集群中考慮提升可用性外,如果有更高的可用性要求,可以考慮基于不同地理位置的業(yè)務(wù)連續(xù)性保護(hù)方案,典型如異步復(fù)制方案、AA雙活方案等。異步復(fù)制方案中,存儲系統(tǒng)一般分為主端和從端。主端存儲系統(tǒng)的數(shù)據(jù)會周期性地備份到從端存儲系統(tǒng)。這樣,在主存儲端整體不可用(如斷電、火災(zāi)等)時,還可以利用從端的數(shù)據(jù)繼續(xù)提供服務(wù)。AA雙活的兩個存儲系統(tǒng)均處于活躍(Active),用戶端從任意一個系統(tǒng)寫入的數(shù)據(jù)會以同步的方式寫入到另一個系統(tǒng)。當(dāng)一個系統(tǒng)發(fā)生設(shè)備故障,甚至單個系統(tǒng)整體故障時,業(yè)務(wù)自動切換到另一個存儲系統(tǒng)。AA雙活系統(tǒng)比異步遠(yuǎn)程復(fù)制提供更高的可用性(以及數(shù)據(jù)可靠性),當(dāng)然,其實現(xiàn)的技術(shù)復(fù)雜度、實施成本、技術(shù)限制(互聯(lián)距離、互聯(lián)帶寬/時延要求)也更高。高可用性的獲得不僅體現(xiàn)在技術(shù)上,也體現(xiàn)在服務(wù)能力上。比如,備件能力、可維護(hù)性等??傊?,系統(tǒng)的高可用性是多個因素共同作用的結(jié)果。四、IO性能對于存儲系統(tǒng),經(jīng)常用IOPS(I/Opersecond)、帶寬(Throughput)、時延(Latency)這三個參數(shù)作為性能衡量指標(biāo)。IOPS指的是系統(tǒng)在單位時間(1秒)內(nèi)能處理的最大的I/O數(shù)量。把IOPS的值乘以IO尺寸,就得到了帶寬指標(biāo)。所以說,IOPS和帶寬不是兩個獨立的指標(biāo)。那為什么人們?yōu)槭裁匆捎脙蓚€指標(biāo)來做度量呢?實際上,這和存儲系統(tǒng)本身的特性相關(guān):對于不同尺寸和訪問模式(隨機/順序)的數(shù)據(jù),存儲系統(tǒng)性能會表現(xiàn)出很大差異!具體來說,在相同的設(shè)備上,對于小尺寸IO(如4KB、8KB)的隨機讀寫和大尺寸IO(如1MB以上)的讀寫,從存儲系統(tǒng)所能獲得的帶寬可能有數(shù)量級的差異!所以,我們提到存儲存儲系統(tǒng)的IOPS,一般是指在小尺寸IO(即小IO)下每秒內(nèi)可獲得的IO次數(shù);而帶寬指大尺寸IO(即大IO)下(這里不再區(qū)分隨機/順序不同模式的原因是大IO性能對不同模式不敏感)的讀寫存儲系統(tǒng)所獲得的吞吐量。再進(jìn)一步追問,為什么不同尺寸IO在性能上會有如此大的差異呢?這是存儲介質(zhì)(HDD、SSD)的特性所決定的。以目前在存儲系統(tǒng)中最廣泛使用的磁盤(HDD)為例,一般SATA接口的硬盤,在4KB的IO尺寸下,IOPS值大概是100,照此計算,此時的帶寬是0.4MB;在1MB的IO尺寸下,其帶寬卻可以達(dá)到100MB。由此可見,不同的IO模式,磁盤的帶寬值可以相差數(shù)百倍!至于磁盤的性能表現(xiàn)為何如此,這是由其物理特性和讀寫方式?jīng)Q定的,此處不再詳述。實際上,正式因為磁盤在不同IO尺寸和訪問模式下性能的巨大差異,才導(dǎo)致了需要對以磁盤為主要存儲介質(zhì)的存儲系統(tǒng)進(jìn)行性能優(yōu)化的可能。如果磁盤在任意IO下的性能是相同的,性能優(yōu)化的意義就大打折扣。對存儲系統(tǒng)的寫性能優(yōu)化和讀性能優(yōu)化,其原理并不相同。實際上,在存儲系統(tǒng)的發(fā)展過程中,對性能優(yōu)化的一個關(guān)鍵技術(shù)就是如何能充分發(fā)揮存儲介質(zhì)的性能。在存儲系統(tǒng)中,和IO處理直接相關(guān)的部件基本指標(biāo)如下圖所示:從上圖可以看出,從CPU到CPUCache,再到DRAM內(nèi)存、PCM(Phase-ChangeMemory,非易失性內(nèi)存的一種)、SSD、HDD,訪問時延和容量都迅速變大。所以,對于性能優(yōu)化,一方面要充分利用高速緩存介質(zhì),另一方面要充分HDD和SSD的性能,因為數(shù)據(jù)最終要存儲在這些介質(zhì)上。如前所述,對于HDD來說,其大塊數(shù)據(jù)的順序讀寫性能遠(yuǎn)高于隨機讀寫性能。對于SSD來說,作為半導(dǎo)體存儲,不存在HDD通過機械臂尋道導(dǎo)致的時延問題,但由于其自身的GC機制(垃圾回收),順序訪問的性能同樣高于隨機訪問,當(dāng)然,其訪問性能差異遠(yuǎn)沒有HDD大。應(yīng)用訪問存儲的IO讀寫模式并不固定,既有以隨機小IO居多的應(yīng)用(如數(shù)據(jù)庫),也有以IO居多的應(yīng)用(如視頻、HPC等),當(dāng)然,更多的是大小IO混雜應(yīng)用。既然大IO可以充分發(fā)揮硬盤(HDD或SSD)性能,那么,性能優(yōu)化的一個方向就是把小IO變成大IO,把隨機IO變成順序IO。下面分別從IO存取兩方面分別說明。首先看一下基本的數(shù)據(jù)寫入流程:在應(yīng)用將數(shù)據(jù)寫入到存儲系統(tǒng)的內(nèi)存后,系統(tǒng)會在把數(shù)據(jù)的副本(通常以日志形式)寫入非易失性高速介質(zhì)(如NVDIMM、PCM、NVMeSSD等)后,就會向應(yīng)用返回寫入成功信息;然后,內(nèi)存中的數(shù)據(jù)以異步的形式寫入真正的存儲介質(zhì),即硬盤中。這樣做一方面可以在節(jié)點數(shù)據(jù)可靠性(因為寫入了非易失性介質(zhì)中,即使突然斷電,系統(tǒng)重啟后數(shù)據(jù)可恢復(fù))的前提下做到低時延,另一方面可以對內(nèi)存中的寫入數(shù)據(jù)(小IO)進(jìn)行一定的處理,使得這些數(shù)據(jù)寫入硬盤是獲得更好的性能。從而在整體上寫入性能上獲得低時延,更高的帶寬。把寫入的隨機小IO變成大IO(或順序IO)的方法之一就是利用寫緩存技術(shù)。其原理如下:我們以磁盤為例進(jìn)行說明。大體上有兩類方法進(jìn)行寫性能優(yōu)化。其一是IO調(diào)度法。在多個隨機小IO寫入緩存(高速介質(zhì),如內(nèi)存)后,由算法根據(jù)IO調(diào)度:調(diào)度的結(jié)果是部分小IO(邏輯位置相鄰)被合并成較大IO;部分小IO被重排,重排后的IO可以使磁盤的磁頭以相對較好的順序性訪問磁盤,從而提升寫入性能。其二是數(shù)據(jù)重映射法。這種方法的核心思想是小IO不再進(jìn)行“in-place”的寫入,而是通過引入一個重映射層(或稱索引層),把隨機寫入的IO以追加寫(append)的方式變成變成對磁盤的順序?qū)懭搿_@樣就可以充分利用磁盤順序?qū)懭氲母邘捥匦?,付出的代價是首先,要建立原有隨機小IO和新的順序IO之間的映射表(索引);其次,要有垃圾回收機制,因為數(shù)據(jù)不是以“in-place”的方法寫入的,舊有的數(shù)據(jù)必須在系統(tǒng)后臺定期進(jìn)行清理,釋放出空間。再次,新的映射層會導(dǎo)致對上層應(yīng)用來說邏輯連續(xù)的數(shù)據(jù)在磁盤上可能不再連續(xù),從而對數(shù)據(jù)的連續(xù)讀性能造成影響。實際上,以上兩種對寫性能的優(yōu)化思路在系統(tǒng)層面和部件層面都廣泛存儲。除了廣為人知的存儲系統(tǒng)軟件、操作系統(tǒng)等層面使用寫緩存技術(shù),在部件層面,比如RAID卡、HDD、SSD等,也都存在用于寫優(yōu)化的緩存層。對于讀性能的優(yōu)化,主要的方法是根據(jù)應(yīng)用IO讀請求的特點對數(shù)據(jù)進(jìn)行預(yù)取,預(yù)取數(shù)據(jù)放在高速緩存(Cache)中,這樣,在下一個讀請求命中Cache時,可以快速返回數(shù)據(jù)。我們知道,在存儲系統(tǒng)中,讀Cache的容量比介質(zhì)容量要小若干個數(shù)量級。所以,此種方法的核心的如何對讀請求作出正確的預(yù)測,使得后續(xù)讀請求數(shù)據(jù)可命中Cache。實際上,多相當(dāng)多的應(yīng)用來說,讀取數(shù)據(jù)時具備一定的空間局部性(temporallocality),也就是說,假設(shè)應(yīng)用目前在讀取第K塊數(shù)據(jù),那么接下來有很大的幾率讀取第K塊附件的數(shù)據(jù),所以我們可以將第K塊附件的數(shù)據(jù)(對于HDD來說,這些數(shù)據(jù)數(shù)據(jù)很可能也是物理連續(xù)的,可以充分發(fā)揮磁盤順序讀取的性能優(yōu)勢)預(yù)讀到Cache中。當(dāng)然,如果對于真正完全隨機的數(shù)據(jù),預(yù)讀的方法是沒有用處的,反而會造成一定的系統(tǒng)負(fù)擔(dān)。真實世界中,完全隨機的讀取時很少的。目前人們在探索利用AI的算法對讀請求進(jìn)行模式識別,這會比簡單地根據(jù)空間局部性預(yù)測命中率更高,一些公司在這方面已經(jīng)取得了很好的結(jié)果。同寫緩存類似,讀緩存也分為多個層次。分布式存儲中,一般存在一個由各存儲節(jié)點的高速介質(zhì)(易失或非易失性內(nèi)存)組成的分布式全局緩存。全局緩存一般采用讀寫緩存分離設(shè)計。這樣做的好處是一方面避免讀寫緩存相互影響(寫緩存刷盤、讀緩存淘汰數(shù)據(jù)),一方面可以對讀寫緩存獨立實施實現(xiàn)靈活的策略(緩存空間占用大小、副本數(shù)、后端存取介質(zhì)等)。除此之外,為實現(xiàn)對后端存儲介質(zhì)友好(大塊連續(xù)數(shù)據(jù))的數(shù)據(jù)寫入,還會在全局緩存層實現(xiàn)隨機小IO到大塊順序IO的IO聚合功能。如前文所述,此時需要記錄隨機小對象到聚合對象的映射關(guān)系,這個映射一般采用KV數(shù)據(jù)庫實現(xiàn)(一般基于LSM或B+樹實現(xiàn),典型如RockDB)。在存儲海量數(shù)據(jù)時,KV數(shù)據(jù)庫的讀寫效率會稱為影響性能的關(guān)鍵因素。利用緩存(單層或多層)固然可以提升讀寫性能,但需注意由此引入的讀寫數(shù)據(jù)一致性的問題。比如,在多層級的讀寫緩存中,由于在寫入過程中數(shù)據(jù)是自上而下(也是由高速到低速)逐層寫入的,在讀取數(shù)據(jù)時,為保證數(shù)據(jù)一致性,必須保證同一層級先寫后讀(先從寫緩存尋找數(shù)據(jù)再從讀緩存尋找數(shù)據(jù)),不同層級自上而下的原則。對于由N個節(jié)點組成的分布式存儲系統(tǒng),主機應(yīng)用可能通過網(wǎng)絡(luò),連接N個節(jié)點中的部分或全部節(jié)點,并行讀寫存儲系統(tǒng)。所以,從理論上說,存儲系統(tǒng)作為一個整體的性能不超過各個節(jié)點性能之和。要使系統(tǒng)到達(dá)高性能,從數(shù)據(jù)布局(datalayout)的角度說,一方面要將數(shù)據(jù)充分打散存儲,另一方面就是要將保證數(shù)據(jù)在存儲介質(zhì)上基本均衡。數(shù)據(jù)打散就是存儲系統(tǒng)把來自主機應(yīng)用的大塊數(shù)據(jù)切割成小塊,分散放置到不同節(jié)點的不同硬盤上,這就相當(dāng)于以并行的方式訪問硬盤,性能自然高。數(shù)據(jù)均衡則從概率的角度使得每塊硬盤具有近似的訪問幾率,這樣就從整體上可以發(fā)揮所有硬盤的能力,從而達(dá)到性能最佳值。數(shù)據(jù)布局就是要把打散的定長數(shù)據(jù)塊映射到系統(tǒng)中的某個硬盤上。映射的方法基本可以分成兩類。一類是顯示映射法,就是系統(tǒng)對于每個分塊數(shù)據(jù),根據(jù)硬盤的狀態(tài)(容量、使用率等)顯示地指定,并把這個映射關(guān)系記錄下來形成映射表。之后,讀寫這塊數(shù)據(jù)都要查詢這個映射表。另一類方法是采用廣義的HASH計算法,就是根據(jù)分塊數(shù)據(jù)的特性(命名空間、LUN或文件名、地址偏移信息等)利用HASH函數(shù)以偽隨機的方法映射到某個硬盤。這個映射關(guān)系不需要顯示記錄,因為HASH函數(shù)的計算極快,下次訪問此數(shù)據(jù)塊只要再計算一下就可以找到對應(yīng)的硬盤。在分布式存儲中常用的DHT、CRUSH等方法均屬此類。顯示映射法和廣義HASH法各有千秋。顯示映射法可以設(shè)置靈活的數(shù)據(jù)布局策略,在數(shù)據(jù)均衡、遷移、數(shù)據(jù)耐久性變更等方面易于實現(xiàn),但因為要顯示的記錄映射關(guān)系,不易處理海量數(shù)據(jù)。廣義HASH法因不需要存儲映射表,存儲的數(shù)據(jù)量理論上可以無窮大,但其在數(shù)據(jù)均衡性、數(shù)據(jù)布局策略靈活變更等方面不及顯示映射法。實際的分布式存儲系統(tǒng)往往兩種方法結(jié)合使用。十多年前,存儲系統(tǒng)的存儲介質(zhì)主要是HDD磁盤。因為CPU、內(nèi)存和HDD性能的巨大差異,單顆CPU下可以掛數(shù)十塊甚至上百塊磁盤。隨著SSD技術(shù)的長足進(jìn)步(性能、容量不斷增長,價格則不斷下降),SSD在存儲系統(tǒng)中被廣泛采用,全閃存儲設(shè)備高速增長。SSD和CPU都是基于半導(dǎo)體技術(shù),性能差異已經(jīng)顯著縮小。目前商用的單塊NVMeSSD(PCIe4.0)的帶寬性能可達(dá)6~8GB/s,IOPS達(dá)數(shù)十萬。這個性能是HDD的千百倍。對于存儲系統(tǒng)來說,除了基本的讀寫之外,還需要提供EC/RAID計算、快照/克隆、數(shù)據(jù)重刪、壓縮、加密等增值功能,這些功能疊加在一起,對CPU的性能的要求急劇提升。這對以通用計算為目的設(shè)計的CPU來說就顯得有些心有余而力不足。此時,就需要一些專用處理器做協(xié)議卸載,這些專用硬件如智能網(wǎng)卡、計算存儲設(shè)備(ComputationalStorageDevice)、DPU(DataProcessingUnit)等。DPU專為數(shù)據(jù)處理而設(shè)計,存儲系統(tǒng)可以利用CPU+DPU的組合方案,把存儲IO處理、糾刪碼計算、數(shù)據(jù)重刪、數(shù)據(jù)壓縮、加密等功能卸載到DPU上,CPU只集中于系統(tǒng)控制面的功能。一些更加激進(jìn)的公司甚至在存儲系統(tǒng)中用DPU完全取代了CPU。從整個存儲行業(yè)來看,DPU的應(yīng)用還處于起步階段,后續(xù)隨著DPU本身的不斷發(fā)展,它會在存儲系統(tǒng)中發(fā)揮越來越重要的作用。存儲系統(tǒng)的性能發(fā)揮不僅依賴于其本身,還與存儲訪問協(xié)議和網(wǎng)絡(luò)相關(guān)。常用的存儲網(wǎng)絡(luò)包括FC、EHT/IP、IB等。其中FC網(wǎng)絡(luò)專為存儲設(shè)計,在網(wǎng)絡(luò)穩(wěn)定性、可用性、時延等方面具有優(yōu)勢,但其速率不如ETH和IB,成本也高;IB網(wǎng)絡(luò)主要應(yīng)用在超算領(lǐng)域,可為應(yīng)用提供超高帶寬,但其成本高,供應(yīng)商少;ETH/IP是數(shù)據(jù)中心最為廣泛采用的網(wǎng)絡(luò)技術(shù),帶寬高,成本低,但其在擁塞避免、擁塞控制、時延、易用性等方便不如FC。近幾年,EHT借鑒IB網(wǎng)絡(luò)的RDMA方法,將RDMA承載在無損以太網(wǎng)上,發(fā)展了RoCE(RDMAoverConvergedEthernet)方法。為了更好地和存儲結(jié)合,一些廠商還在RoCE的基礎(chǔ)上進(jìn)行了增強,使其可用性(快速故障倒換)、易用性和丟包率等指標(biāo)接近FC。在訪問協(xié)議上,傳統(tǒng)存儲主要以SCSI協(xié)議訪問磁盤。SCSI協(xié)議不能發(fā)揮SSD介質(zhì)的高性能,NVMe協(xié)議以及NVMe-oF協(xié)議應(yīng)運而生。NVMe協(xié)議面向SSD介質(zhì)設(shè)備,在并發(fā)能力(隊列數(shù)量、隊列深度)和傳輸能力上均好于SCSI。NVMe-oF協(xié)議兼容性好,可以使NVMe運行在多種網(wǎng)絡(luò)上。在實際部署中,將NVMe承載在FC上、RoCE上、以及TCP上是目前常用的方法。五、數(shù)據(jù)存儲效率隨著數(shù)據(jù)量的高速增長,所需存儲設(shè)備的空間越來越大。如何在固定的存儲物理空間上存儲更多的數(shù)據(jù),就是數(shù)據(jù)存儲效率問題。需要說明的是,高效的數(shù)據(jù)存儲不能損害數(shù)據(jù)可靠性。常見的提升數(shù)據(jù)存儲效率的方法包括精簡配置、RAID/EC(Erasurecoding)、重刪、壓縮等技術(shù)。下面對分布式存儲中常用的糾刪碼(EC)、重刪、壓縮等技術(shù)做一簡要說明。糾刪碼存儲系統(tǒng)為了提高數(shù)據(jù)的容錯能力,一般會采用多副本或者糾刪碼技術(shù)。糾刪碼比多副本有更高的存儲效率,更加適合海量數(shù)據(jù)存儲。糾刪碼在數(shù)學(xué)上主要利用了伽羅華域(GaloisField),使得其運算保持封閉性。糾刪碼是指將要存儲的數(shù)據(jù)分割成小的數(shù)據(jù)塊,通過算法將數(shù)據(jù)塊進(jìn)行編碼生成校驗數(shù)據(jù)塊,然后把這些數(shù)據(jù)塊(包括原始數(shù)據(jù)塊和校驗數(shù)據(jù)塊)存儲在不同的存儲位置。相對單純的副本方式,使用糾刪碼在同樣的硬盤或節(jié)點配置下可以為用戶提供更多的有效存儲空間,盤的利用率更高。糾刪碼配置比例一般用(k,m)標(biāo)識。k表示原始數(shù)據(jù)塊數(shù)量,m是校驗數(shù)據(jù)塊數(shù)量??倲?shù)據(jù)塊n=原始數(shù)據(jù)塊k+校驗塊m。糾刪碼存儲空間利用率為k/n,例如系統(tǒng)6塊硬盤,糾刪碼配置為(4,2)可以表示6個硬盤,4個存儲數(shù)據(jù),2個存儲校驗數(shù)據(jù),存儲空間利用率為4/6=66.7%;對應(yīng)三副本存儲,數(shù)據(jù)需要放置3份,存儲空間利用率為33.3%;存儲空間利用率率糾刪碼比副本多一倍。如果采用大比例糾刪碼,利用率可以進(jìn)一步提升,甚至到90%以上!和副本技術(shù)相比,糾刪碼的編碼(存儲)和解碼(數(shù)據(jù)恢復(fù))需要更多的CPU處理能力,同時,由于較多的分片(尤其是大比例糾刪碼)會產(chǎn)生較大的尾時延。分布式存儲實際應(yīng)用中,經(jīng)常把副本和糾刪碼結(jié)合使用:為減少時延,數(shù)據(jù)首先以副本的方式存在緩存層,立即向應(yīng)用返回IO成功,之后,再以異步的方式通過糾刪碼存儲在后端介質(zhì)上。壓縮數(shù)據(jù)壓縮是指在不丟失有用信息的前提下,縮減數(shù)據(jù)量以減少存儲空間,提高其傳輸、存儲和處理效率,或按照一定的算法對數(shù)據(jù)進(jìn)行重新組織,減少數(shù)據(jù)的冗余和存儲的空間的一種技術(shù)方法。數(shù)據(jù)壓縮能夠?qū)崿F(xiàn)是因為多數(shù)現(xiàn)實世界的數(shù)據(jù)都有冗余,數(shù)據(jù)壓縮的過程是去除多余的冗余數(shù)據(jù)。壓縮的本質(zhì)是對信息進(jìn)行再編碼,即使用另一種更簡潔的方式重新表達(dá)。數(shù)據(jù)壓縮技術(shù)可以分為兩大類,一類是有損壓縮,一類是無損壓縮。存儲系統(tǒng)中一般使用無損壓縮。無損壓縮是指使用一定的算法對數(shù)據(jù)進(jìn)行壓縮,用壓縮后的數(shù)據(jù)進(jìn)行重構(gòu),可以恢復(fù)原始的數(shù)據(jù)信息,壓縮前后信息不受損失。無損壓縮廣泛應(yīng)用于文本數(shù)據(jù)、程序和特殊應(yīng)用場合的圖像數(shù)據(jù)等需要精確存儲數(shù)據(jù)的壓縮。在存儲領(lǐng)域,除了通用壓縮算法,還在研究基于特定場景和數(shù)據(jù)類型的專用算法,以期進(jìn)一步提升數(shù)據(jù)存儲效率。重刪重復(fù)數(shù)據(jù)刪除技術(shù)(簡稱“重刪”)也是一種重要的數(shù)據(jù)縮減技術(shù),通過對新數(shù)據(jù)與已存儲數(shù)據(jù)進(jìn)行對比分析,避免將已經(jīng)存儲在設(shè)備中的數(shù)據(jù)再一次存儲,通過建立“索引”來將多份數(shù)據(jù)指向設(shè)備中已存在的數(shù)據(jù),這樣可以有效的節(jié)省存儲空間。重復(fù)數(shù)據(jù)刪除可優(yōu)化冗余,而不會損壞數(shù)據(jù)保真度或完整性。重刪本質(zhì)上是一種壓縮技術(shù)。重刪的基本流程如下圖所示。重復(fù)數(shù)據(jù)刪除按數(shù)據(jù)處理時間可以分類為在線重刪和后重刪。在線重刪是在數(shù)據(jù)存儲到存儲設(shè)備上的同時進(jìn)行重復(fù)數(shù)據(jù)刪除操作,在數(shù)據(jù)存儲到硬盤之前,重復(fù)數(shù)據(jù)已經(jīng)被去除掉了。后重刪是在寫到存儲設(shè)備的同時不進(jìn)行重刪處理,先把原始數(shù)據(jù)寫到盤上,隨后啟動后臺進(jìn)程對這些原始數(shù)據(jù)進(jìn)行重刪處理。與在線重刪相比較,后重刪需要更高的硬盤性能。對分布式存儲來說,存儲海量數(shù)據(jù)一個關(guān)鍵技術(shù)是如何處理較大的指紋表。從數(shù)據(jù)重刪步驟可以看出,在數(shù)據(jù)塊長度固定的前提下,指紋庫的大小和數(shù)據(jù)量成正比。舉例來說:假定一個存儲服務(wù)器包含24塊硬盤,每塊硬盤容量4TB。數(shù)據(jù)塊采用定長方式,每塊8KB。指紋生成采用SHA1算法,即每個指紋20Byte。在此情況下,計算可得,若存儲服務(wù)器寫滿數(shù)據(jù),指紋所需的內(nèi)存空間為240GB!這還僅僅是一個存儲服務(wù)器的指紋容量。所以,在實際應(yīng)用重刪技術(shù)時,一般采用犧牲一部分?jǐn)?shù)據(jù)存儲效率,在內(nèi)存中只存儲“熱指紋”的方法;另外,為了保證全局重刪的效果,需要保證指紋庫的分布式布局。六、安全性任何IT系統(tǒng)都面臨著安全威脅,既有傳統(tǒng)安全威脅也有新興的安全威脅。對于存儲系統(tǒng),除了網(wǎng)絡(luò)安全威脅,如IP攻擊、軟件漏洞、病毒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論