計(jì)算機(jī)學(xué)院-余參考模板_第1頁
計(jì)算機(jī)學(xué)院-余參考模板_第2頁
計(jì)算機(jī)學(xué)院-余參考模板_第3頁
計(jì)算機(jī)學(xué)院-余參考模板_第4頁
計(jì)算機(jī)學(xué)院-余參考模板_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、性本人鄭重:所呈交的是本人在導(dǎo)師的指導(dǎo)下獨(dú)立進(jìn)行取得的研究成果。除了文中特別加以標(biāo)注的內(nèi)容外,本不包括任何其他個(gè)人或集體已經(jīng)或撰寫的成果作品。本人完全本的法律由本人承擔(dān)。作者簽名:年月日使用書本作者完全了解學(xué)校有關(guān)保障、使用的規(guī)定,同意學(xué)校保留并向有關(guān)管理部門或機(jī)構(gòu)送交的復(fù)印件和,允許被查閱和借閱。本人省級(jí)優(yōu)秀學(xué)士評(píng)選機(jī)構(gòu)將本的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)進(jìn)行檢索,可以采用影印、縮印或掃描等保存和匯編本學(xué)位。本屬于 1、囗,在年后適用本書2、不囗 。(請(qǐng)?jiān)谝陨舷鄳?yīng)方框內(nèi)打“”)作者簽名:年月日導(dǎo)師簽名:年月日摘要隨著網(wǎng)絡(luò)的普及和發(fā)展,許多 Web 應(yīng)用使用 Memcached 緩存數(shù)據(jù)庫的數(shù)據(jù)系

2、統(tǒng)的性能。Memcached 是一個(gè)基于內(nèi)存的分布式緩存系統(tǒng),本身不提來供可靠性方案。在實(shí)際應(yīng)用中,Memcached 的節(jié)點(diǎn)故障會(huì)導(dǎo)致系統(tǒng)的響應(yīng)速度下降、數(shù)據(jù)庫的負(fù)載增加,一個(gè)可行的解決方案是使Memcached 具備可靠性。本文首先介紹了內(nèi)存緩存的研究現(xiàn)狀。然后詳細(xì)介紹了一種基于編碼的面向讀密集的Memcached 可靠性機(jī)制,該機(jī)制基于 Libmemcached 庫,在時(shí)增加對(duì)對(duì)象的類RAID 5 編碼,同時(shí)實(shí)現(xiàn)了時(shí)的數(shù)據(jù)重建操作。此外,本文還利用多個(gè)元數(shù)據(jù)batching 的設(shè)計(jì)思路,對(duì)可靠性機(jī)制進(jìn)行了性能優(yōu)化。測試表明,本文設(shè)計(jì)的Memcached 系統(tǒng)具備了可靠性,達(dá)到了預(yù)期的目標(biāo)

3、。同時(shí),優(yōu)化過程確實(shí)提高了Memcached 可靠性機(jī)制的寫入性能。:Memcached 系統(tǒng),內(nèi)存,可靠性,RAID 5 編碼AbstractWith the popularization and development of the network, many Web applicationsuse Memcached as the cache of database to improve the performance of system.Memcached is anemory distributed cache system, which does not providereliab

4、ility. In practical application, the Memcached node failure will cause the systemto decrease the response rate, increase the load of database. A feasible solution is tomake Memcached have reliability.This prroduthe research situation ofemory cache. And thenroduce a reliability mechanism based on the

5、 erasure coding for a readingensiveMemcached in detail. This mechanism is based on Libmemcached library. It increasesRAID 5s coding procedure of items during the storage pros, and data recoveryprocedure during the reros. In addition, this pr also uses a design thought ofbatching multiple metadao opt

6、imize the performance of this reliability mechanism.Tests showst the Memcached system designed by this pr has got reliability,this research has reached the expected goal. At the same time, the optimizationpros does improve the write performance of the reliability mechanism forMemcached.Key Words: Me

7、mcached system,emory store, reliability, RAID 5 coding目錄摘要IAbstractII11.1緒論1課題背景11.21.3課題目的和意義2國內(nèi)外研究概況31.41.5預(yù)期目標(biāo)4本文的研究內(nèi)容與組織522.12.2.2.3.2.4.關(guān)鍵理論技術(shù)6內(nèi)存中的鍵/值系統(tǒng)6Memcached6Libmemcached7系統(tǒng)可靠性82.5.2.6.RAID 5 編碼9開發(fā)環(huán)境102.7.3本章小結(jié)11可靠性設(shè)計(jì)與優(yōu)化123.13.23.33.43.53.644.14.2系統(tǒng)結(jié)構(gòu)12可靠性設(shè)計(jì)13功能模塊設(shè)計(jì)14功能模塊實(shí)現(xiàn)17系統(tǒng)優(yōu)化22本章小結(jié)25測試

8、與分析26測試環(huán)境26功能測試274.34.455.15.2性能分析30本章小結(jié)32總結(jié)與展望33全文總結(jié)33展望33謝34致參考文獻(xiàn)351緒論隨著大規(guī)模 web 應(yīng)用的快速發(fā)展,傳統(tǒng)的基于磁盤的系統(tǒng)已經(jīng)越來越不能滿足 web 應(yīng)用的需求。Web 應(yīng)用比傳統(tǒng)應(yīng)用更加注重低延遲和高吞吐,特別是大規(guī)模 web 應(yīng)用。這促進(jìn)了內(nèi)存緩存的發(fā)展。emory 緩存系統(tǒng)的 web 應(yīng)用來說,數(shù)據(jù)庫不再是對(duì)于使用數(shù)據(jù)的第一途徑,而是內(nèi)存。內(nèi)存的低延遲和高吞吐確實(shí)給 web 應(yīng)用帶來了方便,但是內(nèi)存的易失性也給基于內(nèi)存的系統(tǒng)帶來了各種。1.1課題背景起初,Dangaeractive 公司的Brad Fitzpa

9、tric 等人為LiveJournal開發(fā)了名為 Memcached 的基于內(nèi)存的分布式緩存系統(tǒng),用來減輕力。它是一套開源,其守護(hù)進(jìn)程使用C/C+語言編寫。數(shù)據(jù)庫的壓web 應(yīng)用通常將數(shù)據(jù)存放在關(guān)系數(shù)據(jù)庫(RDBMS)中,客戶端從數(shù)據(jù)庫中獲取數(shù)據(jù)。當(dāng)量較少時(shí),RDBMS 足以勝任。但隨著量的增加,數(shù)據(jù)量也相應(yīng)增加,從而導(dǎo)致 RDBMS 負(fù)載增加、數(shù)據(jù)庫響應(yīng)減慢、延遲增大等問題。Memcached 就是被設(shè)計(jì)出來解決這個(gè)問題的,它是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),通過在內(nèi)存中緩存數(shù)據(jù)來減少數(shù)據(jù)庫的次數(shù),從而提高動(dòng)態(tài)、數(shù)據(jù)庫驅(qū)動(dòng)的速度。Memcached 的一般用途如圖 1-1 所示。Memc

10、ached 的輕量級(jí)和分布式使得它具有很高的易用性、適應(yīng)性和可擴(kuò)展性,在后來的不斷發(fā)展中,越來越多的 web 應(yīng)用使用它來提高自身性能,這也促進(jìn)了它的研究和發(fā)展?,F(xiàn)在不止大規(guī)模 web 應(yīng)用使用它提供服務(wù),一些中小規(guī)模的 web 應(yīng)用也使用它來系統(tǒng)的性能。內(nèi)存的易失性對(duì)基于內(nèi)存的 Memcached 來說是一個(gè),但是為了維持Memcached 的輕量級(jí)特性,以及考慮到 Memcached 只是作為一個(gè)緩存服務(wù)器,因此即使內(nèi)存具有易失性,Memcached 也并不提供可靠性。圖 1-1 Memcached 的用途1.2課題目的和意義上一節(jié)提到,Memcached 不具備可靠性,這是為了進(jìn)一步系統(tǒng)

