架構(gòu)與算法創(chuàng)新,讓分布式存儲煥然一新!

分布式存儲在數(shù)據(jù)存儲產(chǎn)業(yè)中的占比越來越高,得益于分布式Scale-out的高擴(kuò)展性,以及高速網(wǎng)絡(luò)技術(shù)的發(fā)展,分布式存儲逐漸成為主流,解決海量跨源、跨域、跨協(xié)議的非結(jié)構(gòu)化數(shù)據(jù)“存得下”,“管得好”以及高效互通的問題。

企業(yè)用戶希望從分布式存儲獲取哪些能力呢,可以概括為五點(diǎn):高性能、低成本、高可靠、易管理、易擴(kuò)展。針對這些核心訴求,鯤鵬BoostKit分布式存使能套件打造了全局緩存特性,本質(zhì)上是一個分布式存儲使能中間件,即中間的軟件層,這里簡單將全局緩存支持或者規(guī)劃的特性總結(jié)為資源管理、系統(tǒng)加速以及企業(yè)高級特性三類,用于解決伙伴和企業(yè)對于數(shù)據(jù)存儲的核心需求。

以高性能需求為例,我們通過結(jié)合讀寫緩存來縮短讀寫訪問路徑,提供低時延訪問,結(jié)合數(shù)據(jù)聚合實(shí)現(xiàn)隨機(jī)寫入轉(zhuǎn)為順序?qū)懭?,大幅削減磁盤尋道、旋轉(zhuǎn)延遲對硬盤能力發(fā)揮的阻礙,以及結(jié)合全新設(shè)計的元數(shù)據(jù)管理引擎實(shí)現(xiàn)變長數(shù)據(jù)自適應(yīng)管理。

全局緩存實(shí)現(xiàn)高性能、低成本、高可靠、易管理、易擴(kuò)展,得益于其架構(gòu),以及算法創(chuàng)新,接下來我們分別分享其背后的設(shè)計思路。

全局緩存的軟件架構(gòu)設(shè)計:遵循清晰、合適、易演進(jìn)原則

(圖:全局緩存技術(shù)堆棧)

全局緩存是一個華為自研的分布式存儲緩存加速套件,支持一體化、自管理、可擴(kuò)展部署,提供掉電保護(hù),并且不存在單點(diǎn)故障問題。

整體的架構(gòu)設(shè)計遵循清晰簡潔、合適和易演進(jìn)的原則,從而把系統(tǒng)設(shè)計的足夠簡單,原因在于我們知道分布式存儲可以看作是分布式系統(tǒng)的集大成者,其不僅包含各種正常功能場景,比如我們前面提到的資源管理、系統(tǒng)加速以及企業(yè)特性,還包括非常多的異常流程,這些正常流程與異常流程正交以后導(dǎo)致我們系統(tǒng)復(fù)雜度非常容易膨脹。

雖然任何分布式系統(tǒng)都有正常和異常流程,但其實(shí)是有差別的,因為分布式存儲承載了用戶核心數(shù)據(jù),是不允許數(shù)據(jù)丟失或不一致的,業(yè)務(wù)恢復(fù)不僅要考慮RTO,還要考慮RPO,增加一個維度,帶來的復(fù)雜度不是翻倍,而是升維,本質(zhì)上還是一個正交的過程。

基于此,整個架構(gòu)設(shè)計過程都致力于降低系統(tǒng)復(fù)雜度,第一步就是充分解耦,從圖中可以看到,全局緩存從邏輯和部署都是與計算集群和存儲集群解耦的,相當(dāng)于一層緩存加速中間件,從而可以實(shí)現(xiàn)自管理、獨(dú)立部署、獨(dú)立運(yùn)行,不侵入Ceph等開源軟件,做到應(yīng)用無感加速。

解耦之后,全局緩存借鑒微服務(wù)的思想,通過客戶端適配層、服務(wù)端適配層和存儲代理層等抽象外部接口依賴,相當(dāng)于API網(wǎng)關(guān),對外屏蔽系統(tǒng)內(nèi)部的復(fù)雜性,最小化場景、協(xié)議以及軟件升級等帶來的適配開銷。

對于全局緩存的軟件架構(gòu),其整體可以看作一個微內(nèi)核架構(gòu),除了管理工具和ZK等是獨(dú)立進(jìn)程部署以外,為了避免數(shù)據(jù)面和控制面的耦合以及相互影響,我們還將數(shù)據(jù)面和控制面拆分成了獨(dú)立進(jìn)程,這樣就可以避免故障場景等場景的相互耦合與影響。

