專利名稱:一種分布式緩存池化、分片及故障轉(zhuǎn)移的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種分布式緩存池化、分片及故障轉(zhuǎn)移的方法及系統(tǒng),屬于軟件技術(shù)領(lǐng)域。
背景技術(shù):
隨著互聯(lián)網(wǎng)Web2. 0網(wǎng)站的興起。傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付Web2. 0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的Web2.0動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題。Web2.0網(wǎng)站要根據(jù)用戶個性化信息來實時生成動態(tài)頁面和提供動態(tài)信 息,所以基本上無法使用動態(tài)頁面靜態(tài)化技術(shù),因此數(shù)據(jù)庫并發(fā)負載非常高,往往要達到每秒幾萬次讀寫請求。關(guān)系數(shù)據(jù)庫應(yīng)付每秒上萬次SQL查詢還勉強能夠應(yīng)付,但是應(yīng)付每秒上萬次SQL寫數(shù)據(jù)請求,硬盤I/O就無法承受了。其實對于普通的BBS網(wǎng)站,往往也存在對高并發(fā)寫請求的需求,例如一些網(wǎng)站的實時統(tǒng)計在線用戶狀態(tài),記錄熱門帖子的點擊次數(shù),投票計數(shù)等,因而許多的公司采用了分布式緩存系統(tǒng)來解決這些問題。這些分布式緩存系統(tǒng)給公司帶來了新的解決方案,同時也帶來了新的挑戰(zhàn)。很多緩存系統(tǒng)沒有原生的可擴展機制,不具有自身可擴展能力,要依賴客戶端來實現(xiàn)分布式讀寫?,F(xiàn)實中絕大多數(shù)的客戶端是通過一致性哈希算法來實現(xiàn)分布式讀寫的。一致性哈希算法(Consistent Hashing)最早在論文《Consistent Hashing and RandomTrees !Distributed Caching Protocols for Relieving Hot Spots on the World WideWeb》中被提出。簡單來說,一致性哈希將整個哈希值空間組織成一個虛擬的圓環(huán),如假設(shè)某哈希函數(shù)H的值空間為0-2~32-1 (即哈希值是一個32位無符號整形),整個空間按順時針方向組織。0和2~32-1在零點中方向重合。將各個服務(wù)器使用H進行一個哈希,具體可以選擇服務(wù)器的ip或主機名作為關(guān)鍵字進行哈希,這樣每臺機器就能確定其在哈希環(huán)上的位置,當數(shù)據(jù)訪問服務(wù)器時,將數(shù)據(jù)key使用相同的函數(shù)H計算出哈希值h,通根據(jù)h確定此數(shù)據(jù)在環(huán)上的位置,從此位置沿環(huán)順時針“行走”,第一臺遇到的服務(wù)器就是其應(yīng)該定位到的服務(wù)器。但一致性哈希具有天生的缺陷。雖然比較傳統(tǒng)的哈希取模的方式,一致性哈希已經(jīng)將不命中的數(shù)據(jù)降到了最低,但是在一致性哈希算法中,如果增加一臺服務(wù)器或者宕機重啟時,在新服務(wù)器到其環(huán)空間中前一臺服務(wù)器(即順著逆時針方向行走遇到的第一臺服務(wù)器)之間數(shù)據(jù),還是會受到影響。緩存命不中的情況依然不可避免。在大型軟件設(shè)計中,存在著一些寶貴的資源,如線程、數(shù)據(jù)庫連接、網(wǎng)絡(luò)連接等。這些資源的使用在時間或空間上極大地影響著軟件的使用效率,使得資源的可用性與客戶端應(yīng)用程序的性能和用戶的滿意程度直接相關(guān)。池化資源技術(shù)的基本思路是事先建立一定數(shù)量的對象并保存在內(nèi)存中,當調(diào)用者申請對象時從池中取出一個空閑對象,使用后立即歸還,供其它調(diào)用者重復(fù)使用,這樣可以減少頻繁創(chuàng)建、銷毀對象所造成的開銷。因為客戶端應(yīng)用程序不需要重復(fù)地建立和銷毀對象,因而使用池化資源技術(shù)會顯著提高連接性能。特別是對于占用資源比較嚴重的對象,如數(shù)據(jù)庫連接或網(wǎng)絡(luò)連接等。池化資源機制可以有效減少建立對象所需的時間。除了可以提高連接性能以外,使用池化資源技術(shù)還可以更有效地管理資源,池管理器可以根據(jù)需要動態(tài)調(diào)整池中的對象數(shù)量,使系統(tǒng)資源得到充分利用。通過對有限資源進行進一步的控制和管理,對象池可以使系統(tǒng)更容易擴展,當用戶數(shù)量增加時只需要簡單地增加池中的可用對象數(shù)量。為了提高分布式緩存網(wǎng)絡(luò)連接的效率,現(xiàn)在一些實現(xiàn)池化的軟件只是對通過一致性哈希實現(xiàn)分布式的共享對象進行池化,這種實現(xiàn)過于簡單。因為共享對象包含所有的機器,當其中的一臺機器宕機的時候,池中所有的共享對象的該機器都無法訪問。池的銷毀只是銷毀共享對象,而不是從共享對象中移除該機器。所以當有一臺機器無法訪問時,造成了整個共享對象池無效。故障轉(zhuǎn)移指當服務(wù)器或外部設(shè)備發(fā)生故障時,利用備份設(shè)備切換后繼續(xù)進行處理的過程。多用于由多個服務(wù)器并行操作構(gòu)成的集群型服務(wù)器中?,F(xiàn)在的網(wǎng)絡(luò)應(yīng)用中,對于應(yīng)用服務(wù)器,數(shù)據(jù)庫等實現(xiàn)故障轉(zhuǎn)移的方法及系統(tǒng)比較多。但是對于分布式緩存越來越高度依賴的今天,對于分布式緩存的故障轉(zhuǎn)移的方法及系統(tǒng)卻少有。一般的做法是,當一臺機器宕機的時候,緩存中查不到,然后轉(zhuǎn)到關(guān)系數(shù)據(jù)庫中查詢。然后在將查詢的結(jié)果存入緩存中,當這臺機器重啟后,該機器的數(shù)據(jù)也都丟失了,在宕機時,本該存入該機器中的數(shù)據(jù),存入了環(huán)中的下一臺機器,所以重啟后命中這臺機器的數(shù)據(jù)還是訪問不到,還需要從數(shù)據(jù)庫 中取值。這樣不僅影響了命中率,還大大影響了應(yīng)用程序的性能和用戶使用的滿意度。
發(fā)明內(nèi)容
本發(fā)明所要解決的關(guān)鍵技術(shù)問題是實現(xiàn)一種池化、分片及故障轉(zhuǎn)移功能的方法,提供一種具備完善的池化、分片及故障轉(zhuǎn)移功能的系統(tǒng)。為實現(xiàn)上述發(fā)明目的,本發(fā)明通過將池化、分片及故障轉(zhuǎn)移功能有機的結(jié)合在一起,形成了一套完善的技術(shù)方案,具體描述如下首先,將緩存機器按組分配,每組2-3臺機器。同組機器進行同步,不同組機器間不進行同步。也就是說同組機器間的數(shù)據(jù)完全一致,不同組機器間的數(shù)據(jù)不同。同組機器實現(xiàn)讀寫分離。同組間機器的主從關(guān)系由緩存客戶端控制。其次,開發(fā)緩存客戶端,實現(xiàn)分布式讀寫。使其在新增機器情況下的命中率和沒增加前一致,也就是說,如果沒增加機器前的命中率是100%,那個新增機器后的命中率也是100%。把應(yīng)該位于新增機器上的數(shù)據(jù)從原有機器上轉(zhuǎn)移過來,進而進行改進一致性哈希算法,讓每個組的寫機器或讀機器為整個哈希值空間組織成一個虛擬的圓環(huán)上的一個節(jié)點及虛擬節(jié)點。最后,將實現(xiàn)了一致性哈希的多組機器共享對象進行池化,并且對每個組的讀機器和寫機器分別進行池化。其結(jié)合方法為當讀機器中的一臺宕機的時候,池管理器檢查到該機器已經(jīng)宕機,會把該機器所在組中的寫機器來代替該讀機器,放置在該讀機器所在虛擬圓環(huán)上的節(jié)點及虛擬節(jié)點上。然后銷毀原來的讀機器池,重新建立新的讀機器池。當該讀機器重啟后,池管理器檢查到該機器已經(jīng)啟動,會把該讀機器代替寫機器,然后銷毀原來的讀機器池,重新建立新的讀機器池。寫機器宕機也是同樣的操作。當新增加一個組的時候,池管理器檢查到有新的組增加,銷毀原來的讀寫機器池,重新建立新的讀寫機器池。并將該組的機器標志為新的機器。當數(shù)據(jù)訪問到該新機器的時候,如果有數(shù)據(jù)就返回。如果沒有數(shù)據(jù),則沿虛擬圓環(huán)順時針訪問下一個節(jié)點,如果該節(jié)點是老機器,則有數(shù)據(jù)就返回數(shù)據(jù)并且把該數(shù)據(jù)轉(zhuǎn)移到新機器上,沒有返回空。如果該節(jié)點是新機器,那么再沿虛擬的圓環(huán)順時針訪問下一個節(jié)點,直到老機器為止。如果到了數(shù)據(jù)設(shè)置的存儲有效期,則池管理器將新機器的標示改為老機器,銷毀原來的讀寫機器池,重新建立新的讀寫機器池。本發(fā)明所提供的分布式緩存池化、分片及故障轉(zhuǎn)移的系統(tǒng),通過分組、分布式讀寫,池化的結(jié)合實現(xiàn),不僅能完成一般的分布式緩存具有的功能,還可以大大提高了緩存的命中率,提高的網(wǎng)絡(luò)連接速度,增加了分布式緩存的吞吐量,實現(xiàn)了故障轉(zhuǎn)移。從而使本分布式緩存具有較高的命中率和吞吐量,更強的健壯性。利用本發(fā)明,可以將分布式緩存在一定程度上作為分布式內(nèi)存數(shù)據(jù)庫來使用。
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申請的一部分,并不構(gòu)成對本發(fā)明的限定。在附圖中圖I為系統(tǒng)架構(gòu)示意圖,圖2為本系統(tǒng)實現(xiàn)原理流程圖。
具體實施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖對本發(fā)明的具體實施例子進行詳細說明。在此,本發(fā)明的示意性實施例子及其說明用于解釋本發(fā)明,但并不作為對本發(fā)明的限定。分布式緩存池化、分片及故障轉(zhuǎn)移系統(tǒng)的架構(gòu)示意圖如圖I所示,系統(tǒng)分為客戶端,server集群,緩存集群三大部分,客戶端訪問server發(fā)出請求,server通過緩存客戶端調(diào)用緩存集群,緩存集群通過相應(yīng)的算法,返回數(shù)據(jù)給server,server將獲得的數(shù)據(jù)經(jīng)過業(yè)務(wù)處理呈現(xiàn)給客戶端。其具體實現(xiàn)原理及流程如圖2所示I、系統(tǒng)啟動時,初始化連接池,生成讀機器和寫機器的連接對象存儲在池中。2、客戶端訪問server發(fā)出請求,server通過緩存客戶端去取得連接對象,如果池中的連接被用完,無法取得,則通知池管理器根據(jù)設(shè)定的規(guī)則去增加新的連接對象,存儲在池中。3、如果取得連接對象,則將key根據(jù)相應(yīng)的算法生成哈希值,通過該哈希值獲取虛擬環(huán)上的一個節(jié)點。連接該節(jié)點對應(yīng)的緩存機器,如果該緩存機器連接失敗,則為該緩存機器做標記,然后通知池管理器,池管理器將該機器從共享對象中刪除,然后銷毀原來的連接池,重新建立新的連接池。4、如果該緩存機器連接成功,則讀寫數(shù)據(jù),如果是寫數(shù)據(jù),則數(shù)據(jù)寫入該機器緩存。系統(tǒng)運行結(jié)束。5、如果是讀數(shù)據(jù),則讀取數(shù)據(jù),如果取得數(shù)據(jù),則判斷是否是從key生成的哈希值對應(yīng)的節(jié)點,如果是這個節(jié)點,則將數(shù)據(jù)返回給server.6、如果不是這個節(jié)點,則將老節(jié)點中的數(shù)據(jù)添加到新節(jié)點中,將老節(jié)點中的數(shù)據(jù)刪除。將數(shù)據(jù)返回給server.7、如果讀取數(shù)據(jù)為空,判斷該機器是否是新機器。如果不是新機器,將空值返回給server.8、如果是新機器,順時針獲取虛擬環(huán)上的下一個節(jié)點。則循環(huán)3至7的步驟。
9、池管理器根據(jù)規(guī)則檢查連接池,當有新機器增加時,池管理器將新機器加入到共享對象中,將該機器標志為新機器。然后銷毀原來的連接池,重新建立新的連接池。10、池管理器根據(jù)規(guī)則檢查連接池,當有機器連接失敗時,池管理器將該機器從共享對象中刪除。然后銷毀原來的連接池,重新建立新的連接池。11、池管理器根據(jù)規(guī)則檢查連接池,當數(shù)據(jù)達到了設(shè)置的最長存儲有效期時,池管理器判斷是否有新機器標志的機器。如果有,則將該機器該為老機器標志,然后銷毀原來的連接池,重新建立新的連接池。12、當池管理器接到增加機器通知時,池管理器將新機器加入到共享對象中,將該機器標志為新機器。然后銷毀原來的連接池,重新建立新的連接池。本系統(tǒng)通過將池化、分片、故障轉(zhuǎn)移有機的結(jié)合,形成了一套完善的分布式緩存系 統(tǒng)。本系統(tǒng)具有很強的健壯性,先進性,通用性,很好的可維護性,易用性。利用本系統(tǒng),可以大大提高緩存的命中率、網(wǎng)絡(luò)連接速度和緩存吞吐量,自動實現(xiàn)故障轉(zhuǎn)移。
權(quán)利要求
1. 一種分布式緩存池化、分片及故障轉(zhuǎn)移方法及系統(tǒng)實現(xiàn),其特征在于,在新增機器的時候,通過對原機與新機的狀態(tài)標識,實現(xiàn)數(shù)據(jù)從原機到新機自動遷移,使得機器增加前后命中率保持一致。通過分組分片技術(shù),動態(tài)對象池化,使同組的互備機器發(fā)生故障時自動切換,切換后的機器動態(tài)對象池化,保證了切換后的機器和故障機具有相同哈希值,保證了切換前后命中率的一致性。
全文摘要
一種分布式緩存池化、分片及故障轉(zhuǎn)移的方法及系統(tǒng),可以使緩存進行池化、分片及故障轉(zhuǎn)移,并且可以動態(tài)實現(xiàn)故障轉(zhuǎn)移和池化。
文檔編號H04L29/08GK102710763SQ20121016855
公開日2012年10月3日 申請日期2012年5月29日 優(yōu)先權(quán)日2012年5月29日
發(fā)明者徐高省 申請人:新華網(wǎng)股份有限公司