11、性能的考慮,而且 Memcached 系統(tǒng)故障并不會(huì)導(dǎo)致數(shù)據(jù)真的丟失,因?yàn)閿?shù)據(jù)的本體在RDBMS 或其它備份中。盡管許多系統(tǒng)有持久的備份使得在宕機(jī)后仍能保持?jǐn)?shù)據(jù)的持久性,為緩存提供可靠性仍然是必要的。舉一個(gè)例子,在一個(gè)由三臺(tái) Memcached 緩存服務(wù)器和數(shù)據(jù)庫組成的集群中,假定 Memcached中率為 90%(每臺(tái)服務(wù)器分別為 30%中率),一般情況下,只有 10%的數(shù)據(jù)需要由 RDBMS 提供服務(wù)。而當(dāng)某臺(tái)Memcached 服務(wù)器發(fā)生故障后,剩下的兩臺(tái) Memcached 服務(wù)器在短期內(nèi)只能提供 60%中率,那就意味著將有 40%的數(shù)據(jù)需要由 RDBMS 完成。在總體量不變的前提下,

12、數(shù)據(jù)庫的負(fù)載達(dá)到正常情況下的 4 倍,這大大增加了數(shù)據(jù)庫的負(fù)載。因此,對(duì)于中小型的 Memcached 集群來說,實(shí)現(xiàn)可靠性是很必要的。雖然會(huì)犧牲系統(tǒng)無故障時(shí)的一部分性能,卻會(huì)大大提高系統(tǒng)發(fā)生故障時(shí)的性能。顯然,節(jié)點(diǎn)故障對(duì)中小型集群的影響也要大于大型集群,與此同時(shí),中小規(guī)模系統(tǒng)實(shí)現(xiàn)可靠性相對(duì)來說也更容易,系統(tǒng)性能損失更小。1.3國內(nèi)外研究概況隨著基于內(nèi)存的分布式系統(tǒng)的不斷發(fā)展,許許多多的新技術(shù)被應(yīng)用到系統(tǒng)中,也有許多成熟技術(shù)的整合優(yōu)化??梢钥吹?,不同于基于磁盤的系統(tǒng)的低延遲設(shè)計(jì),設(shè)計(jì)者們將注意力的放在系統(tǒng)的可用性、持久性、容錯(cuò)性和可擴(kuò)展性等設(shè)計(jì)上。在對(duì)系統(tǒng)的延遲產(chǎn)生盡可能小的基礎(chǔ)上,設(shè)計(jì)者們在

13、努力地提emory升系統(tǒng)在其它方面的性能。系統(tǒng)24,通過將數(shù)據(jù)從元數(shù)據(jù)分離以提供高效和等人設(shè)計(jì)了一個(gè)塊可用的備份。這使得系統(tǒng)可以對(duì)備份的子集進(jìn)行磁盤,同時(shí)使用完全的元數(shù)據(jù)來確保請(qǐng)求被正確執(zhí)行并加速緩慢或損壞備份的恢復(fù)。Welch Brent 等人設(shè)計(jì)了Panasas 文件系統(tǒng)(PanFS)26,采用了對(duì)對(duì)象設(shè)備(Object storage devi,OSDs)的并行冗余,單文件RAID,分布式元數(shù)據(jù)管理,一致的客戶端緩存,文件鎖定服務(wù),和集群管理,來提供一個(gè)可擴(kuò)展的、可容錯(cuò)的、高性能的分布式系統(tǒng)。系統(tǒng)的集群式設(shè)計(jì)和客戶端驅(qū)動(dòng)的 RAID 通過對(duì)分布在 OSD節(jié)點(diǎn)的文件數(shù)據(jù)進(jìn)行并行,來提供可擴(kuò)

14、展性。RAID 恢復(fù)由元數(shù)據(jù)管理器集群進(jìn)行,同時(shí)分塊的數(shù)據(jù)布局使得 RAID的重建速率隨著系統(tǒng)的增大而擴(kuò)大。PanFS 一方面使用單個(gè)文件的糾刪碼來保障大于 64KB 的文件,另一方面本。元數(shù)據(jù)和小文件來最小化元數(shù)據(jù)更新的成系統(tǒng)17,是一個(gè)對(duì)大規(guī)模數(shù)據(jù)集Ousterhout John 等人設(shè)計(jì)的RAMCloud提供低延遲的系統(tǒng)。它是一個(gè)emory 的 key-value系統(tǒng),從而可以提供低延遲和大容量。RAMCloud 通過在二級(jí)保持備份副本來確?;贒RAM 的數(shù)據(jù)的持久性。RAMCloud 不保留數(shù)據(jù)的多個(gè)副本;取而代之的是,它通過快速從故障中恢復(fù)(1 到 2s)來提供高可用性。RAMCl

15、oud 的故障恢復(fù)機(jī)制驅(qū)動(dòng)整個(gè)集群的資源并行運(yùn)行,因此它的恢復(fù)性能由集群的大小決定。MitcChristopher 等人使用單向的直接數(shù)據(jù)存取技術(shù)(Remote Direct系統(tǒng)15。在Memory Acs,RDMA)來實(shí)現(xiàn)一個(gè)快速的、CPU 高效的鍵值這個(gè)系統(tǒng)中,客戶端通過RDMA 從服務(wù)器的內(nèi)存中直接數(shù)據(jù)來進(jìn)行g(shù)ets操作,而gets 操作通常是鍵值系統(tǒng)負(fù)載的主要來源。相反,put 操作由服務(wù)器提供以簡化同步內(nèi)存的工作。等人設(shè)計(jì)了一種新的讀寫鎖(reader-writer locks,rwlocks)14-讀寫鎖(passive reader-writer locks,prwlock)來提

16、供可擴(kuò)展的讀性能,同時(shí)對(duì) TSO架構(gòu)來說很小的寫延遲。Prwlock 的關(guān)鍵是一個(gè)在多個(gè)非連通的器和一個(gè)待定的寫入器間的基于版本的一致協(xié)議。Prwlock 利用內(nèi)存一致性的有界過時(shí)來避免器的公共通道上的原子操作和內(nèi)存屏障,同時(shí)對(duì)的器進(jìn)行消息傳遞(如IPI)使得寫入鎖的獲取延遲是有界的。系統(tǒng)3,綜合利用了以上等人的原理和方法。張恒等人設(shè)計(jì)的 CocytusCocytus 將元數(shù)據(jù)/鍵從值中分離來實(shí)現(xiàn)空間高效性和高可用性的鍵值,對(duì)于小型、分散的數(shù)據(jù)(如元數(shù)據(jù)和鍵)等使用主備份,而對(duì)于相關(guān)聯(lián)的大數(shù)據(jù)(如值)使用糾刪碼。Cocytus 由于了元數(shù)據(jù)和密鑰,所以可以進(jìn)行恢復(fù),從而提供持續(xù)的數(shù)據(jù)??偟膩砜?/p>

