王利朋 胡明生 賈志娟 張 玉
(鄭州師范學(xué)院信息科學(xué)與技術(shù)學(xué)院 鄭州 450044)
QoS(Quality of Service)即配額,為服務(wù)系統(tǒng)提供了針對(duì)不同用戶或者不同數(shù)據(jù)流的不同優(yōu)先級(jí)服務(wù)的能力。在計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域中,QoS能夠在滿足用戶需求的前提下,提供了避免網(wǎng)絡(luò)延遲和擁塞的能力[1~2];在電信領(lǐng)域,尤其在電話、電視、視頻會(huì)議等一些對(duì)服務(wù)質(zhì)量要求很高的多媒體服務(wù)領(lǐng)域,QoS能夠根據(jù)不同需求定制服務(wù),提供不同優(yōu)先級(jí)服務(wù)能力;在存儲(chǔ)領(lǐng)域,QoS能夠根據(jù)系統(tǒng)配置,將IO數(shù)據(jù)流按照優(yōu)先級(jí)進(jìn)行資源分配,提高了存儲(chǔ)的服務(wù)質(zhì)量[3~4]。
云計(jì)算時(shí)代,資源調(diào)度是一項(xiàng)非常困難的研究課題,這是由于數(shù)據(jù)中心規(guī)模龐大、資源類型復(fù)雜、以及云計(jì)算構(gòu)件具有可變性和不可預(yù)測(cè)性[5]。作為云計(jì)算公有基礎(chǔ)設(shè)施之一的云存儲(chǔ),對(duì)于資源有限的場(chǎng)景來(lái)說(shuō),如何根據(jù)用戶對(duì)存儲(chǔ)性能的需求進(jìn)而為用戶提供滿足其需求的服務(wù)便成為一種重要的研究課題。一般QoS限定的對(duì)象有IOPS、帶寬、時(shí)延、抖動(dòng)、丟包率等,具體在分布式存儲(chǔ)領(lǐng)域,常用的主要是帶寬和IOPS,而限定的指標(biāo)主要有權(quán)重(weight)、預(yù)留(reservation)、上限(limit)。
作為近年來(lái)熱門的統(tǒng)一分布式存儲(chǔ)系統(tǒng),Ceph已在科研領(lǐng)域得到廣泛關(guān)注。Ceph本質(zhì)上是一個(gè)分布式對(duì)象存儲(chǔ)系統(tǒng),它首次提出了一種通過(guò)計(jì)算來(lái)獲取存儲(chǔ)位置的數(shù)據(jù)分配的算法,稱為CRUSH算法,具有良好的容錯(cuò)自修復(fù)能力[6~8],與大多數(shù)存儲(chǔ)系統(tǒng)采用表結(jié)構(gòu)來(lái)維護(hù)數(shù)據(jù)到存放位置映射關(guān)系的實(shí)現(xiàn)不同[9~11],上述方法避免了因查詢?cè)獢?shù)據(jù)服務(wù)器而引入性能瓶頸的問(wèn)題,同時(shí)緩解了增刪存儲(chǔ)設(shè)備時(shí)帶來(lái)的數(shù)據(jù)遷移問(wèn)題。李翔對(duì)CRUSH算法和其對(duì)象存儲(chǔ)服務(wù)進(jìn)行了詳細(xì)的分析,指出了Ceph在擴(kuò)展性和可靠性方面,相對(duì)于現(xiàn)有的存儲(chǔ)系統(tǒng)具備較大的優(yōu)勢(shì)[12]。作為一個(gè)PB級(jí)的開(kāi)源系統(tǒng),Ceph已在工業(yè)圈得到廣泛應(yīng)用[13]。
實(shí)現(xiàn)QoS的一般方法都是統(tǒng)計(jì)每個(gè)連接傳輸?shù)臄?shù)據(jù)量,然后根據(jù)預(yù)定義的流量額度對(duì)傳輸進(jìn)行控制[14]。Mrittika等提出一種分布式存儲(chǔ)中實(shí)現(xiàn)動(dòng)態(tài)QoS的方法[15],該方法首先確定存儲(chǔ)節(jié)點(diǎn)的能力,并度量達(dá)到目標(biāo)服務(wù)質(zhì)量所關(guān)聯(lián)的性能指標(biāo),然后動(dòng)態(tài)地確定分布式存儲(chǔ)集群中計(jì)算設(shè)備的配置信息以實(shí)現(xiàn)定制服務(wù)的目的,本方法通過(guò)調(diào)度物理層資源進(jìn)而動(dòng)態(tài)實(shí)現(xiàn)QoS。
思科改進(jìn)了兩種分別稱為shaping和policing的流控方法,這兩種方法均是基于令牌桶算法。policing方法是將超過(guò)限制的流量直接舍棄,輸出的波形呈現(xiàn)出一種具有波峰的鋸齒,而shaping的方法是將數(shù)據(jù)直接緩存起來(lái),然后按照時(shí)間序列以一定速率發(fā)送出去,輸出的波形是一種平滑曲線[16]。這兩種方法作為一種網(wǎng)絡(luò)層資源調(diào)度算法,主要應(yīng)用于數(shù)據(jù)中心的帶寬控制。Ajay等[17]提出了一種分布式存儲(chǔ)系統(tǒng)中對(duì)權(quán)重、預(yù)留和上限進(jìn)行IO資源調(diào)度的dmClock算法,該算法能夠?qū)M足預(yù)留和上限的IO資源按照權(quán)重進(jìn)行資源調(diào)度。
具體在云計(jì)算環(huán)境中,針對(duì)共享存儲(chǔ)設(shè)備的虛擬機(jī)不能規(guī)劃資源以及系統(tǒng)管理員不能為運(yùn)行同一服務(wù)的不同虛擬機(jī)分配共享資源的問(wèn)題,Ajay等[18]提出一種稱為SRP的IO資源分配方法,SRP可以將一組虛擬機(jī)劃分到一個(gè)邏輯組中,邏輯組又稱為pool,SRP能夠支持邏輯組級(jí)或虛擬機(jī)級(jí)別的權(quán)重、預(yù)留和上限的限定。在SSD的復(fù)合IO應(yīng)用場(chǎng)景中,當(dāng)多虛擬機(jī)共享SSD資源時(shí),存在資源利用率低的問(wèn)題,尤其在突發(fā)IO流應(yīng)用場(chǎng)景中,Yang等[19]提出了一種稱為GREM的方法,GREM將SSD作為一種二級(jí)緩存,將整個(gè)SSD切分長(zhǎng)期域和短期域,動(dòng)態(tài)調(diào)整長(zhǎng)期域中運(yùn)行的虛擬機(jī)的IO的預(yù)留,以更充分地調(diào)用SSD資源。
由于分布式存儲(chǔ)系統(tǒng)存在集群節(jié)點(diǎn)拓?fù)浣Y(jié)構(gòu)多樣化、資源調(diào)度復(fù)雜等問(wèn)題,實(shí)現(xiàn)能夠同時(shí)對(duì)IOPS和帶寬進(jìn)行輕量級(jí)資源調(diào)度的方法十分有必要,本文將針對(duì)這一問(wèn)題進(jìn)行相應(yīng)的研究。
目前在分布式存儲(chǔ)系統(tǒng)中實(shí)現(xiàn)QoS存在兩種可能的實(shí)現(xiàn)算法,分別是經(jīng)典令牌桶算法和dmClock算法[17],下面將分別對(duì)其進(jìn)行討論。
經(jīng)典令牌桶算法實(shí)現(xiàn)分布式存儲(chǔ)QoS功能,原理就是通過(guò)監(jiān)督進(jìn)入存儲(chǔ)網(wǎng)絡(luò)端口的流量速率,對(duì)超出流量進(jìn)行懲罰,調(diào)配各客戶端IO,使IO輸出輸入性能在預(yù)設(shè)范圍內(nèi)。令牌桶中令牌會(huì)在后臺(tái)按照預(yù)設(shè)速度自動(dòng)添加,令牌桶具有最大容量限制,如果令牌桶中的令牌數(shù)超過(guò)了該最大容量,新添加的令牌將會(huì)溢出。需要說(shuō)明的是,令牌桶中令牌更新過(guò)程與限定IO過(guò)程一般是異步執(zhí)行的。
經(jīng)典令牌桶算法的原理示意圖如圖1所示。
圖1 令牌桶算法圖解
經(jīng)典令牌桶算法一般實(shí)現(xiàn)在客戶端,一旦出現(xiàn)故障,只會(huì)影響當(dāng)前用戶的數(shù)據(jù)傳輸,而不會(huì)將故障傳播給其他用戶,另外算法復(fù)雜度低,且由于沒(méi)有在分布式存儲(chǔ)服務(wù)端節(jié)點(diǎn)引入額外操作,對(duì)底層存儲(chǔ)系統(tǒng)的性能幾乎無(wú)影響。
然而由于會(huì)存在以下三個(gè)問(wèn)題,是無(wú)法直接將經(jīng)典令牌桶算法應(yīng)用到分布式存儲(chǔ)中來(lái)限定IOPS和帶寬。首先添加令牌流程依賴于系統(tǒng)時(shí)間,如果系統(tǒng)時(shí)間出現(xiàn)異常,會(huì)導(dǎo)致經(jīng)典令牌桶算法出現(xiàn)故障。其次在限定帶寬時(shí),一次IO可能會(huì)需要一批令牌,如果令牌數(shù)不能滿足本次IO需求,本次IO便會(huì)被阻塞,只有等到桶中生成足夠多令牌后,數(shù)據(jù)流才會(huì)恢復(fù)執(zhí)行,這一阻塞過(guò)程導(dǎo)致底層存儲(chǔ)資源不能得到有效使用,當(dāng)表現(xiàn)在上層客戶端時(shí),此時(shí)出現(xiàn)的現(xiàn)象就是IO劇烈抖動(dòng)。最后在限定帶寬時(shí),IO數(shù)據(jù)長(zhǎng)度并不固定,而經(jīng)典令牌桶算法存在最大容量限制,如果某次IO數(shù)據(jù)長(zhǎng)度超過(guò)令牌桶最大容量,則會(huì)導(dǎo)致本次IO因?yàn)椴粫?huì)獲得足夠令牌而無(wú)限期阻塞。
為了解決分布式存儲(chǔ)資源調(diào)度問(wèn)題,近些年來(lái)提出了dmClock算法,能夠在分布式存儲(chǔ)系統(tǒng)中實(shí)現(xiàn)Qos功能,且功能相對(duì)于經(jīng)典令牌桶算法更為強(qiáng)大。dmClock算法能夠?qū)Ψ植际酱鎯?chǔ)I∕O資源的三種指標(biāo)進(jìn)行限定,分別是:權(quán)重(weight,縮寫(xiě)w,客戶端占共享IO資源的比重)、預(yù)留(reservation,縮寫(xiě)r,客戶端獲得的最小IO資源)、上限(limit,縮寫(xiě)l,客戶端可獲得的最高IO資源)。例如在對(duì)存儲(chǔ)系統(tǒng)IOPS進(jìn)行限定時(shí),dmClock算法首先保證輸出IOPS的最小值,對(duì)于沒(méi)有超過(guò)最大IOPS的IO資源,按權(quán)重再重新進(jìn)行分配。
dmClock算法主要步驟如下[20]:
1)指定參數(shù)值,包括r、w和l,服務(wù)端據(jù)此計(jì)算出IO請(qǐng)求預(yù)期被處理的時(shí)間標(biāo)簽。
2)服務(wù)端處理滿足r標(biāo)簽的請(qǐng)求。
3)服務(wù)端處理滿足l標(biāo)簽請(qǐng)求前提下的w標(biāo)簽請(qǐng)求。
這里的時(shí)間標(biāo)簽是指某個(gè)請(qǐng)求預(yù)期被服務(wù)器處理的時(shí)間戳,如果以qi表示客戶機(jī)i的指定參數(shù)值,表示客戶機(jī)i的第r個(gè)請(qǐng)求對(duì)應(yīng)的時(shí)間標(biāo)簽,則其計(jì)算公式如下所示:
在應(yīng)用到分布式存儲(chǔ)領(lǐng)域時(shí),作為一種分布式調(diào)度算法,dmClock本身也存在一定問(wèn)題。首先dmClock算法需要實(shí)現(xiàn)在存儲(chǔ)系統(tǒng)服務(wù)端底層的數(shù)據(jù)分派模塊中,一旦該算法出現(xiàn)錯(cuò)誤,會(huì)導(dǎo)致整個(gè)存儲(chǔ)系統(tǒng)崩潰,導(dǎo)致數(shù)據(jù)丟失,影響系統(tǒng)可用性;其次dmClock算法需要依賴數(shù)據(jù)存儲(chǔ)端和客戶端協(xié)同進(jìn)行限流處理,算法復(fù)雜度高,會(huì)降低存儲(chǔ)系統(tǒng)的整體性能。
提出一種開(kāi)源分布式存儲(chǔ)系統(tǒng)Ceph塊存儲(chǔ)的QoS方案,方案以改進(jìn)后的經(jīng)典令牌桶算法進(jìn)行實(shí)現(xiàn),能夠?qū)OPS和帶寬同時(shí)進(jìn)行限流。為了方便論述,新算法稱為dbstb算法(Distributed Block Storage based on Token Bucket,dbstb),新算法包含了IOPS限流和帶寬限流兩個(gè)部分。
dbstb算法吸收了經(jīng)典令牌桶算法中的概念,令牌是控制IO是否執(zhí)行的標(biāo)記,令牌桶是存儲(chǔ)令牌的存儲(chǔ)池,令牌桶具有最大容量。為了方便論述,對(duì)幾個(gè)重要參數(shù)進(jìn)行標(biāo)記。
1)限定速率V:限定單位時(shí)間內(nèi)發(fā)送數(shù)據(jù)的速度。
2)令牌桶最大容量MAX:用于突發(fā)流量控制。
3)時(shí)間間隔Interval:向令牌桶添加令牌的間隔時(shí)間。
4)等待時(shí)間β:所需令牌不能滿足時(shí),IO阻塞的時(shí)間。
為了使阻塞時(shí)間最小,同時(shí)盡可能使當(dāng)前令牌數(shù)滿足本次IO所需數(shù)目,β的最小值滿足以下條件:βmin=max{bs/V,Interval},其中 bs為本次IO的數(shù)據(jù)長(zhǎng)度。
在進(jìn)行限流操作時(shí),假如需要n支令牌,首先判斷當(dāng)前令牌桶是否存在n支令牌,如果當(dāng)前令牌桶中令牌數(shù)少于n,則本次IO將會(huì)被阻塞,阻塞時(shí)間為β。如果當(dāng)前令牌桶中令牌數(shù)等于或超過(guò)n,則從中取出n支令牌,并允許本次IO執(zhí)行。在限流的同時(shí),令牌桶中令牌添加過(guò)程作為后臺(tái)線程異步執(zhí)行,每隔1/Interval秒向令牌桶中添加V×Interval支令牌。如果令牌桶中的令牌數(shù)超過(guò)了MAX,新添加令牌將會(huì)溢出,也就是說(shuō)令牌桶填滿令牌的時(shí)間是由令牌桶最大容量、令牌填充速度和令牌流出速度三個(gè)方面共同決定的。
dbstb算法具備一定的應(yīng)對(duì)突發(fā)IO洪流的作用,也就是允許某種程度的突發(fā)傳輸。在存儲(chǔ)領(lǐng)域,這種場(chǎng)景包括了開(kāi)機(jī)風(fēng)暴等。具體在dbstb算法中,是通過(guò)MAX參數(shù)進(jìn)行控制。
需要說(shuō)明的是,對(duì)于不同限流場(chǎng)景,令牌對(duì)應(yīng)的指標(biāo)并不相同,一般以字節(jié)數(shù)、比特?cái)?shù)或IO次數(shù)等為目標(biāo)對(duì)象。例如在限定IOPS場(chǎng)景中,若IOPS上限為100,此時(shí)一次IO對(duì)應(yīng)了一支令牌。若限定此時(shí)令牌桶最大大小為120,在對(duì)客戶IO進(jìn)行限定時(shí),dbstb算法保證每秒向令牌桶中添加100支令牌,如果桶中令牌數(shù)量超過(guò)120,生成的令牌將會(huì)被丟棄。將令牌桶最大容量設(shè)置為120,表示允許最大為120 IOPS的IO突發(fā)洪流。當(dāng)用戶每發(fā)送一次IO,令牌桶中令牌減少1,如果令牌桶中令牌為空,則本次IO就會(huì)被阻塞一定時(shí)間。dbstb算法在限定帶寬時(shí),此時(shí)一支令牌對(duì)應(yīng)1Byte。如果當(dāng)前IO的數(shù)據(jù)長(zhǎng)度為100Bytes,則必須要從令牌桶中取100支令牌才能允許本次IO繼續(xù)執(zhí)行。
dbstb算法主要是對(duì)Ceph塊存儲(chǔ)進(jìn)行IOPS和帶寬的上限控制,且對(duì)讀寫(xiě)操作分別進(jìn)行限定,需要說(shuō)明的是本研究對(duì)混合讀寫(xiě)操作同樣適用。
dbstb算法對(duì)Ceph進(jìn)行適配時(shí),會(huì)為每一個(gè)卷操作分別定義四個(gè)令牌桶,分別為讀IOPS令牌桶、寫(xiě)IOPS令牌桶、讀帶寬令牌桶和寫(xiě)帶寬令牌桶。在Ceph中,用戶可以為指定卷設(shè)定讀寫(xiě)操作對(duì)應(yīng)的IOPS和帶寬上限值,限定值作為卷屬性被存儲(chǔ)起來(lái),這樣即使限流模塊出現(xiàn)故障,用戶配置也不會(huì)丟失。Ceph中有相應(yīng)的默認(rèn)配置參數(shù),也就是模板參數(shù),用戶也可以不用顯式設(shè)定對(duì)應(yīng)的選項(xiàng)值。dbstb算法對(duì)應(yīng)的模板參數(shù)包括讀IOPS限定值riops、讀帶寬限定值rbw、寫(xiě)IOPS限定值wiops、寫(xiě)帶寬限定值wbw以及QoS開(kāi)關(guān)選項(xiàng)sqos,其中sqos∈{True,F(xiàn)alse},True代表開(kāi)啟 QoS,F(xiàn)alse代表關(guān)閉QoS。
在將dbstb算法適配到Ceph時(shí),創(chuàng)建卷時(shí)候,首先讀取集群限流模板參數(shù){riops,rbw,wiops,wbw,sqos},然后將模板參數(shù)作為卷屬性存儲(chǔ)到存儲(chǔ)集群中。刪除卷的時(shí)候,不需要引入額外的操作,Ceph原始流程會(huì)刪除限流參數(shù)信息。在修改限流參數(shù)時(shí),Ceph提供了相應(yīng)的操作接口,可方便修改限流配置信息。
在讀寫(xiě)卷數(shù)據(jù)時(shí),卷對(duì)應(yīng)的限流配置會(huì)從底層存儲(chǔ)中讀取上來(lái),并用這些值初始化對(duì)應(yīng)的令牌桶。在基于dbstb算法對(duì)卷數(shù)據(jù)讀寫(xiě)IO執(zhí)行限流操作時(shí),步驟如下所示。
1)讀取卷限流配置,如果不存在,則從模板參數(shù)中獲取,并以卷屬性形式寫(xiě)入到后端存儲(chǔ)中。
2)判斷sqos是否為True,如果為False跳至第五步。
3)基于dbstb算法IOPS限定步驟對(duì)IOPS執(zhí)行限流。
4)基于dbstb算法帶寬限定步驟對(duì)帶寬執(zhí)行限流。
5)將IO數(shù)據(jù)下發(fā)至底層存儲(chǔ)中。
其中步驟3)和步驟4)將會(huì)在后面兩節(jié)中分別進(jìn)行闡述。
卷限流模塊實(shí)現(xiàn)在Ceph的讀寫(xiě)API接口中,以Ceph 10.2.3為例,塊存儲(chǔ)讀寫(xiě)數(shù)據(jù)的API接口如表1所示。執(zhí)行成功一次API函數(shù),對(duì)存儲(chǔ)系統(tǒng)來(lái)說(shuō),就是執(zhí)行成功一次IO操作,此時(shí)便對(duì)應(yīng)了1個(gè)IOPS。如果用戶在1s內(nèi)成功調(diào)用10次IO函數(shù),此時(shí)存儲(chǔ)系統(tǒng)端的測(cè)出的IOPS便是10。對(duì)帶寬而言,則是對(duì)應(yīng)于這些API接口函數(shù)中單位時(shí)間中數(shù)據(jù)塊累加長(zhǎng)度。本文在對(duì)IOPS和帶寬進(jìn)行限定時(shí),需要在這些接口函數(shù)中進(jìn)行實(shí)現(xiàn),需要說(shuō)明的是在對(duì)帶寬限定時(shí),為了減少性能抖動(dòng),需要分塊操作后執(zhí)行帶寬限流操作。
表1 Ceph的RBD端讀寫(xiě)接口
客戶端在每發(fā)送一次IO,便需要在IOPS令牌桶中申請(qǐng)一支令牌,如果申請(qǐng)不到,本次IO便會(huì)被阻塞,直到獲取到足夠令牌后,本次IO才會(huì)恢復(fù)執(zhí)行。
dbstb算法限定IOPS流程中更新令牌的算法如下所示:
其中:MAXiops=αiops×Viops,MAXiops代表IOPS令牌桶中令牌的最大容量,αiops主要用于應(yīng)對(duì)IO洪峰,αiops≥1。Tiops(i)代表第i次IO操作時(shí)令牌桶中的令牌數(shù)量,另外令Tiops(1)=0。Viops為IOPS限定值,代表向令牌桶中添加令牌的速度。Interval代表本次IO操作與上一次IO操作之間的時(shí)間差,以秒為單位,第一次迭代時(shí),該數(shù)值為1。
dbstb算法限定IOPS的算法步驟如下所示。
1)判斷是否開(kāi)啟QoS功能,如果沒(méi)有,則跳轉(zhuǎn)至最后一步繼續(xù)執(zhí)行。
2)根據(jù)式(2)更新IOPS令牌桶中令牌數(shù)量。
3)判斷IOPS令牌桶中令牌數(shù)是否為0,如果是,則休眠β秒后,返回步驟2)繼續(xù)執(zhí)行。
4)IOPS令牌桶中令牌數(shù)減1。
5)將本次IO下發(fā)至底層存儲(chǔ)系統(tǒng)中。
當(dāng)令牌桶中元素個(gè)數(shù)為0時(shí),則睡眠 βs,β≥max{bs/Viops,Interval}。如果 β 過(guò)大,令牌桶中令牌消耗完后,會(huì)導(dǎo)致客戶端的IO在βs內(nèi)下發(fā)不下去,進(jìn)而導(dǎo)致IO出現(xiàn)性能抖動(dòng),為了避免這種情況,一般設(shè)置 β≤1。
迭代剛開(kāi)始時(shí),也就是i=1時(shí),給定Viops,Tiops(1)初始化為0,此時(shí) Interval初始化為1,一般將αiops=1.2,β=1,此時(shí) MAXiops=1.2Viops。
dbstb算法在對(duì)帶寬進(jìn)行限流時(shí),一個(gè)Byte對(duì)應(yīng)一支令牌,每發(fā)送m Bytes的數(shù)據(jù),便需要m支令牌,否則便會(huì)阻塞IO,一直等到令牌桶中生成所需的令牌數(shù)為止。需要說(shuō)明的是,與IOPS限定策略不同,帶寬限定策略是在分布式存儲(chǔ)讀寫(xiě)接口函數(shù)完成分片之后,在對(duì)每片數(shù)據(jù)下發(fā)IO的時(shí)候再執(zhí)行帶寬控制流程。
dbstb算法限定帶寬流程中令牌桶更新步驟與IOPS令牌桶更新的策略類似,其更新算法如下所示。
其中bs(i+1)為第i+1次迭代時(shí)IO數(shù)據(jù)的長(zhǎng)度,Tbw(i)代表第i次迭代時(shí)帶寬令牌桶中的令牌數(shù)量,Vbw表示帶寬限定值,Interval代表本次IO操作與上一次IO操作之間的時(shí)間差,以秒為單位,第一次迭代時(shí),該數(shù)值為1。abw主要用于IO洪峰,αbw≥1。
需要說(shuō)明的是,帶寬令牌桶最大容量并不是固定的,每次迭代時(shí)令牌桶最大容量都是變化的。這是由于如果某次IO的數(shù)據(jù)長(zhǎng)度超過(guò)了令牌桶最大容量,本次IO操作將會(huì)永遠(yuǎn)無(wú)法獲得足夠令牌數(shù),導(dǎo)致本次IO無(wú)限阻塞。為了解決該問(wèn)題,帶寬令牌桶最大容量不是固定的,而是根據(jù)數(shù)據(jù)塊大小和Vbw的變化而動(dòng)態(tài)變化的。需要說(shuō)明的是,如果IO數(shù)據(jù)塊大小波動(dòng)較大,就會(huì)導(dǎo)致令牌桶最大容量變化劇烈,進(jìn)而導(dǎo)致上層IO性能劇烈抖動(dòng)。另外如果本次IO數(shù)據(jù)量大,就會(huì)導(dǎo)致需求令牌數(shù)較多,進(jìn)而導(dǎo)致阻塞時(shí)間長(zhǎng),從而使得下層存儲(chǔ)資源一直處于空閑狀態(tài)。綜合上述兩種原因,需要先對(duì)數(shù)據(jù)塊進(jìn)行分片,然后再執(zhí)行帶寬控制策略。
dbstb算法限定帶寬的算法步驟如下所示。
1)IO數(shù)據(jù)塊按固定大小進(jìn)行分片。
2)依次遍歷分片數(shù)據(jù),并根據(jù)式(3)更新帶寬令牌桶中令牌數(shù)量。
3)判斷當(dāng)前令牌桶中令牌數(shù)是否滿足所需數(shù)量,不滿足則阻塞。
4)帶寬令牌桶減去所需的令牌數(shù)。
5)向底層存儲(chǔ)下發(fā)數(shù)據(jù),判斷是否遍歷完所有分片數(shù)據(jù),如果沒(méi)有,則返回步驟2)繼續(xù)執(zhí)行。
在將dbstb算法適配到Ceph中時(shí),可能會(huì)出現(xiàn)由于芯片故障或者惡意軟件等原因?qū)е孪到y(tǒng)時(shí)間被修改的情形,這樣會(huì)導(dǎo)致分布式存儲(chǔ)軟件Ceph出現(xiàn)故障而中斷業(yè)務(wù),影響系統(tǒng)的可用性。本文新提出的dbstb算法是基于一定時(shí)間間隔來(lái)更新令牌的,實(shí)現(xiàn)中是以開(kāi)機(jī)時(shí)間進(jìn)行計(jì)時(shí),并不是采用系統(tǒng)時(shí)間,這樣也就意味著即使系統(tǒng)時(shí)間被惡意篡改,也不會(huì)影響算法的正常執(zhí)行流程。
dbstb算法只在當(dāng)前會(huì)話空間中生效,不同會(huì)話之間是相互獨(dú)立的,這樣也就意味著新算法僅對(duì)當(dāng)前連接有效,一旦限流模塊出現(xiàn)故障并導(dǎo)致連接斷開(kāi),再次重連后,dbstb算法重置系統(tǒng)環(huán)境并繼續(xù)執(zhí)行限流操作,故障不會(huì)傳遞給其他連接,同時(shí)也不會(huì)影響重連后數(shù)據(jù)操作流程。
dbstb算法會(huì)在創(chuàng)建和打開(kāi)卷時(shí)進(jìn)行初始化,若當(dāng)前卷正在使用過(guò)程中,用戶重新設(shè)置算法相關(guān)參數(shù),設(shè)置會(huì)立即生效,這一過(guò)程無(wú)須重啟服務(wù),不會(huì)影響正常的業(yè)務(wù)流程,提高了存儲(chǔ)系統(tǒng)的可用性。
一般情況下,上層客戶端一般會(huì)通過(guò)異步或同步IO模型向存儲(chǔ)系統(tǒng)發(fā)送數(shù)據(jù)。當(dāng)使用異步模型發(fā)送IO數(shù)據(jù)時(shí),使用經(jīng)典令牌桶算法或某些改進(jìn)算法在進(jìn)行限流操作時(shí),就會(huì)出現(xiàn)IO抖動(dòng)問(wèn)題,影響分布式存儲(chǔ)系統(tǒng)IO性能的穩(wěn)定性。
由于IOPS和帶寬之間存在一定的對(duì)應(yīng)關(guān)系,也就是 IOPS×bs=BandWidth,當(dāng)同時(shí)對(duì)IOPS和帶寬進(jìn)行限定時(shí),某一時(shí)刻可能只有一項(xiàng)指標(biāo)在起作用。例如塊大小為4K,IOPS限定為50,帶寬設(shè)定為512KB∕s,IOPS換算出對(duì)應(yīng)的帶寬值是200KB∕s,取其最小值生效,顯然此時(shí)只有IOPS限定值起作用。為了方便論述,下文進(jìn)行分析時(shí),將以IOPS為例進(jìn)行說(shuō)明,帶寬的分析類似。
當(dāng)客戶端異步IO引擎一次下發(fā)的IO數(shù)量Num剛超過(guò)2Viops時(shí),檢測(cè)出的存儲(chǔ)系統(tǒng)IOPS數(shù)值會(huì)出現(xiàn)0、2Viops、0、2Viops…的劇烈抖動(dòng)現(xiàn)象,下面將對(duì)此現(xiàn)象進(jìn)行分析。經(jīng)典令牌桶算法進(jìn)行IOPS限定時(shí),執(zhí)行一次IO操作,便會(huì)消耗掉令牌桶中的一支令牌,如果當(dāng)前令牌桶中沒(méi)有令牌,那么IO操作便會(huì)被阻塞。若異步IO一次性下發(fā)的IO請(qǐng)求數(shù)超過(guò)了令牌添加速度的兩倍,必將會(huì)導(dǎo)致某一時(shí)間段內(nèi)令牌桶中令牌數(shù)不能滿足本次IO的需求量,進(jìn)而阻塞IO,導(dǎo)致這一時(shí)間段內(nèi)測(cè)量出的IOPS為0。此外由于經(jīng)典令牌桶算法具有保證IOPS平均值等于Viops的特性,因此,實(shí)時(shí)測(cè)試結(jié)果便會(huì)出現(xiàn)上述所看到的劇烈抖動(dòng)現(xiàn)象。
實(shí)際情況中,上層客戶端一次性下發(fā)的IO數(shù)量都在τ=128以下,也就是Num≤τ,下面證明當(dāng)Viops>(τ/2)時(shí),則不會(huì)出現(xiàn)這種劇烈抖動(dòng)現(xiàn)象。
定理1:Num=λViops,Num∈N ,Viops≥0,當(dāng)Num≤τ而且Viops>(τ/2)時(shí),不會(huì)出現(xiàn)劇烈抖動(dòng)現(xiàn)象。
證明:由前面分析可知,若使性能不出現(xiàn)抖動(dòng),應(yīng)滿足0<λ<2,下面按不同情況進(jìn)行分析。
當(dāng)0<λ≤1時(shí),此時(shí) Num≤Viops,可以得知令牌桶添加令牌的速度大于等于用戶一次性下發(fā)的IO數(shù)量,用戶下發(fā)的IO能夠一次性得到處理,此時(shí)不會(huì)出現(xiàn)劇烈抖動(dòng)現(xiàn)象。
綜上可知,當(dāng) Num≤τ而且Viops>(τ/2)時(shí),不會(huì)出現(xiàn)劇烈抖動(dòng)現(xiàn)象。為避免出現(xiàn)劇烈抖動(dòng)現(xiàn)象,推薦IOPS上限的最小值應(yīng)該設(shè)為τ/2=64,也就是Viops>64。
一般使用場(chǎng)景中,滿足用戶業(yè)務(wù)需求的IOPS一般都在100以上,故可將Viops的范圍定義為[100,1000000]。之所以設(shè)置為1000000,是因?yàn)閷?shí)際中很少會(huì)用到這么大數(shù)值,此外也可以避免因用戶誤輸入引發(fā)數(shù)據(jù)越界問(wèn)題。需要說(shuō)明的是,為了衡量引入限流模塊后對(duì)系統(tǒng)性能的影響,可將Viops設(shè)置為最大值1000000,同時(shí)開(kāi)啟QoS功能,此時(shí)雖然限流模塊已打開(kāi),但處于空轉(zhuǎn)狀態(tài)。
在實(shí)際應(yīng)用場(chǎng)景中,由于程序Bug或其它原因可能會(huì)導(dǎo)致卷限流模塊出現(xiàn)故障,可能會(huì)導(dǎo)致IO不能正常下發(fā),嚴(yán)重情況下會(huì)導(dǎo)致連接崩潰。下文將分析dbstb算法即使在故障業(yè)務(wù)場(chǎng)景中,仍然能夠保證數(shù)據(jù)完整性。
上層客戶端的操作系統(tǒng)一般都實(shí)現(xiàn)了IO數(shù)據(jù)恢復(fù)的事務(wù)性機(jī)制,如果存儲(chǔ)端限流模塊出現(xiàn)故障,會(huì)導(dǎo)致存儲(chǔ)端沒(méi)有向客戶端返回讀寫(xiě)成功標(biāo)記,此時(shí)客戶端操作系統(tǒng)仍能保證數(shù)據(jù)的完整性。下面將分兩個(gè)場(chǎng)景對(duì)dbstb算法的數(shù)據(jù)安全性進(jìn)行論述。
如果操作系統(tǒng)在向分布式存儲(chǔ)端發(fā)起IO請(qǐng)求時(shí),如果此時(shí)限流模塊發(fā)生故障并導(dǎo)致會(huì)話中斷,分布式存儲(chǔ)端并沒(méi)有成功下發(fā)IO請(qǐng)求,此時(shí)也不會(huì)向客戶端返回操作成功的消息?;謴?fù)連接后,由于操作系統(tǒng)沒(méi)有收到IO操作成功消息,操作系統(tǒng)會(huì)重新發(fā)送IO請(qǐng)求。
第二個(gè)場(chǎng)景是分布式存儲(chǔ)端成功執(zhí)行IO操作,在向上層客戶端操作系統(tǒng)發(fā)送IO執(zhí)行成功消息之后,限流模塊發(fā)生了故障。由于此時(shí)IO請(qǐng)求已經(jīng)執(zhí)行成功,同時(shí)操作系統(tǒng)也認(rèn)為數(shù)據(jù)已經(jīng)寫(xiě)入到存儲(chǔ)端,故障恢復(fù)后,操作系統(tǒng)同樣能夠正常運(yùn)行。
在對(duì)IOPS和帶寬進(jìn)行限流時(shí),會(huì)存在多種因素會(huì)影響限流效果,例如常見(jiàn)的幾種操作系統(tǒng)都會(huì)合并順序IO,導(dǎo)致在客戶端觀察到的數(shù)值會(huì)高于存儲(chǔ)端測(cè)試出來(lái)的IOPS和帶寬值。如前文分析可知,IOPS、塊大小和帶寬之間存在對(duì)應(yīng)關(guān)系,IOPS和帶寬兩者之間的限流效果會(huì)相互影響。因此,在實(shí)驗(yàn)設(shè)計(jì)時(shí),將會(huì)綜合考慮這些因素,統(tǒng)一環(huán)境配置,為IOPS和帶寬設(shè)計(jì)出對(duì)應(yīng)的測(cè)試方法。
為了避免操作系統(tǒng)合并IO對(duì)實(shí)驗(yàn)結(jié)果的影響,本研究將會(huì)利用FIO工具調(diào)用Ceph的RBD引擎進(jìn)行測(cè)試,同時(shí)只考察隨機(jī)IO。FIO詳細(xì)配置如圖2所示。
圖2 FIO的配置參數(shù)
對(duì)于隨機(jī)讀(randR)、隨機(jī)寫(xiě)(randW)、順序讀(seqR)和順序?qū)懀╯eqW),限流模塊并不能對(duì)其進(jìn)行區(qū)分,因此,對(duì)于IO操作類型,例如讀寫(xiě)、隨機(jī)順序等區(qū)別不做考察。
本實(shí)驗(yàn)將對(duì)常見(jiàn)的三種應(yīng)用場(chǎng)景進(jìn)行測(cè)試,分別是遠(yuǎn)程桌面(Remote Desktop,RD)、在線事務(wù)處理(Online Transaction Processing,OLTP)和數(shù)據(jù)遷移(Data Migration,DM)。對(duì)于這三種業(yè)務(wù)流,RD是一種高IOPS低帶寬應(yīng)用場(chǎng)景,OLTP是一種高IOPS高帶寬應(yīng)用場(chǎng)景,而DM則是高帶寬低IOPS、分塊數(shù)據(jù)較大的應(yīng)用場(chǎng)景。這三種應(yīng)用場(chǎng)景對(duì)應(yīng)的參數(shù)設(shè)置如表2所示,需要注意的是這里的數(shù)值并不代表真實(shí)場(chǎng)景對(duì)應(yīng)的數(shù)值,而只是模擬場(chǎng)景下的實(shí)驗(yàn)參數(shù)。這三種業(yè)務(wù)流,均是采用FIO工具進(jìn)行模擬,在后續(xù)實(shí)驗(yàn)中,將分別在虛擬機(jī)上按照這三種應(yīng)用場(chǎng)景的配置來(lái)執(zhí)行FIO操作,以模擬這三種應(yīng)用場(chǎng)景。
表2 三種應(yīng)用場(chǎng)景對(duì)應(yīng)的配置參數(shù)
在考察dbstb算法性能時(shí),分布式存儲(chǔ)集群采用的硬件和軟件配置環(huán)境如表3所示,搭建集群時(shí)的配置參數(shù)如表4所示。
表3 物理和軟件配置參數(shù)
表4 分布式存儲(chǔ)集群配置參數(shù)
在考察dmClock算法對(duì)存儲(chǔ)系統(tǒng)實(shí)時(shí)性能影響時(shí),dmClock采用的物理環(huán)境和軟件參數(shù)如文獻(xiàn)[12]所示,即虛擬機(jī)采用VMware ESX server,主機(jī) 為 Dell Poweredge 2950 server,2 Intel Xeon 3.0GHz CPU,8GB內(nèi)存,10*HDD,其中主機(jī)采用32 iodepth,集群采用基于FC SAN的EMC CLARiiONCX3-40磁盤存儲(chǔ)陣列。
實(shí)驗(yàn)將重點(diǎn)考察算法對(duì)系統(tǒng)性能的影響,也就是考察相對(duì)性能損失,而不對(duì)絕對(duì)性能損失進(jìn)行分析,因此采用兩套不同物理環(huán)境是具有一定意義的。為了將dbstb和dmClock兩組實(shí)驗(yàn)結(jié)果統(tǒng)一起來(lái)進(jìn)行考察,本文定義了性能損失率這一指標(biāo)。在某一個(gè)時(shí)刻序列 {t0,t1,t2,…,tn} 時(shí)采集到的 IOPS值分別為 {?(t0),?(t1),?(t2),…,?(tn)} ,則時(shí)刻 ti對(duì)應(yīng)的性能損失率為
5.2.1 dbstb算法限流效果分析
三種業(yè)務(wù)流均是在虛擬機(jī)上進(jìn)行模擬仿真,分別用三節(jié)點(diǎn)進(jìn)行模擬。VM1代表第一臺(tái)虛擬機(jī),其上運(yùn)行FIO工具來(lái)模擬執(zhí)行RD業(yè)務(wù)流,VM2代表第二臺(tái)虛擬機(jī),模擬OLTP業(yè)務(wù)流,VM3代表第三臺(tái)虛擬機(jī),模擬DM業(yè)務(wù)流。分布式存儲(chǔ)集群由5塊機(jī)械硬盤組成,1塊機(jī)械硬盤提供的IOPS能力大概為150左右,因此該分布式存儲(chǔ)集群提供的IOPS估計(jì)約為800左右,雙副本場(chǎng)景下,估算性能要除2。經(jīng)過(guò)實(shí)際測(cè)試發(fā)現(xiàn),該集群提供的最大IOPS能力約為350,這也符合上述估計(jì)。本組實(shí)驗(yàn)主要側(cè)重于對(duì)多業(yè)務(wù)場(chǎng)景中限流效果進(jìn)行功能性驗(yàn)證,以衡量dbstb算法是否能夠有效地將性能控制在約定范圍內(nèi)。
測(cè)試流程如下,首先開(kāi)啟虛擬機(jī)VM1執(zhí)行RD業(yè)務(wù)流,此時(shí)先不啟動(dòng)QoS,主要目的是對(duì)分布式存儲(chǔ)系統(tǒng)進(jìn)行預(yù)熱。然后在第60s的時(shí)候,開(kāi)啟QoS,衡量限流模塊在RD業(yè)務(wù)場(chǎng)景中表現(xiàn)。在第130s,開(kāi)啟虛擬機(jī)VM2,執(zhí)行開(kāi)啟QoS流程的OLTP業(yè)務(wù)流,然后在170s,開(kāi)啟虛擬機(jī)VM3,執(zhí)行開(kāi)啟QoS流程的DM業(yè)務(wù)流。
當(dāng)未開(kāi)啟QoS功能時(shí),對(duì)于VM1,可以看到性能抖動(dòng)比較劇烈,這是因?yàn)镃eph內(nèi)部并沒(méi)有做嚴(yán)格的恒流處理,容易受到外部業(yè)務(wù)數(shù)據(jù)流以及存儲(chǔ)集群設(shè)備的影響,進(jìn)而出現(xiàn)性能波動(dòng)的現(xiàn)象。
從圖3實(shí)驗(yàn)數(shù)據(jù)可以看到,在對(duì)VM1執(zhí)行限流操作后,其性能曲線趨于平穩(wěn),在開(kāi)啟VM2和VM3后,兩者的性能曲線均在預(yù)設(shè)值附近,且其波動(dòng)范圍基本上都在15%以內(nèi)。dbstb算法通過(guò)自身的令牌調(diào)度機(jī)制,通過(guò)睡眠這一手段的調(diào)控,能夠有效地平滑IO輸出性能。也就意味著盡管Ceph本身并沒(méi)有提供恒流存儲(chǔ)能力,dbstb算法仍為分布式存儲(chǔ)系統(tǒng)提供了一定的平滑IO輸出性能的能力。
從圖3可以發(fā)現(xiàn),在第60s時(shí),VM1開(kāi)啟了Qos服務(wù),此時(shí)無(wú)須重啟存儲(chǔ)軟件,實(shí)時(shí)IO性能顯示此時(shí)IOPS立即達(dá)到預(yù)設(shè)值附近,中間緩沖時(shí)間少于1s。dbstb算法本身并沒(méi)有建立一個(gè)數(shù)據(jù)緩存,一旦檢測(cè)到配置發(fā)生變化,能夠立即生效,使得其對(duì)配置變化的反應(yīng)十分敏感。
圖3 多業(yè)務(wù)場(chǎng)景下性能結(jié)果
表5代表限流生效后,各應(yīng)用場(chǎng)景下IOPS統(tǒng)計(jì)的平均值。從實(shí)驗(yàn)結(jié)果來(lái)看,各應(yīng)用場(chǎng)景下IOPS均值均在預(yù)設(shè)值附近,而且均小于預(yù)設(shè)值,且平均誤差均在2%以內(nèi),說(shuō)明dbstb算法具有良好的限流能力。
表5 多業(yè)務(wù)場(chǎng)景下限流平均效果
從表5可以看到隨著設(shè)置的IOPS上限值的減少,其平均誤差也隨著減少,這是因?yàn)镃eph本身并不是一個(gè)恒流分布式存儲(chǔ)系統(tǒng),設(shè)置的上限值越大,允許輸出IO的能力范圍越大,性能抖動(dòng)就會(huì)越大,導(dǎo)致平均誤差也就越大。
5.2.2 多業(yè)務(wù)場(chǎng)景下系統(tǒng)性能分析
為了考察dbstb算法和dmClock算法引入后對(duì)存儲(chǔ)系統(tǒng)性能的影響,將采用性能損失率這一指標(biāo)來(lái)對(duì)此進(jìn)行衡量。系統(tǒng)每隔60s開(kāi)啟一次新業(yè)務(wù)流,共五次業(yè)務(wù)流。
在對(duì)比實(shí)驗(yàn)中,上層客戶端業(yè)務(wù)流采用的數(shù)據(jù)分塊大小為4K,IOPS上限為60,帶寬上限為240KB∕s,同樣利用安裝FIO軟件的虛擬機(jī)來(lái)模擬客戶端業(yè)務(wù)環(huán)境。本組實(shí)驗(yàn)之所以采用較小分塊大小數(shù)據(jù)塊,是因?yàn)樵谶@種業(yè)務(wù)場(chǎng)景中,IO輸出性能比較高,對(duì)損失率進(jìn)行評(píng)估時(shí)更為精確。
在對(duì)dbstb算法進(jìn)行考察時(shí),首先開(kāi)啟QoS功能,然后將IOPS和帶寬上限值設(shè)置為最大,即IOPS為 1000000,帶寬 4096000000bytes∕s。上述參數(shù)值均超過(guò)了本實(shí)驗(yàn)中分布式存儲(chǔ)集群提供的最大性能值,其目的是使限流模塊處于空轉(zhuǎn)狀態(tài),這樣便能評(píng)估dbstb模塊對(duì)系統(tǒng)實(shí)時(shí)性能的影響。
在對(duì)dmClock算法進(jìn)行考察時(shí),對(duì)于五次業(yè)務(wù)流,dmClock配置參數(shù) w 為1∶1∶2∶2∶2。
實(shí)驗(yàn)每隔1s采樣一組IOPS數(shù)據(jù),在取得數(shù)據(jù)后,求取最大值,將實(shí)時(shí)IOPS值除以最大IOPS值,并用1減去上述值,進(jìn)而得到實(shí)時(shí)性能損失率。
從圖4可以看到,作為一種實(shí)現(xiàn)在分布式存儲(chǔ)系統(tǒng)底層的算法,dmClock算法本身也存在一定性能波動(dòng),從圖中可以看到,隨著啟動(dòng)業(yè)務(wù)數(shù)量的增加,該算法對(duì)應(yīng)的性能損失率呈現(xiàn)上升趨勢(shì)。到第五個(gè)業(yè)務(wù)流開(kāi)啟后,存儲(chǔ)系統(tǒng)性能損失可達(dá)20%左右。
圖4 dbstb與dmClock算法性能損失對(duì)比
需要說(shuō)明的是,由于緩存、網(wǎng)絡(luò)以及業(yè)務(wù)啟動(dòng)時(shí)間的原因,從加入新業(yè)務(wù)再到業(yè)務(wù)數(shù)據(jù)傳遞到存儲(chǔ)系統(tǒng)中,然后再被檢測(cè)到需要一定的時(shí)間,所以在第120s開(kāi)啟第三個(gè)業(yè)務(wù)后,又等待了10s左右才出現(xiàn)了性能劇烈波動(dòng)。
從圖4可以看到,dbstb算法相對(duì)于dmClock算法抖動(dòng)比較劇烈,一方面由于Ceph系統(tǒng)本身并沒(méi)有提供一套穩(wěn)定數(shù)據(jù)流輸出輸入能力的機(jī)制,導(dǎo)致性能波動(dòng)較大,另外一方面,此時(shí)設(shè)置的實(shí)驗(yàn)參數(shù)導(dǎo)致dbstb算法限流效果并沒(méi)有真正生效,只是在空轉(zhuǎn)。從實(shí)驗(yàn)結(jié)果中可以看到,250s左右dbstb算法的損失率可達(dá)25%左右。然而從損失率曲線總體走向來(lái)看,其平均性能損失率基本保持不變,不會(huì)因引入越來(lái)越多的業(yè)務(wù)流導(dǎo)致存儲(chǔ)系統(tǒng)總體性能下降,而且自引入第五個(gè)業(yè)務(wù)流后,dbstb算法的性能損失率基本控制在5%以內(nèi),其性能損失幾乎可以省略。
之所以出現(xiàn)上述現(xiàn)象,這是dbstb算法和dmClock算法實(shí)現(xiàn)機(jī)制導(dǎo)致的。dbstb算法實(shí)現(xiàn)在客戶端,并沒(méi)有像dmClock算法實(shí)現(xiàn)在存儲(chǔ)系統(tǒng)底端,因此并沒(méi)有影響分布式存儲(chǔ)系統(tǒng)總體存儲(chǔ)能力。dbstb算法不會(huì)使存儲(chǔ)系統(tǒng)總體性能下降,這在對(duì)系統(tǒng)性能要求比較苛刻的存儲(chǔ)場(chǎng)景中,dbstb算法更為適合。
提出了一種在分布式存儲(chǔ)開(kāi)源軟件Ceph塊存儲(chǔ)上控制IOPS和帶寬上限的限流方法,也就是dbstb算法。新算法實(shí)現(xiàn)在上層客戶端,具備較小的開(kāi)發(fā)復(fù)雜度,且不會(huì)降低存儲(chǔ)系統(tǒng)性能。新算法位于用戶會(huì)話空間中,不同會(huì)話空間中限流算法相互獨(dú)立,新算法實(shí)現(xiàn)模塊發(fā)生的故障不會(huì)傳播到其它會(huì)話空間中,具備良好的故障隔離性。新算法解決了帶寬控制中大塊IO不能下發(fā)的問(wèn)題,同時(shí)有效地降低了性能抖動(dòng)問(wèn)題。最后分析了避免性能劇烈抖動(dòng)滿足的理論條件,并對(duì)系統(tǒng)的可用性和數(shù)據(jù)安全性進(jìn)行了分析。實(shí)驗(yàn)結(jié)果顯示,在多業(yè)務(wù)場(chǎng)景中,dbstb算法平均誤差控制在2%以內(nèi),且不影響存儲(chǔ)系統(tǒng)性能。