但是我們知道,服務(wù)并非拆分的越細(xì)越好,為了實(shí)現(xiàn)高性能、低時延,全局緩存數(shù)據(jù)面服務(wù)整體部署成獨(dú)立進(jìn)程,避免復(fù)雜的接口框架,消息通訊帶來的時延和調(diào)用棧的開銷;單純看數(shù)據(jù)面,內(nèi)部采用模塊化解耦設(shè)計,包含多個子系統(tǒng),如多級讀寫Cache、元數(shù)據(jù)索引、數(shù)據(jù)聚合、數(shù)據(jù)持久化等子系統(tǒng),這些子系統(tǒng)之間通過內(nèi)部接口調(diào)用進(jìn)行交互,不需要走消息通訊,所以調(diào)用鏈路短,時延低,并且模塊化的設(shè)計可以使得協(xié)同開發(fā)與迭代變得高效和并行。

在模塊化設(shè)計之上,全局緩存也遵循solid等設(shè)計原則,例如讀寫緩存、元數(shù)據(jù)DB等依賴于持久化層提供的數(shù)據(jù)持久化服務(wù),它們之間的交互遵循接口隔離和依賴倒置等原則,實(shí)現(xiàn)充分解耦,從而將N*M的復(fù)雜度量級降低到N+M。

緩存架構(gòu)創(chuàng)新:讀寫分離、前后臺分離

針對緩存架構(gòu),首先,全局緩存采用了讀寫分離設(shè)計,從而實(shí)現(xiàn)流程、資源、介質(zhì)、冗余策略的解耦,流程解耦例如避免寫緩存刷盤和讀緩存淘汰相互影響,資源解耦例如實(shí)現(xiàn)讀寫緩存獨(dú)立的配額控制,介質(zhì)解耦例如支持RAM/SCM/SSD等不同介質(zhì)加速,冗余策略解耦例如讀寫緩存支持不同的副本策略,這樣就可以提高緩存命中率和資源利用率。

其次,全局緩存采取前后臺分離的設(shè)計模式,將請求處理路徑分為前臺和后臺兩部分,前臺部分保證最快的響應(yīng)應(yīng)用的讀寫請求,應(yīng)用只會感知到前臺部分的執(zhí)行時間,從而實(shí)現(xiàn)極低的應(yīng)用訪問時延。在實(shí)現(xiàn)讀寫分離以及前后臺分離的緩存架構(gòu)的基礎(chǔ)上,可以進(jìn)行緩存的執(zhí)行流編排,全局緩存的架構(gòu)及其執(zhí)行流可以做到從設(shè)計上屏蔽或緩解緩存原生的一致性問題和雪崩、擊穿、穿透等問題。例如,針對一致性問題,數(shù)據(jù)狀態(tài)是在分布式緩存池中維護(hù),客戶端無狀態(tài),不存在源端狀態(tài)同步開銷;全對稱分布式架構(gòu),結(jié)合去中心化路由算法,實(shí)現(xiàn)數(shù)據(jù)精準(zhǔn)路由,數(shù)據(jù)精準(zhǔn)定位到主節(jié)點(diǎn);結(jié)合協(xié)商的執(zhí)行流編排,保障分段逐級命中最新數(shù)據(jù),例如首先命中寫Cache臟數(shù)據(jù),然后L1讀Cache,L2讀Cache,最后才是后端存儲,命中即返回,從設(shè)計上保證不會讀到老數(shù)據(jù)。

高性能、低成本核心算法設(shè)計

在全局緩存特性中,我們應(yīng)用了規(guī)?;慕当驹鲂惴?,這些算法集結(jié)了華為公司海內(nèi)外研究所,以及高校老師的全球智慧,也是全局緩存實(shí)現(xiàn)性能領(lǐng)先、成本領(lǐng)先的核心技術(shù)保障。

高性能算法主要包括讀路徑加速和寫路徑加速兩類,針對寫路徑加速,我們知道,HDD磁盤的尋道和旋轉(zhuǎn)延遲是訪問時延的大頭, HDD對IO數(shù)量和放大非常敏感,以8K數(shù)據(jù)為例,如果是隨機(jī)寫入,一般可以做到單盤100 IOPS量級,而順序?qū)懭胫髁饔脖P可以達(dá)到3W+ IOPS量級,所以上述的緩存前后臺分離架構(gòu)的前提是要與高效的算法配合,不然由于后端刷盤來不及,很快就會導(dǎo)致緩存寫滿轉(zhuǎn)透寫。