17、,這些系統(tǒng)有著許多共同點(diǎn):基于內(nèi)存(emory),分布式(distributed),鍵/值(key-value),可靠性(availability)。但在這些共性的特點(diǎn)上,各個(gè)系統(tǒng)又適應(yīng)于各自的應(yīng)用環(huán)境而被賦予了不同的個(gè)性:有的系統(tǒng)存在二級(jí)備份,有的則沒有;有的系統(tǒng)使用冗余或編碼來實(shí)現(xiàn)可靠性,有的綜合二者實(shí)現(xiàn)可靠性;有的系統(tǒng)基于大規(guī)模集群甚至數(shù)據(jù)中心,有的則適用于小規(guī)模集群。此外,還有很多為了提高系統(tǒng)性能的特色技術(shù)??傊?,一個(gè)系統(tǒng)的功能和性能,通常是為了迎合其針對(duì)的應(yīng)用環(huán)境,以上系統(tǒng)都有各自的適用環(huán)境。本次設(shè)計(jì)的內(nèi)容是面向讀密集應(yīng)用的 Memcached 可靠性實(shí)現(xiàn),由于是讀密集應(yīng)用,對(duì)對(duì)象的

18、修改操作很少。綜合來看,使用更為節(jié)省空間的編碼技術(shù)實(shí)現(xiàn)可靠性顯然更為合理。1.4預(yù)期目標(biāo)利用編碼技術(shù)實(shí)現(xiàn)Memcached 系統(tǒng)的可靠性,并對(duì)修改后的系統(tǒng)進(jìn)行優(yōu)化,從而降低實(shí)現(xiàn)可靠性對(duì)系統(tǒng)性能的影響。1.5本文的研究內(nèi)容與組織本課題研究的是基于編碼的 Memcached 可靠性實(shí)現(xiàn),主要針對(duì)的是為讀密集應(yīng)用服務(wù)的中小規(guī)模的Memcached 集群。本課題通過修改 Memcached 的客戶端的 Libmemcached 庫源碼,使其對(duì)由的對(duì)象進(jìn)行類 RAID 5 編碼,從而使得的數(shù)據(jù)具備持久性。還在處理讀操作的過程中附加了數(shù)據(jù)恢復(fù)的功能,可以利用數(shù)據(jù)持久性恢復(fù)丟失的數(shù)據(jù)。此外,本課題還對(duì)這一系

19、列的附加操作進(jìn)行了一定的優(yōu)化處理。本課題與同類課題最大的不同在于,被修改的對(duì)象不是 Memcached 源碼,而是Memcached 的客戶端庫Libmemcached。這樣處理的好處是,Memcached 服務(wù)端的特性得到了完整保留,對(duì)于有不同需求的客戶端, 只需修改對(duì)應(yīng)的Libmemcached 庫的配置即可,而不需要對(duì)服務(wù)端進(jìn)行修改。具體的研究內(nèi)容有:1)2)熟悉Memcached 系統(tǒng)的結(jié)構(gòu)和功能,掌握 Libmemcached 的結(jié)構(gòu)和原理。熟悉RAID 5 編碼的原理,掌握奇偶校驗(yàn)編碼的原理和使用。3)4)熟悉系統(tǒng)可靠性原理,掌握利用編碼實(shí)現(xiàn)可靠性的方法。修改Libmemcache

20、d 的源碼,實(shí)現(xiàn)預(yù)期的功能。本文的內(nèi)容組織如下:第一章 緒論。說明課題的研究背景、目的、意義以及國內(nèi)外的研究現(xiàn)狀等,最后對(duì)本次研究的目標(biāo)和的結(jié)構(gòu)作簡明。第二章 介紹本次研究中的關(guān)鍵理論和技術(shù),包括 Memcached 和 Libmemcached的介紹以及系統(tǒng)可靠性和RAID 5 編碼的相關(guān)原理等。第三章 詳細(xì)介紹實(shí)現(xiàn)Memcached 可靠性的過程,以及對(duì)系統(tǒng)的優(yōu)化過程。第四章 對(duì)實(shí)現(xiàn)的Memcached 系統(tǒng)進(jìn)試與分析,主要是功能和性能的測試與分析。第五章 進(jìn)行工作總結(jié),本次課題實(shí)現(xiàn)的系統(tǒng)的優(yōu)缺點(diǎn),并由此提出進(jìn)一步的改進(jìn)方向。2關(guān)鍵理論技術(shù)本次設(shè)計(jì)的關(guān)鍵理論技術(shù)有:內(nèi)存中的鍵/ 值Libm

21、emcached,系統(tǒng)可靠性,RAID5。系統(tǒng), Memcached,2.1內(nèi)存中的鍵/值系統(tǒng)鍵值(key/value)系統(tǒng)使用關(guān)聯(lián)陣列(也叫或字典)作為其基本數(shù)據(jù)模型。在該模型中,數(shù)據(jù)被表示為一系列的鍵-值對(duì),同時(shí)使每個(gè)可能的鍵(key)在這個(gè)集合中最多出現(xiàn)一次。鍵-值模型是最簡單的 non-trivial(非平凡的)數(shù)據(jù)模型之一,通常會(huì)實(shí)現(xiàn)更豐富的數(shù)據(jù)模型作為該模型的擴(kuò)展。鍵值模型可以擴(kuò)展成一個(gè)離散順序的模型,它可以按字典的順序維持密鑰(key)。這種擴(kuò)展是強(qiáng)計(jì)算的,因?yàn)樗梢杂行У貦z索可選擇鍵的范圍。鍵-值可以使用從最終一致性到可串行性的一致性模型。一些數(shù)據(jù)庫支持鍵的排序。目前有各種各樣

22、的硬件實(shí)現(xiàn),部分使用者在內(nèi)存(RAM)中數(shù)據(jù),而其它一些人使用固態(tài)硬盤或磁盤。隨著內(nèi)存容量的和價(jià)格的下降,在內(nèi)存中的鍵-值系統(tǒng)開始流行起來。鍵-值模型是內(nèi)存模型可以使內(nèi)存中的系統(tǒng)更高效的運(yùn)行,可以說,鍵-值的基礎(chǔ)。Memcached 就是一個(gè)典型的使用鍵-值模型的內(nèi)存系統(tǒng)。2.2.MemcachedMemcached 是基于內(nèi)存的分布式內(nèi)存對(duì)象緩存系統(tǒng),是一個(gè)鍵-值系統(tǒng)。Memcached 主要被用作 web 應(yīng)用數(shù)據(jù)庫的緩存,從而降低數(shù)據(jù)庫的負(fù)載,的速度。Memcached的基本對(duì)象是一個(gè)密鑰(key)唯一的鍵-值對(duì),即在一個(gè)Memcached 服務(wù)器中同一 key 最多出現(xiàn)一次。在一個(gè)有多

23、個(gè) Memcached 服務(wù)器的集群中,Memcached 的客戶端 API 使用一個(gè)一致性的哈希算法將待的鍵-值對(duì)的密鑰進(jìn)行hash 計(jì)算后散列到不同的服務(wù)器上。在該鍵-值對(duì)時(shí),使用同樣的一致性哈希算法,即可找到該對(duì)象的位置。當(dāng)緩存空間滿了以后,Memcached 服務(wù)器會(huì)使用 LRU 算法來為新對(duì)象騰出空間。Memcached 是高性能的分布式緩存服務(wù)器,其主要特點(diǎn)如下:基于libevent 的事件處理。libevent 是一個(gè) C 語言編寫的、輕量級(jí)的、基于事件觸發(fā)的網(wǎng)絡(luò)庫,它使用 select、epoll、kqueue 等事件處理功能來管理事件機(jī)制。使用 libevent 庫的 Mem

24、cached 在 linux 系統(tǒng)上有很高的性能。通信協(xié)議簡單。Memcached 的服務(wù)端和客戶端間通信使用的是簡單的基于文本行的協(xié)議?;趦?nèi)存。Memcached 的數(shù)據(jù)全部在內(nèi)存中,這使得它對(duì)數(shù)據(jù)的處理(或?qū)懭耄┧俣群芸?。同時(shí)由于內(nèi)存的易揮發(fā)性,Memcached 存儲(chǔ)的數(shù)據(jù)不具備久性。分布式的通信。雖然 Memcached 是一個(gè)分布式系統(tǒng),但其服務(wù)端并不具備分布式功能,換言之,Memcached 的服務(wù)端相互獨(dú)立存在,不會(huì)互相通信。Memcached 的分布式完全由客戶端實(shí)現(xiàn)。Memcached 的這些特性為這次課題的設(shè)計(jì)與優(yōu)化提供了基礎(chǔ)。2.3. LibmemcachedLibme

