本發(fā)明涉及內(nèi)存數(shù)據(jù)庫的備份恢復(fù)技術(shù)領(lǐng)域,具體地說涉及一種面向內(nèi)存更新密集型程序的hourglass和piggyback算法,都屬于輕量級檢查點算法的一種。
背景技術(shù):
一大類應(yīng)用涉及到數(shù)據(jù)密集型的更新操作,他們大多數(shù)都會追求瞬時的響應(yīng)、高吞吐和高可用的性能。比如說在20世紀(jì)末,大型證券交易所(比如上海證券交易所)的后臺電子交易系統(tǒng)(ets)的性能已經(jīng)達(dá)到了100000個事務(wù)每秒,并且能保證在災(zāi)難恢復(fù)的時候事務(wù)零損失。還有更多的例子,比如大型在線游戲(mmos)和足以支持黑色星期五的性能場景的電商系統(tǒng)。這些數(shù)據(jù)更新密集型的程序通常采用內(nèi)存計算的技術(shù)實現(xiàn)。其中一種策略是采用內(nèi)存數(shù)據(jù)庫,它可以提供更快和相對磁盤數(shù)據(jù)庫可預(yù)測的性能優(yōu)勢(因為數(shù)據(jù)直接可在內(nèi)存中訪問)。
內(nèi)存數(shù)據(jù)庫的高可用性依賴于一個更加精密的恢復(fù)子系統(tǒng)。由于針對磁盤數(shù)據(jù)庫(drdb)的傳統(tǒng)恢復(fù)機制并沒有特殊針對更新密集型的程序,如果直接采用以前的恢復(fù)系統(tǒng)而不做任何修改,整個系統(tǒng)的性能可能受到恢復(fù)系統(tǒng)的限制?;诖耍覀冋J(rèn)為內(nèi)存數(shù)據(jù)庫的恢復(fù)系統(tǒng),尤其是事務(wù)日志和檢查點子系統(tǒng),需要被重新設(shè)計。
對于事務(wù)日志,由于內(nèi)存數(shù)據(jù)庫的高吞吐量性能,單位時間內(nèi)會產(chǎn)生更多的日志,因此會加重io的開銷,為了阻止事務(wù)日志成為系統(tǒng)性能的瓶頸,許多相關(guān)地優(yōu)化方法被提出,比如加速io性能(借助新型硬件),降低io頻率(事務(wù)組提交策略),或者減少io的大小(日志壓縮,日志重寫)。這部分的研究目前比較充分。
對于檢查點技術(shù),我們可以通過周期性生成快照并截斷日志來達(dá)到縮小日志的目的。顯然地,檢查點生成的頻率越頻繁越快就越好,好處是兩次檢查點間生成的日志量相對更小。然而,如此頻繁的執(zhí)行檢查點帶來的額外開銷是不可忽視的。首先,由于檢查點的執(zhí)行導(dǎo)致延時增加會對系統(tǒng)吞吐量和響應(yīng)時間有很大的影響。其次,不同于磁盤檢查點,在數(shù)據(jù)刷入磁盤之前,內(nèi)存檢查點需要在內(nèi)存內(nèi)維護一個完全一致的數(shù)據(jù)拷貝。不恰當(dāng)?shù)奶幚砜赡軐?dǎo)致延時的明顯抖動,甚至于系統(tǒng)停轉(zhuǎn)。
串行事務(wù)處理模型下的一致性檢查點算法。要求檢查點算法既能備份一致性數(shù)據(jù),而且不會有過大的吞吐量損失,它的難點在于如何盡可能快的在內(nèi)存中生成一致性內(nèi)存快照,然后異步的備份數(shù)據(jù)到磁盤。最直接的算法是
據(jù)我們所知,只有少量研究涉及到lockfree的一致性檢查點算法,典型的工作是tuancao提出了兩個waitfree的檢查點算法,zigzag和pingpong。主要的思路是通過利用額外的內(nèi)存和比特位數(shù)組去避免鎖的使用,而且可以消除延時抖動現(xiàn)象。不幸的是當(dāng)數(shù)據(jù)量很大的時候,zigzag依然會有很嚴(yán)重的抖動現(xiàn)象。pingpong算法需要3到4倍的內(nèi)存占用,并且依賴于一種冗余寫入的方式。盡管大容量高速的物理內(nèi)存已經(jīng)大量出現(xiàn),盡量少的使用內(nèi)存,不論從價格還是能源角度都是合理的,尤其是對于更新密集型程序。因此,綜合考慮內(nèi)存開銷和性能(低延時,均勻延時分布,快速恢復(fù)),設(shè)計輕量級的無鎖的內(nèi)存檢查點算法很有必要。
技術(shù)實現(xiàn)要素:
針對上述現(xiàn)有技術(shù)的缺陷,本發(fā)明提供一種面向內(nèi)存更新密集型程序的hourglass和piggyback算法,都屬于輕量級檢查點算法的一種。能夠解決現(xiàn)有技術(shù)的不足,有更好的高可用性。
為實現(xiàn)上述目的,本發(fā)明所采取的技術(shù)方案是:
一種面向內(nèi)存更新密集型程序的hourglass算法,包括如下步驟:
s1、假設(shè)更新密集型程序會周期性的達(dá)到一個一致性的狀態(tài),用tick=1/t的概念描述事務(wù)的周期性達(dá)到一致性狀態(tài)的特性,其中t是tick的持續(xù)時間;一個tick代表的是數(shù)據(jù)集兩次達(dá)到一致性狀態(tài)的時間點之間的間隔;
s2、在時刻t,假設(shè)數(shù)據(jù)d的狀態(tài)用dt表示,d是內(nèi)存中的數(shù)據(jù)集;一個檢查點c負(fù)責(zé)維護dt的一個緊湊的數(shù)據(jù)快照到磁盤設(shè)備中,但得保證是在t+tc時刻之前,其中tc是檢查點的執(zhí)行周期;
s3、將數(shù)據(jù)d抽象為一個連續(xù)的內(nèi)存空間,按照內(nèi)存頁的形式組織;任何額外的用于完成檢查點的內(nèi)存區(qū)域,用
s4、模擬imdb的恢復(fù)系統(tǒng)為updater線程和dumper線程兩個并發(fā)線程,d和
s5、將周期性的檢查分為prepare階段和dump階段兩個階段;dt檢查點的實際生成時刻在每個dump階段的結(jié)束時刻,tp和td分別表示prepare和dump階段的時長;執(zhí)行檢查點的總時間開銷to=tp+td不會超過檢查點周期的時間tc=tp+k(k∈n+)也就是說to≤tc;
s6、利用pingpong的指針交換技術(shù)和zigzag的比特位檢查技術(shù)來獲取一個均勻的訪問延時但還能保證只需兩份的內(nèi)存,數(shù)據(jù)集d和影子拷貝數(shù)據(jù)
s7、在一個檢查周期內(nèi),用于更新的數(shù)據(jù)集(d或者
s8、指針交換發(fā)生在每一個檢查點的開始時段;為確保updater線程不讀臟數(shù)據(jù),額外的標(biāo)志位數(shù)據(jù)
作為對上述技術(shù)方案的改進,updater線程代表更新密集型程序,dumper線程負(fù)責(zé)周期性的執(zhí)行檢查點。
本發(fā)明還提供一種面向內(nèi)存更新密集型程序的piggyback算法,包括如下步驟:
s1、將指針pu和pd分別指向d和
pu和pd分別指向d和
s2、在第二個檢查點開始,指針pu和pd發(fā)生交換,按照全量的方式備份當(dāng)前pd指向的d的數(shù)據(jù);同時,
s3、定義額外的dumper::writetoonline()函數(shù)。負(fù)責(zé)將pd最新狀中最新的數(shù)據(jù)覆蓋pu中相應(yīng)位置的數(shù)據(jù)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有的優(yōu)點和積極效果是:
本發(fā)明的面向內(nèi)存更新密集型程序的hourglass和piggyback算法,其優(yōu)秀性能來源于在updater和dumper線程之間的指針交換技術(shù),它可以避免大量數(shù)據(jù)拷貝。它周期性的發(fā)生updater和dumper線程的角色交換,就好像沙漏一樣,可以被周期性無止境的復(fù)用,一旦上面的部分為空的時候交換上下角色??梢該碛懈俚膬?nèi)存和基本沒有抖動的延時效果。
上述兩種算法,都屬于輕量級檢查點算法的一種,hourglass結(jié)合了目前最好的兩個算法zigzag和pingpong,從而利用兩個的優(yōu)點指針交換和比特位標(biāo)志。piggyback算法提高性能通過提供一種全量快照,從而可以支持實時olap和oltp的應(yīng)用。其具有更小的內(nèi)存占用、全量快照開銷、更小的延時、更均勻的延時的優(yōu)點。
具體實施方式
下面將結(jié)合本發(fā)明實施例,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
本發(fā)明的面向內(nèi)存更新密集型程序的hourglass算法,包括如下步驟:
s1、數(shù)據(jù)集d和影子拷貝數(shù)據(jù)
s2、在第一個檢查周期內(nèi),用于更新的數(shù)據(jù)集d用“pu”指針表示,另一份數(shù)據(jù)集用于備份的用“pd”指針表示。同時,updater更新數(shù)據(jù)時,都需要設(shè)置
s3、指針交換發(fā)生在下一個檢查點的開始時段;為確保updater線程不讀臟數(shù)據(jù),額外的標(biāo)志位數(shù)據(jù)
作為對上述技術(shù)方案的改進,本發(fā)明還提供一種面向內(nèi)存更新密集型程序的piggyback算法,包括如下步驟:
s1、將指針pu和pd分別指向d和
pu和pd分別指向d和
s2、在第二個檢查點開始,指針pu和pd發(fā)生交換,按照全量的方式備份當(dāng)前pd指向的d的數(shù)據(jù);同時,
s3、定義額外的dumper::writetoonline()函數(shù);用于修正pu內(nèi)的數(shù)據(jù),在檢查點開始時刻保證最新的數(shù)據(jù)狀態(tài)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有的優(yōu)點和積極效果是:
本發(fā)明的面向內(nèi)存更新密集型程序的hourglass和piggyback算法,其優(yōu)秀性能來源于在updater和dumper線程之間的指針交換技術(shù),它可以避免大量數(shù)據(jù)拷貝。它周期性的發(fā)生updater和dumper線程的角色交換,就好像沙漏一樣,可以被周期性無止境的復(fù)用,一旦上面的部分為空的時候交換上下角色??梢該碛懈俚膬?nèi)存和基本沒有抖動的延時效果。
上述兩種算法,都屬于輕量級檢查點算法的一種,hourglass結(jié)合了目前最好的兩個算法zigzag和ping-pong,從而利用兩個的優(yōu)點指針交換和比特位標(biāo)志。piggyback算法提高性能通過提供一種全量快照,從而可以支持實時olap和oltp的應(yīng)用。其具有更小的內(nèi)存占用、全量快照開銷、更小的延時、更均勻的延時的優(yōu)點。
以上顯示和描述了本發(fā)明的基本原理、主要特征和本發(fā)明的優(yōu)點。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實施例的限制,上述實施例和說明書中描述的只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下本發(fā)明還會有各種變化和改進,這些變化和改進都落入要求保護的本發(fā)明范圍內(nèi)。本發(fā)明要求保護范圍由所附的權(quán)利要求書及其等同物界定。