為此,通過IO聚合算法實(shí)現(xiàn)全周期Append-only模式的磁盤友好寫入,IO聚合過程可以轉(zhuǎn)化為一個帶約束的組合優(yōu)化問題,并結(jié)合啟發(fā)式方法實(shí)現(xiàn)最小空間浪費(fèi);數(shù)據(jù)聚合以后,需要結(jié)合自研的TeraDB KV數(shù)據(jù)庫實(shí)現(xiàn)小對象到聚合對象的映射管理,命名TeraDB的原因是每臺服務(wù)器管理的元數(shù)據(jù)量上限大概是700GB,接近1TB;針對元數(shù)據(jù)管理,全局緩存采用了LSM的結(jié)構(gòu),LSM對小塊的頻繁更新比較友好,但是由于其分層結(jié)構(gòu),對讀取不友好,針對此問題,全局緩存設(shè)計了自適應(yīng)的布隆過濾器來實(shí)現(xiàn)批量檢測Key存在性,提高讀性能,另外由于非結(jié)構(gòu)化數(shù)據(jù)本身數(shù)據(jù)大小多變,我們還設(shè)計了變長粒度樹,實(shí)現(xiàn)大小對象的自適應(yīng)管理,既提高了查詢效率,又避免了資源浪費(fèi),大幅節(jié)省元數(shù)據(jù)開銷。

那么,實(shí)現(xiàn)了IO聚合與映射就可以了嗎?并非如此,因為數(shù)據(jù)更新和刪除還是以聚合之前的粒度進(jìn)行,那么在數(shù)據(jù)更新或刪除以后,我們需要進(jìn)行垃圾回收來釋放空間,垃圾回收會引入寫放大,這就是我們需要支付的開銷,控制寫放大就成了我們是否可以實(shí)現(xiàn)性能提升的關(guān)鍵因素。

針對讀路徑,我們結(jié)合豐富的模式識別與挖掘算法,例如結(jié)合時間序列預(yù)測挖掘流式模型,多模特征聚類挖掘熱點(diǎn)模型,頻繁模式挖掘得到關(guān)聯(lián)模型,以及粗放式冷熱識別得到工作集關(guān)聯(lián)模型,基于這些Pattern挖掘算法,輔以全局負(fù)反饋調(diào)整,可以實(shí)現(xiàn)精準(zhǔn)的模式挖掘以及預(yù)取門限、預(yù)取長度等參數(shù)的自適應(yīng)整定,在特征不明顯的多源混合場景實(shí)現(xiàn)70%以上緩存命中率,模式較為規(guī)整的負(fù)載下實(shí)現(xiàn)接近100%的緩存命中率。

算法創(chuàng)新思路之一:理論為基石,探究算法極限

舉兩個示例,第一個是剛才提到的如何實(shí)現(xiàn)理論最優(yōu)的寫放大,針對垃圾回收寫放大問題,工業(yè)界一般認(rèn)為最優(yōu)回收算法,或者說寫放大最小的回收算法,是貪心算法,所以在優(yōu)化寫放大過程中不存在算法設(shè)計,只有數(shù)據(jù)結(jié)構(gòu)設(shè)計,例如是通過分級鏈,還是通過優(yōu)先隊列去管理回收對象。

但其實(shí)并非如此,針對這個問題,全局緩存研發(fā)團(tuán)隊結(jié)合學(xué)術(shù)論文的分析,實(shí)現(xiàn)了基于邏輯時鐘驅(qū)動的垃圾回收建模推導(dǎo),并通過主動分區(qū)實(shí)現(xiàn)理論最優(yōu)寫放大算法和數(shù)據(jù)結(jié)構(gòu)設(shè)計,推導(dǎo)發(fā)現(xiàn)在均勻Workload負(fù)載下,貪心算法確實(shí)是最優(yōu)的,原因在于均勻Workload下面其不具備后效性;但是在非均勻Workload下面,貪心算法并不是最優(yōu)的,而我們知道真實(shí)的業(yè)務(wù)負(fù)載基本都是非均勻Workload。

具體的推導(dǎo)過程是我們將每次數(shù)據(jù)更新寫入當(dāng)成邏輯時鐘,來驅(qū)動系統(tǒng)的狀態(tài)進(jìn)行變化,狀態(tài)主要就是每個聚合對象的垃圾量,然后套用Lambert方程進(jìn)行時空特征建模,得到垃圾生成模型,轉(zhuǎn)換成最優(yōu)化問題并求取數(shù)值解,實(shí)現(xiàn)OP超供容量的主動分區(qū);這樣,在非均勻Workload下,結(jié)合主動分區(qū)實(shí)現(xiàn)最優(yōu)OP配額控制,得到理論最優(yōu)解,從右側(cè)圖中可以看出寫放大收益可以達(dá)到30%以上,并且比CB等復(fù)雜算法的效果更好。

算法創(chuàng)新思路之二:算法與架構(gòu)配合,最大化算法效果

針對讀路徑加速算法示例,我們不單獨(dú)講算法原理,來切換一個視角,主要介紹下如何通過預(yù)取算法與預(yù)取架構(gòu)配合,最大化發(fā)揮前面提到的智能預(yù)取、數(shù)據(jù)淘汰等算法的效果。