25、mcached 是一個(gè)開源的Memcached 的客戶端庫,由 C 語言和C+實(shí)現(xiàn),具有低內(nèi)存占用率、線程安全等特點(diǎn),并提供對(duì) Memcached 服務(wù)端功能的全面支持2。它具備以下功能:支持同步和異步傳輸一致性哈希和分布可調(diào)的哈希算法來匹配密鑰(keys)支持對(duì)大對(duì)象的本地一個(gè)對(duì) API 的完整的參考指南和文檔管理Memcached 網(wǎng)絡(luò)的工具C 語言編寫的客戶端程序通過 Libmemcached 庫,可以方便快捷地Memcached 服務(wù)器。Libmemcached 庫就是介于客戶端和服務(wù)端的“翻譯”工具:對(duì)于客戶端的指令,Libmemcached 庫將其“翻譯”為服務(wù)端可以理解的通信語言

26、并發(fā)送到服務(wù)端,再將服務(wù)端返回的結(jié)果返回給客戶端。此外,Libmemcached 還負(fù)責(zé)維持客戶端和服務(wù)端的哈希一致性,即客戶端需要的對(duì)象的 key 會(huì)經(jīng)由 Libmemcached 進(jìn)行一致性哈希而散列到對(duì)應(yīng)的服務(wù)器上,而客戶端需要的對(duì)象也經(jīng)由 Libmemcached 對(duì) key 進(jìn)行一致性哈希而得到其最可能的服務(wù)器位置。本次課題主要修改的就是Libmemcached 庫。2.4. 系統(tǒng)可靠性系統(tǒng)的可靠性主要是指系統(tǒng)在特定條件下,正常工作的能力。對(duì)于Memcached 這個(gè)較為完善的系統(tǒng)來說,則主要考慮其發(fā)生硬件故障的可能。由于它是基于內(nèi)存的系統(tǒng),在服務(wù)器發(fā)生宕機(jī)時(shí),它的數(shù)據(jù)會(huì)全部丟失。因

27、此Memcached 本身不具備可靠性。提高系統(tǒng)的可靠性即是提高系統(tǒng)的容錯(cuò)性能,主要有兩種方法:避錯(cuò)和容錯(cuò)。所謂避錯(cuò)就是采取各種可能的技術(shù)措施避免計(jì)算機(jī)在使用過程中發(fā)生錯(cuò)誤;所謂容錯(cuò)就是在系統(tǒng)運(yùn)行過程中允許某些環(huán)節(jié)發(fā)生某些錯(cuò)誤,但是計(jì)算機(jī)給出的最終結(jié)果中不包括由于上述環(huán)節(jié)中發(fā)生的錯(cuò)誤所造成的影響。由于系統(tǒng)的避錯(cuò)性能一般較高,所以通常所說的可靠性是指系統(tǒng)的容錯(cuò)性能。Memcached 本身并不提供容錯(cuò)性,所以說Memcached 本身不提供可靠性。本次課題主要實(shí)現(xiàn) Memcached 的可靠性,即要使其具備一定的容錯(cuò)能力,在一定程度上故障。提供容錯(cuò)性主要使用兩種技術(shù):冗余和編碼。此次研究實(shí)現(xiàn)的系

28、統(tǒng)針對(duì)的是讀密集的對(duì)象,因此采用更節(jié)省空間的編碼技術(shù)來實(shí)現(xiàn)容錯(cuò)能力。2.5. RAID 5 編碼RAID 5 是磁盤陣列(RAID)的一種,是一種性能、安全和成本兼顧的方案。它將數(shù)據(jù)以塊為分布到各個(gè)硬盤上。RAID 5 不對(duì)數(shù)據(jù)進(jìn)行備份,而是把數(shù)據(jù)信息和對(duì)應(yīng)生成的奇偶校驗(yàn)信息分布到各個(gè)磁盤上。這樣某個(gè)數(shù)據(jù)的磁盤發(fā)生故障,仍然可以使用剩余的數(shù)據(jù)和校驗(yàn)信息重建丟失的數(shù)據(jù)。以由四個(gè)硬盤組成的RAID 5 為例,如圖 2-1 所示:D01、D02 和D03 為同一組數(shù)據(jù),它們被分別在 disk1、disk2 和 disk3 上,而它們的奇偶校驗(yàn)信息P在disk4 上,其它以此類推。當(dāng)磁盤disk1 發(fā)

29、生故障是,D01、D04 和 D07的原數(shù)據(jù)丟失。系統(tǒng)仍然可以通過 D02、D0 的數(shù)據(jù)信息 3 和它們對(duì)應(yīng)的校驗(yàn)信息P 進(jìn)行異或運(yùn)算重建 D01 的數(shù)據(jù),其它同理。因此使用 RAID 5 的系統(tǒng)具備一定的容錯(cuò)能力。圖 2-1 RAID 5 結(jié)構(gòu)2.5.1RAID 5 校驗(yàn)算法RAID 5 采用的是奇偶校驗(yàn)算法,原理如下:P = D1 xor D2 xor D3 xor Dn(其中 D1、D2、D3Dn 為數(shù)據(jù)塊,P 為校驗(yàn)信息,xor 為異或運(yùn)算)。異或運(yùn)算(xor)的計(jì)算原理如表 2-1。其中A 和B 為二進(jìn)制值。從表中可以分析得出,當(dāng) A、B 值相同時(shí),異或結(jié)果為 0,反之異或結(jié)果為 1

30、。這樣的計(jì)算原理帶來的特性就是,A 和B 的異或結(jié)表 2-1 xor 計(jì)算原理果與二者中的任一者進(jìn)行異或運(yùn)算就得到另一者,或者說,異或運(yùn)算是“可逆的”。這一特性對(duì)多個(gè)數(shù)據(jù)運(yùn)算時(shí)仍然成立。在RAID 5 系統(tǒng)中可以方便的使用剩下的數(shù)據(jù)信息和校驗(yàn)信息重建丟失數(shù)據(jù)。2.5.2RAID 5 的應(yīng)用正常情況下,RAID 5系統(tǒng)進(jìn)行處理的對(duì)象是數(shù)據(jù)塊,但是在 Memcached中,基本的處理單元是一個(gè)鍵-值對(duì)。因此對(duì)于這次課題,雖然采用的是RAID 5的原理來實(shí)現(xiàn)Memcached 的可靠性,但是編碼的對(duì)象不是數(shù)據(jù)塊而是鍵-值對(duì)。具體點(diǎn)說,就是把不同Memcached 服務(wù)器上的對(duì)象(鍵-值對(duì))進(jìn)行校驗(yàn)編

31、碼,然后將校驗(yàn)得到的鍵-值對(duì)到另一個(gè)不同的Memcached 服務(wù)器上。在發(fā)生服務(wù)器故障時(shí),通過剩余服務(wù)器上的對(duì)象和校驗(yàn)信息重建丟失的對(duì)象。2.6. 開發(fā)環(huán)境表 2-2開發(fā)環(huán)境Ubuntu Kylin 15.10操作系統(tǒng)編輯器Gedit 3.10.4Memcached 版本Memcached 1.4.24Libmemcached 版本Libmemcached 1.0.18編譯工具gcc 5.2.1開發(fā)語言C 語言A 值B 值xor 結(jié)果0001010111102.7. 本章小結(jié)本章主明本次設(shè)計(jì)中的一些關(guān)鍵理論技術(shù),包括內(nèi)存中的鍵/值系統(tǒng)的特點(diǎn), Memcached 的特點(diǎn)以及系統(tǒng)可靠性原理等,

32、 還介紹了此次實(shí)現(xiàn)Memcached 可靠性的RAID 5,最后補(bǔ)充說明了此次設(shè)計(jì)的開發(fā)環(huán)境。3可靠性設(shè)計(jì)與優(yōu)化本章為本的主體部分,主明可靠性的設(shè)計(jì)與實(shí)現(xiàn)過程,以及對(duì)系統(tǒng)進(jìn)行的優(yōu)化處理。3.1系統(tǒng)結(jié)構(gòu)圖 3-1系統(tǒng)結(jié)構(gòu)圖Memcached 系統(tǒng)結(jié)構(gòu)如圖 3-1 所示。數(shù)據(jù)庫的數(shù)據(jù)存放在磁盤上,Memcached 集群在內(nèi)存中,作為緩存空間,緩存最近被過的數(shù)據(jù)。客戶端執(zhí)行操作時(shí),會(huì)先嘗試到 Memcached 集群對(duì)象。如果失敗,則向數(shù)據(jù)庫請(qǐng)求數(shù)據(jù),同時(shí)將數(shù)據(jù)寫入到 Memcached 集群中。對(duì)于寫操作,客戶端則會(huì)同時(shí)對(duì)Memcached 和發(fā)送一次寫操作指令。從系統(tǒng)結(jié)構(gòu)圖看出,要實(shí)現(xiàn) Mem

33、cached 的可靠性,主要在客戶端到Memcached 集群的這條路徑進(jìn)行實(shí)現(xiàn)。而前面提到過,Memcached 集群的各個(gè)服務(wù)器間是互不通信的,“集群”的結(jié)構(gòu)完全由客戶端通過 Libmemcached來維持。因此,要使用類 RAID 5 的編碼方式在Memcached 服務(wù)器間實(shí)現(xiàn)可靠性,在 Memcached 服務(wù)器端實(shí)現(xiàn)可靠性較為復(fù)雜,而在客戶端實(shí)現(xiàn)可靠性則比較便捷。此外,為使得完成的系統(tǒng)具有較強(qiáng)的適用性,最終選擇通過修改Libmemcached實(shí)現(xiàn)可靠性。這樣 Memcached 可靠性實(shí)現(xiàn)后,客戶端程序也不需要做任何更改。3.2可靠性設(shè)計(jì)圖 3-2 修改后的數(shù)據(jù)操作實(shí)現(xiàn)可靠性即是使

34、 Memcached 集群具有一定的容錯(cuò)能力:當(dāng)某個(gè)服務(wù)器發(fā)生故障導(dǎo)致數(shù)據(jù)丟失時(shí),系統(tǒng)可以利用冗余信息重建丟失的數(shù)據(jù)。實(shí)現(xiàn)可靠性關(guān)鍵之處是實(shí)現(xiàn)兩個(gè)過程:編碼生成校驗(yàn)信息并保存,以及通過數(shù)據(jù)和校驗(yàn)信息重建丟失數(shù)據(jù)。如圖 3-2 所示,在實(shí)現(xiàn)可靠性的 Memcached 系統(tǒng)中,客戶端寫入和數(shù)據(jù)的過程與未實(shí)現(xiàn)可靠性的 Memcached 系統(tǒng)有所不同,主要差別在于Libmemcached 庫將會(huì)比原系統(tǒng)附加一些操作。在寫入操作中,Libmemcached 不僅會(huì)將原數(shù)據(jù)發(fā)送到 Memcached 集群進(jìn)行,還會(huì)把原數(shù)據(jù)與以往的數(shù)據(jù)進(jìn)行搭配形成一個(gè) stripe(條帶),然后對(duì)這個(gè)stripe 內(nèi)的

35、各個(gè)對(duì)象的key 和value 進(jìn)行按位異或計(jì)算生成校驗(yàn)信息,最后將校驗(yàn)信息和stripe 的元數(shù)據(jù)到 Memcached 集群。在寫入操作中加入的附加操作就是產(chǎn)生校驗(yàn)信息并進(jìn)行,使系統(tǒng)成為一個(gè)可靠性系統(tǒng)。在操作中,Libmemcached 會(huì)先進(jìn)行一次正常的操作,若成功,則和原系統(tǒng)處理一致,將結(jié)果直接返回給客戶端。若失敗,由于系統(tǒng)具備了可靠性,還要考慮重建數(shù)據(jù)的可能性,因此Libmemcached 會(huì)嘗試目標(biāo)對(duì)象的元數(shù)據(jù)信息,若能成功獲取目標(biāo)對(duì)象的元數(shù)據(jù)信息,則說明目標(biāo)對(duì)象已進(jìn)行可靠性編碼。這時(shí),Libmemcached 會(huì)進(jìn)一步獲取目標(biāo)對(duì)象所在stripe 的所有信息,然后通過該strip

36、e 的數(shù)據(jù)再進(jìn)行一次編碼便可重建目標(biāo)對(duì)象的數(shù)據(jù)信息。在操作中加入的附加操作是,當(dāng)正常對(duì)象失敗時(shí),Libmemcached 會(huì)嘗試進(jìn)行degrade read(降級(jí)讀)來獲取對(duì)象,即嘗試?yán)孟到y(tǒng)的可靠性重建數(shù)據(jù)。因此,實(shí)現(xiàn) Memcached 可靠性主要從 Libmemcached 對(duì)理著手。和寫入操作的處3.3功能模塊設(shè)計(jì)綜合上一節(jié)的分析,可靠性設(shè)計(jì)主要添加以下四個(gè)功能模塊:條帶生成模塊、編碼模塊、校驗(yàn)信息模塊、數(shù)據(jù)重建模塊。其中前三個(gè)模塊用于寫入操作,最后一個(gè)模塊用于操作。3.3.1條帶生成模塊條帶生成模塊的主要功能是將符合條件的幾個(gè)對(duì)象搭配成一個(gè)條帶(stripe),條帶還包括這幾個(gè)對(duì)象編

37、碼生成的校驗(yàn)數(shù)據(jù),而校驗(yàn)數(shù)據(jù)也會(huì)被當(dāng)作一個(gè)對(duì)象存儲(chǔ)起來。條帶內(nèi)的這幾個(gè)對(duì)象(包括校驗(yàn)對(duì)象)在不同的服務(wù)器上,從而形成一個(gè)類RAID 5 的結(jié)構(gòu)。要形成上述的類RAID 5 結(jié)構(gòu)的條帶,組成的對(duì)象(包括校驗(yàn)對(duì)象)需要滿足的條件以下幾點(diǎn):同一條帶內(nèi)的對(duì)象分別到不同的緩存服務(wù)器上同一條帶內(nèi)的對(duì)象的個(gè)數(shù)不超過緩存服務(wù)器的個(gè)數(shù)同一條帶內(nèi)的對(duì)象的結(jié)構(gòu)一致,即key 和value 長度均相同一個(gè)對(duì)象最多屬于一個(gè)條帶對(duì)于一個(gè) Memcached 客戶端來說,Libmemcached 在處理完一條指令后并不數(shù)據(jù)的過程是串行化操作,而所的對(duì)象。因此,條帶生成模塊要附加額外空間來系統(tǒng)過的對(duì)象,然后在中尋找合適的對(duì)象