在預(yù)取架構(gòu)方面,全局緩存創(chuàng)新性的提出Client端推薦引擎與Server端執(zhí)行引擎分離的智能預(yù)取架構(gòu),相對于業(yè)界流行的分布式緩存預(yù)取模式,兼具單機(jī)推薦的高效&準(zhǔn)確性,以及緩存池的高資源利用率。

(1)作為對比,相對于標(biāo)號1 Server端本地推薦這種模式,由于我們的數(shù)據(jù)未經(jīng)源端打散,推薦引擎天然具備全局Trace視圖,從而可以進(jìn)行全局精準(zhǔn)推薦,同時由于推薦引擎部署在客戶端,在共享卷等場景,也不會發(fā)生多源擾鄰,可以精準(zhǔn)匹配用戶Workload。

(2)相對于標(biāo)號2的Server端中心化推薦這種模式,可以做到不存在單點(diǎn)故障,還可以減少數(shù)據(jù)推送和執(zhí)行策略拉取兩跳網(wǎng)絡(luò)開銷,如圖中黃色箭頭所示,從而避免緩存?zhèn)蚊?,所謂的偽命中指的是已經(jīng)下發(fā)預(yù)取請求,由于推薦、執(zhí)行鏈路過長導(dǎo)致請求到達(dá)時,預(yù)取數(shù)據(jù)還未加載到緩存。

針對成本目標(biāo),BoostKit全局緩存通過EC Turbo、數(shù)據(jù)壓縮、數(shù)據(jù)壓緊等創(chuàng)新算法,提升分布式存儲有效容量,幫助用戶降低成本。EC Turbo支持4+2~22+2大比例EC,用戶可用容量提升2~2.75倍;自研的GLZ數(shù)據(jù)壓縮算法結(jié)合原理級、結(jié)構(gòu)級、指令級三級優(yōu)化,實(shí)現(xiàn)對比LZ4、gZip等業(yè)界流行算法壓縮率高30%,并且系統(tǒng)性能也可以提高30%,從而實(shí)現(xiàn)成本、性能雙收益;數(shù)據(jù)壓緊算法配合壓縮算法一起使用,通過減少壓縮后數(shù)據(jù)因數(shù)據(jù)對齊產(chǎn)生的補(bǔ)零空間浪費(fèi),實(shí)現(xiàn)更緊湊的數(shù)據(jù)落盤,壓縮率能夠繼續(xù)提升30%。

總結(jié)來說,鯤鵬BoostKit全局緩存結(jié)合EC Turbo、數(shù)據(jù)壓縮、數(shù)據(jù)壓緊等算法突破,相對于開源方案可以實(shí)現(xiàn)3倍以上用戶可用容量提升,大幅節(jié)省TCO;后續(xù)還將推出全局?jǐn)?shù)據(jù)重刪特性,進(jìn)一步提升數(shù)據(jù)縮減率,并覆蓋備份存儲等場景。

目前,鯤鵬BoostKit全局緩存與某大型運(yùn)營商開展了聯(lián)合創(chuàng)新,分別采用3臺X86服務(wù)器和3臺鯤鵬服務(wù)器組成2個服務(wù)集群,其他硬件保持相同,然后進(jìn)行緩存命中極限性能測試。測試數(shù)據(jù)顯示,全局緩存端到端性能達(dá)到14W IOPS/節(jié)點(diǎn),以及1ms穩(wěn)定時延;相對來說,X86硬件+開源BCache+開源Ceph,則為1.2W IOPS/節(jié)點(diǎn),同時時延只能做到26ms,全局緩存實(shí)現(xiàn)了10倍的性能優(yōu)勢。

如果要了解更多的全局緩存相關(guān)的部署使用方法和學(xué)習(xí)資源,登錄hikunpeng.com——鯤鵬社區(qū)BoostKit專區(qū)獲取詳細(xì)信息。


極客網(wǎng)企業(yè)會員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2022-07-08
架構(gòu)與算法創(chuàng)新,讓分布式存儲煥然一新!
分布式存儲在數(shù)據(jù)存儲產(chǎn)業(yè)中的占比越來越高,得益于分布式Scale-out的高擴(kuò)展性,以及高速網(wǎng)絡(luò)技術(shù)的發(fā)展,分布式存儲逐漸成為主流,解決海量跨源、跨域、跨協(xié)議的非結(jié)構(gòu)化數(shù)據(jù)“存得下”,“管得好”以及高效互通的問題。企業(yè)用戶希望從分布式存儲獲取哪些能力呢,可以概括為五點(diǎn):高...

長按掃碼 閱讀全文