38、來生成條帶。3.3.2編碼模塊編碼模塊的功能是把一個(gè)條帶內(nèi)的數(shù)據(jù)信息進(jìn)行編碼從而生成校驗(yàn)信息。編碼的原理是把多個(gè)對(duì)象的key 和value 分別按位進(jìn)行異或運(yùn)算,得到一個(gè)校驗(yàn)信息。正因如此,才要求生成的條帶內(nèi)的對(duì)象的結(jié)構(gòu)一致。編碼模塊除了進(jìn)行異或運(yùn)算,還要為條帶內(nèi)的對(duì)象生成條帶元數(shù)據(jù)信息(stripe metadata)。顧名思義,條帶元數(shù)據(jù)信息即是當(dāng)前條帶的元數(shù)據(jù),包括數(shù)據(jù)對(duì)象和校驗(yàn)對(duì)象的信息(主要是位置信息)。在重建數(shù)據(jù)的時(shí)候,系統(tǒng)通過目標(biāo)對(duì)象找到條帶元數(shù)據(jù)信息,再通過條帶元數(shù)據(jù)還原整個(gè)條帶未丟失部分的內(nèi)容,最后通過未丟失信息重建丟失部分的信息。實(shí)際上在實(shí)現(xiàn)的時(shí)候,在條帶元數(shù)據(jù)中只需要加入

39、對(duì)象的key 即可,因?yàn)?Memcached 系統(tǒng)的一致性哈希結(jié)構(gòu),通過key 便能確認(rèn)對(duì)象的位置。3.3.3校驗(yàn)信息模塊校驗(yàn)信息模塊主要有兩個(gè)功能:一是生成的校驗(yàn)信息,二是條帶的元數(shù)據(jù)信息。校驗(yàn)信息的過程與正常對(duì)象的過程基本相同,但是要注意的是,正常數(shù)據(jù)對(duì)象的服務(wù)器是將對(duì)象的key 進(jìn)行哈希散列后確定的,而校驗(yàn)對(duì)象是選擇與條帶內(nèi)數(shù)據(jù)對(duì)象不同的服務(wù)器進(jìn)行。因此在元數(shù)據(jù)信息中還要附加校驗(yàn)對(duì)象所的緩存服務(wù)器,因?yàn)橄到y(tǒng)無法通過校驗(yàn)對(duì)象的 key 進(jìn)行哈希散列映射到對(duì)應(yīng)的位置。對(duì)于條帶元數(shù)據(jù),由于它是數(shù)據(jù)重建時(shí)最重要的信息,沒有元數(shù)據(jù)信息就不可能完成數(shù)據(jù)重建,所以要確保條帶元數(shù)據(jù)的持久性。條帶元數(shù)據(jù)不

40、能和數(shù)據(jù)一起在數(shù)據(jù)服務(wù)器上,因?yàn)槟菢尤绻@個(gè)服務(wù)器發(fā)生故障,就會(huì)導(dǎo)致條帶元數(shù)據(jù)信息和數(shù)據(jù)信息同時(shí)丟失而無法重建數(shù)據(jù)。因此一個(gè)可選的方案是把條帶元數(shù)據(jù)和校驗(yàn)數(shù)據(jù)在同一服務(wù)器,但是正如前面所說的,系統(tǒng)是通過條帶元數(shù)據(jù)信息來獲得校驗(yàn)數(shù)據(jù)存放的服務(wù)器位置的,這樣處理之后系統(tǒng)根本無法獲知條帶元數(shù)據(jù)的位置,更不用說校驗(yàn)數(shù)據(jù)的位置。另一個(gè)可選的方案是把條帶元數(shù)據(jù)信息全部在一個(gè)特定的服務(wù)器上,這樣獲取條帶元數(shù)據(jù)時(shí)直接到這個(gè)服務(wù)器上數(shù)據(jù)即可。經(jīng)過綜合考慮,系統(tǒng)采用了第二個(gè)方案,額外設(shè)置一個(gè)條帶元數(shù)據(jù)服務(wù)器用于條帶元數(shù)據(jù)。需要注意的是,在成功生成校驗(yàn)數(shù)據(jù)信息和條帶元數(shù)據(jù)信息后,編碼模塊還要將條帶內(nèi)的三個(gè)數(shù)據(jù)對(duì)象從

41、鏈表中刪除。這樣做有兩個(gè)目的,一是為了確保同一個(gè)對(duì)象不會(huì)被重復(fù)編碼,二是使得日志鏈表維持在一個(gè)較短的長度,不會(huì)占據(jù)很多的空間。3.3.4數(shù)據(jù)重建模塊數(shù)據(jù)重建模塊是系統(tǒng)進(jìn)行操作時(shí)的附加模塊。數(shù)據(jù)重建模塊的主要功能是通過目標(biāo)對(duì)象的key 獲取目標(biāo)對(duì)象所屬條帶的元數(shù)據(jù)信息,再通過條帶元數(shù)據(jù)信息取得條帶丟失的數(shù)據(jù)(包括未丟失的數(shù)據(jù)對(duì)象的信息和校驗(yàn)信息),最后通過這些數(shù)據(jù)重建丟失的數(shù)據(jù)信息。當(dāng)客戶端從 Memcached 集群目標(biāo)對(duì)象失敗時(shí),客戶端不會(huì)立即轉(zhuǎn)向數(shù)據(jù)庫數(shù)據(jù),而是由條帶還原模塊判斷目標(biāo)對(duì)象能否進(jìn)行降級(jí)讀(degrade read),或者說能否進(jìn)行重建。判斷的依據(jù)則是向條帶元數(shù)據(jù)服務(wù)器請(qǐng)求目標(biāo)

42、對(duì)象,如果成功獲得數(shù)據(jù),則說明目標(biāo)對(duì)象已進(jìn)行編碼。然后條帶還原模塊就會(huì)進(jìn)一步獲得目標(biāo)對(duì)象所在條帶的元數(shù)據(jù)信息,進(jìn)而還原整個(gè)條帶。最后利用還原的條帶重建丟失的數(shù)據(jù)。3.4 功能模塊實(shí)現(xiàn)根據(jù)上面的模塊設(shè)計(jì)原理,本文對(duì)各個(gè)模塊進(jìn)行實(shí)現(xiàn)。為了不讓系統(tǒng)過于復(fù)雜,本文設(shè)計(jì)的系統(tǒng)對(duì)于的對(duì)象有兩個(gè)限定:客戶端對(duì)象的key 和value 都是由小寫字母組成的字符串同一客戶端的所有對(duì)象的結(jié)構(gòu)相同(key 和value 長度相同)以下是各個(gè)模塊具體實(shí)現(xiàn)過程。3.4.1條帶生成模塊條帶生成模塊首先要客戶端過的對(duì)象信息,筆者使用了鏈表結(jié)構(gòu)來實(shí)現(xiàn),設(shè)置一個(gè)日志鏈表,鏈表的每個(gè)節(jié)點(diǎn)代表一個(gè)過的對(duì)象。日志鏈表的節(jié)點(diǎn)結(jié)構(gòu)定義如

43、下所示:Libmemcached 在成功一個(gè)對(duì)象后,會(huì)把這個(gè)對(duì)象的信息(key,value為一個(gè) check_item 節(jié)點(diǎn)并添加到日志鏈表中。然后以及位置)Libmemcached 就會(huì)調(diào)用條帶生成函數(shù)來檢測是否可以找到合適的對(duì)象生成一個(gè)條帶。條帶生成函數(shù)的流程圖如圖 3-3 所示:struct check_itemu32_t server_id;/對(duì)象服務(wù)器 id char *key;/對(duì)象的 key 值char *value;/對(duì)象的 value 值struct check_item *next; /指向下一節(jié)點(diǎn);1234567表 3-1 條帶結(jié)構(gòu)如果條帶生成函數(shù)遍歷了整個(gè)日志鏈表仍未找

44、到合適的三個(gè)對(duì)象形成一個(gè)條帶,則函數(shù)也會(huì)結(jié)束執(zhí)行,此時(shí)系統(tǒng)會(huì)等待下一個(gè)對(duì)象時(shí)再進(jìn)行條帶生成檢測。在遍歷鏈表的過程中,對(duì)于已出現(xiàn)可選對(duì)象的服務(wù)器(通過標(biāo)志信息判斷服務(wù)器是否已有可選對(duì)象),系統(tǒng)會(huì)忽略其上的對(duì)象。3.4.2編碼模塊條帶生成函數(shù)找到合適的條帶后便會(huì)調(diào)用編碼函數(shù)并將條帶內(nèi)的數(shù)據(jù)信息傳遞給編碼函數(shù)。編碼函數(shù)要執(zhí)行兩個(gè)功能:一是將條帶內(nèi)的數(shù)據(jù)對(duì)象的 key 和value 分別編碼生成校驗(yàn)對(duì)象,二是使用數(shù)據(jù)對(duì)象和校驗(yàn)對(duì)象的 key 生成條帶元數(shù)據(jù)信息。編碼模塊的第一個(gè)功能可以通過一個(gè)校驗(yàn)函數(shù)實(shí)現(xiàn),它的函數(shù)功能就是將 3個(gè)字符串的每個(gè)字符分別進(jìn)行異或運(yùn)算而生成校驗(yàn)字符串。編碼函數(shù)可以對(duì)三個(gè)對(duì)象

45、的key 和value 字符串分別調(diào)用校驗(yàn)函數(shù),從而生成兩個(gè)校驗(yàn)字符串,這兩個(gè)校驗(yàn)字符串即校驗(yàn)對(duì)象的key 和value 字符串。校驗(yàn)函數(shù)的代碼如下所示:12345678910char* get_checksum(const char *value1,const char *value2,const char*value3,length)char *result;result=(char*)malloc(length*sizeof(char); /給結(jié)果字符串分配空間 i=0;for(i=0;izfteyvzvp”。結(jié)合上面測試程序請(qǐng)求數(shù)據(jù)的結(jié)果可知,修改后的系統(tǒng)確實(shí)如設(shè)計(jì)的那樣,成功并正確地

46、了數(shù)據(jù)對(duì)象、校驗(yàn)對(duì)象以及條帶元數(shù)據(jù)信息。圖 4-4 server2 的結(jié)果圖 4-5 server3 的結(jié)果接下來測試系統(tǒng)的數(shù)據(jù)重建功能。先使集群中某一節(jié)點(diǎn)故障,這里選擇直接關(guān)閉server2,通過 net 得到server2 的為 2142,使用“kill 2142”指令關(guān)閉server2。通過netserver2 失敗確認(rèn)server2 已經(jīng)故障,如圖 4-6 所示。圖 4-6 確認(rèn) server2 已停止運(yùn)行然后測試程序?qū)@ 1000 個(gè)對(duì)象再次執(zhí)行操作,其中一部分結(jié)果如圖 4-7在server2 上,在server2 被關(guān),key 為“uzzxo”的對(duì)象原本所示。閉后,客戶端已無法正常

47、該對(duì)象的。但是Libmemcached 利用了集群的可靠性,通過剩下的兩個(gè)數(shù)據(jù)對(duì)象和校驗(yàn)對(duì)象重建了丟失的該對(duì)象的數(shù)據(jù)。對(duì)比圖 4-3 和圖 4-7,兩次獲取對(duì)象“uzzxo”的結(jié)果相同。但是兩次獲得數(shù)Memcached 服務(wù)器獲得的數(shù)據(jù),第二次據(jù)的方式卻不相同,第一次是正常是利用可靠性重建的數(shù)據(jù)。圖 4-7 server2 故障后的結(jié)果多次測試并改變測試對(duì)象的數(shù)目、key 和 value 的長度、值等,在發(fā)生單節(jié)點(diǎn)故障后,系統(tǒng)都能重建大部分丟失節(jié)點(diǎn)上的數(shù)據(jù),只有極少數(shù)對(duì)象(02 個(gè))丟失,原因是這幾個(gè)對(duì)象是最后的,可能還未能進(jìn)行 stripe 配對(duì),所以無法進(jìn)行重建。通過上述測試得出結(jié)論,改進(jìn)

48、后的系統(tǒng)確實(shí)使得 Memcached 集群具備了可靠性,而且能夠重建數(shù)據(jù)。也就是說,本次設(shè)計(jì)實(shí)現(xiàn)了預(yù)期的功能。4.3性能分析性能分析主要通過對(duì)比系統(tǒng)改進(jìn)前后的性能指標(biāo),評(píng)估改進(jìn)系統(tǒng)帶來的得與是完成可靠性設(shè)計(jì)后僅進(jìn)行取消 SMS 優(yōu)化失。進(jìn)行分析的對(duì)象是三種系的系下簡稱RaidMem0;二是完成可靠性并經(jīng)過兩步優(yōu)化的系統(tǒng),以下簡稱RaidMem;三是使用主備份實(shí)現(xiàn)可靠性的系統(tǒng),以下簡稱PBR(PrimaryBackup Replication)。因?yàn)槿∠?SMS 主要是增加系統(tǒng)的穩(wěn)定性,對(duì)系統(tǒng)的性能幾乎沒有影響,所以沒有將 RaidMem0 和只實(shí)現(xiàn)可靠性但未進(jìn)行任何優(yōu)化的系統(tǒng)進(jìn)行比較測試。4.

49、3.1空間利用率變化分析首先對(duì)比的是修改前后系統(tǒng)的內(nèi)存消耗。根據(jù)前面提到的實(shí)際應(yīng)用中Memcached對(duì)象的key 和value 的長度分布(圖 3-5),采用key 長度為30,value 長度為 300 進(jìn)行分析。設(shè)Memcached 集群內(nèi)服務(wù)器的個(gè)數(shù)為n+1。一般情況下,每n 個(gè)對(duì)象:Memcached 只需要n 個(gè)對(duì)象,所需要的空間為 330n 字節(jié);RaidMem0 和 RaidMem 不僅要n 個(gè)數(shù)據(jù)對(duì)象,還要一個(gè)校驗(yàn)對(duì)象和n 個(gè)條帶元數(shù)據(jù),所需要的空間為(391n+330)字節(jié);PBR 則需要2n 個(gè)數(shù)據(jù)對(duì)象,所需要的空間為 660n 字節(jié)。由此得到如圖 4-8 所示三個(gè)系統(tǒng)占

50、用內(nèi)存隨n 值變化的情況。RaidMem0 和 RaidMem 比Memcached 多消耗的內(nèi)存比例為:(391nn)/(330n) = (61n+330)/(330n) = 61/330+1/n。隨著 n 逐漸增大,這一比例逐漸降低而向 61/330=18.5%靠近,而 PBR 所消耗的空間是Memcached 的 200%,即額外多消耗 100%。圖 4-8 占用空間隨 n 值的變化雖然實(shí)現(xiàn)可靠性后的系統(tǒng)(RaidMem 和 PBR)的內(nèi)存利用率因存在冗余而均比原 Memcached 系統(tǒng)的內(nèi)存利用率低,但是比起基于的RaidMem 所消耗的額外內(nèi)存空間大大降低。的 PBR,基于編碼4.

51、3.2寫入性能接下來分析系統(tǒng)的寫入性能。通過編寫測試程序來測量各個(gè)系統(tǒng)一定的數(shù)據(jù)所消耗的時(shí)間,從而計(jì)算得到各個(gè)系統(tǒng)的寫入延遲。根據(jù) 3.5.2 節(jié)所設(shè)計(jì)的延遲批處理元數(shù)據(jù)的優(yōu)化方案,設(shè)置 RaidMem 中一次傳送條帶元數(shù)據(jù)的數(shù)量為 10,然后進(jìn)行多次測試并計(jì)算平均值。測試 key 和 value 長度對(duì)寫入速度的影響,因?yàn)?key 的長度主要在 20-50 字節(jié)之間,它的變化程度要比 value 長度變化小得多,因此主要測試 value 長度對(duì)時(shí)間的影響。對(duì)于 key 長度都為 30 字節(jié)的 100000 個(gè)對(duì)象,分別設(shè)置 value長度為 16,64,256,1024 字節(jié),得到圖 4-9

52、 所示的。圖 4-9 RaidMem0 和RaidMem 的寫入延遲比較進(jìn)行分析得出如下結(jié)論:改進(jìn)后的系統(tǒng) RaidMem 對(duì)比 RaidMem0,寫入延遲能最大降低 17%(value size = 16bytes)。但是隨著對(duì)有一定的性能value size 的增大,寫入延遲的優(yōu)化程度會(huì)逐漸降低。出現(xiàn)這種結(jié)果的原因主要是由于 key 的長度恒定,也就是說元數(shù)據(jù)的大小恒定,那么對(duì)于相同的聚合策略來說,RaidMem 對(duì)比 RaidMem0 節(jié)省的時(shí)間開銷也是相同的,因此隨著valuesize 的增大,節(jié)省的時(shí)間占總的時(shí)間的比例也在降低。4.4 本章小結(jié)本章測試了實(shí)現(xiàn)可靠性的系統(tǒng)的功能和性能,

53、并對(duì)進(jìn)行了分析。在功能方面,該系統(tǒng)實(shí)現(xiàn)了預(yù)期的功能;性能方面,改進(jìn)后的系統(tǒng)比未改進(jìn)系統(tǒng)有一定的性能。5總結(jié)與展望5.1全文總結(jié)本次課題設(shè)計(jì)了一個(gè)基于編碼的 Memcached 可靠性機(jī)制,該機(jī)制適用于面向讀密集應(yīng)用的 Memcached 系統(tǒng)。本文對(duì)此次課題的背景、目的、實(shí)施等進(jìn)行了系統(tǒng)的介紹,還對(duì)系統(tǒng)的測試工作進(jìn)行了詳細(xì)說明,具體完成的工作如下:1.介紹了課題的開展背景和國內(nèi)外的研究現(xiàn)狀,闡明了課題的目的與意義,說明了課題的預(yù)期目標(biāo)。2.3.4.介紹了本次課題中涉及的關(guān)鍵理論技術(shù)等。詳細(xì)說明了本次課題的算法設(shè)計(jì)過程,以及對(duì)系統(tǒng)的優(yōu)化操作。分別從功能和性能兩方面對(duì)系統(tǒng)進(jìn)行了測試,對(duì)系統(tǒng)的完成結(jié)

54、果進(jìn)行了分析。從整體上說,本次課題達(dá)到了預(yù)期的目標(biāo),完成了 Memcached 的可靠性設(shè)計(jì),并對(duì)該設(shè)計(jì)進(jìn)行了一定的優(yōu)化。5.2展望本次設(shè)計(jì)的系統(tǒng)還只能算是基本實(shí)現(xiàn)了可靠性,實(shí)際還有以下幾點(diǎn)問題有待處理和改進(jìn):1.編碼操作與操作使用同一線程,實(shí)際可以使用多線程分別進(jìn)行處理,這樣可以大大提高系統(tǒng)的性能。2.由于針對(duì)的是讀密集的應(yīng)用,系統(tǒng)忽略了原數(shù)據(jù)被修改的情況,實(shí)際應(yīng)用中,還是有少許修改操作,系統(tǒng)對(duì)這類操作也應(yīng)該有應(yīng)對(duì)措施3.在測試中發(fā)現(xiàn),修改后的系統(tǒng)的穩(wěn)定性不如原系統(tǒng),這也是以后改進(jìn)的方向致謝終于到了本科畢業(yè)設(shè)計(jì)的收尾階段,這也意味著四年本科生活接近了尾聲。雖然我會(huì)繼續(xù)在這所我深愛的學(xué)校進(jìn)行生

55、活,但是和那些一起生活了四年的可愛的老師和,卻是真的要分別了。大學(xué)的四年,有,有痛苦,有汗水,有收獲。無論是在課堂上聆聽老師們激昂的授課,還是課間和老師間那朋友般的;無論是和學(xué)習(xí)上的互幫互助,還是和一起生活的點(diǎn)點(diǎn)滴滴;無論是為了踩點(diǎn)上的緊趕慢趕,還是的挑燈苦學(xué)。無論還是酸楚,這都是我人生中彌足珍貴的經(jīng)歷,將會(huì)是我最寶貴的回憶。在即將完成之際,我謹(jǐn)向成長所有關(guān)心我、幫助我、陪伴人們表示真摯的感謝和由衷的祝福。首先要感謝是的指導(dǎo)老師胡燏翀,是他在畢設(shè)選題、開題、課題實(shí)施和文檔撰寫的過程中給了我最悉心的指導(dǎo),也是他一直鼓勵(lì)著我。正是胡老師對(duì)幫助,我才能順利完成本次的畢業(yè)設(shè)計(jì)。此外,我還要感謝的師兄,

56、師兄在畢業(yè)設(shè)計(jì)上也給予了我很多的指導(dǎo),幫助我解決了很多問題。然后我要感謝的是各位老師和同學(xué),是陪伴著我度過了這四年的本科生活,正是讓我不斷地成長。當(dāng)然我最要感謝的還是父母和親人,他們給不只是經(jīng)濟(jì)上的支持,他們更是我精神的支柱。是他們的默默付出和,我才能安心的學(xué)習(xí)與成長。最后,再次感謝一路走來給予我?guī)椭娜?。雖已完成,卻遠(yuǎn)不是終點(diǎn),在今后的學(xué)業(yè)中,我也會(huì)帶著對(duì)希冀,繼續(xù)向前。參考文獻(xiàn)123URL:URL:Heng Zhang, Mingkai Dong, and Haibo Chen. Efficient and AvailableemoryKV-Store with Hybrid Erasur

57、e Coding and Replication.FAST,2016.B. Atikoglu, Y. Xu, E. Frachtenberg, S. Jiang, and M. Paleczny. Workload ysis of a large-scale key-value store. In SIGMETRICS, pages 5364. ACM, 2012W.J.Bolosky,D.Bradshaw, R.B.Haagens, N.P.Kusters,and P. Li. Paxos replicated se machines as the basis of a high-perfo

58、rmance data store. In NSDI, 2011.T. C. Bressoud and F. B. Schneider. Hypervisor-based fault tolerance. ACMTranions on Computer Systems(TOCS), 14(1):80107, 1996.7 N. Budhiraja, K. Marzullo, F. B. Schneider, and S. Toueg.The primary-backupapproach. Distributed systems,2:199216, 1993.8 A. Clement, M. K

59、apritsos, S. Lee, Y. Wang, L. Alvisi,M. Dahlin, and T. Riche.Upright cluster servi. In Proceedings of the ACM SIGOPS 22nd symium onOperating systems principles, pages 277290. ACM, 2009.9 B. Fan, D. G. Andersen, and M.insky.pact and concurrentIn NSDI, volume 13, pagesmemcache with dumber caching and

60、smarter hashing.385398, 2013.10 C. Huang, H. Simitci, Y. Xu, A. Ogus, B. Caldet al. Erasure coding in windows azure storage. InGopalan, J. Li, S. Yekhanin,USENIX Annual TechnicalConference, pages 1526, 2012.11 A. Kalia, M.insky, and D. G. Andersen.Using rdma efficiently forkey-value servi. InProceed

溫馨提示

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

評(píng)論

0/150

提交評(píng)論