国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于分布式Redis集群的WEB共享管理研究

2018-10-23 02:02:40
計算機與數(shù)字工程 2018年10期
關(guān)鍵詞:關(guān)鍵字集群分布式

黃 裕

(廣東生態(tài)工程職業(yè)學(xué)院 廣州 510520)

1 引言

隨著大數(shù)據(jù)時代的來臨,基于WEB共享的信息系統(tǒng)需要面對的數(shù)據(jù)具有海量、實時、高并發(fā)等特點,這就要求WEB共享能夠快速響應(yīng)大量的磁盤寫入、讀出操作,高頻率地更新數(shù)據(jù)檢索目錄,高效率地處理大規(guī)模的內(nèi)存數(shù)據(jù)處理隊列。目前常用的WEB共享系統(tǒng)的數(shù)據(jù)存儲平臺都是分布式的物理磁盤的文件系統(tǒng)?;诜植际酱疟P文件系統(tǒng)系統(tǒng)具有較好的存儲分布性和結(jié)構(gòu)可拓展性,可用較低的性價比提供巨大的存儲空間,還擁有較強的數(shù)據(jù)存儲可靠性和較高的數(shù)據(jù)存取吞吐量。但是由于基于物理磁盤的文件系統(tǒng)在處理高并發(fā)的海量數(shù)據(jù)的實時存取時需要大量磁盤I/O操作,而且需要消耗大量的內(nèi)存資源,因此會導(dǎo)致數(shù)據(jù)處理性能急劇下降、數(shù)據(jù)檢索效率低下、服務(wù)器內(nèi)存泄漏甚至數(shù)據(jù)丟失、系統(tǒng)崩潰。

針對這種高并發(fā)的海量數(shù)據(jù)實時存取引發(fā)的性能瓶頸,基于分布式內(nèi)存數(shù)據(jù)庫Redis的集群體現(xiàn)了突出的優(yōu)勢。Redis是一種能夠提供高速訪問、豐富數(shù)據(jù)類型支持、高并發(fā)讀寫能力的內(nèi)存數(shù)據(jù)庫?;诜植际降腞edis集群則是利用冗余的Redis數(shù)據(jù)庫構(gòu)建的具有數(shù)據(jù)冗余、故障容錯的分布式數(shù)據(jù)庫系統(tǒng),具有Redis數(shù)據(jù)庫所有優(yōu)異性能之外還能夠降低單點損失,對外提供可靠數(shù)據(jù)管理服務(wù)。

本文通過對分布式Redis集群的關(guān)鍵技術(shù)進(jìn)行深入研究,并利用Redis內(nèi)存數(shù)據(jù)庫集群的性能優(yōu)勢,構(gòu)建分布式存儲架構(gòu),將分布式Redis集群應(yīng)用于基于WEB的海量數(shù)據(jù)實時共享系統(tǒng),提高WEB共享系統(tǒng)的數(shù)據(jù)實時處理的能力,為高并發(fā)的海量數(shù)據(jù)的實時存取提供一種高效的解決方案。

2 分布式Redis集群的關(guān)鍵技術(shù)

2.1 分布式Redis集群的容錯機制

Redis節(jié)點集群是由主節(jié)點和從節(jié)點組成全連接拓?fù)浣Y(jié)構(gòu)。主節(jié)點保存從節(jié)點的數(shù)據(jù)備份。集群節(jié)點兩兩之間建立點到點的連接,并通過心跳信息傳遞節(jié)點是否可達(dá)的信息。Redis集群的拓?fù)浣Y(jié)構(gòu)如圖1所示。

圖1 Redis集群的網(wǎng)絡(luò)拓?fù)涫疽鈭D

Redis集群在運行過程中,需要高效率的實現(xiàn)對故障節(jié)點的掉線檢測和節(jié)點修復(fù)。故障節(jié)點按其狀態(tài)可分為疑似掉線、掉線和恢復(fù)三個階段。集群中節(jié)點是通過和其他節(jié)點通過周期性的心跳信息來獲取各自節(jié)點狀態(tài)信息。心跳信息的發(fā)送分為兩個階段:首先在發(fā)送周期的一開始發(fā)送hello信息;其次向超過T/2時間沒有通信的所有節(jié)點發(fā)送hello信息。其中T為心跳超時時間。心跳信息分為hello和echo兩種格式。心跳信息包含一個in?fo負(fù)載字段.info字段隨機包含若干條節(jié)點的狀態(tài)信息。

發(fā)送節(jié)點首先隨機性選取一個節(jié)點發(fā)生hello心跳信息,如果超過超時時間T仍沒有收到echo回復(fù)信息,就將對應(yīng)節(jié)點標(biāo)記為疑似掉線狀態(tài);如果在T之內(nèi)收到回復(fù)信息echo,就對回復(fù)信息的info字段進(jìn)行解析并更新本地節(jié)點狀態(tài)數(shù)據(jù)庫。隨著節(jié)點不斷發(fā)送心跳信息,超過半數(shù)的節(jié)點把該節(jié)點的狀態(tài)標(biāo)記為疑似掉線,就確定該節(jié)點掉線。

如果主節(jié)點被確定為掉線,就需要進(jìn)行節(jié)點修復(fù)操作。首先從節(jié)點在Redis集群內(nèi)廣播主節(jié)點選舉信息,Redis集群進(jìn)入節(jié)點修復(fù)狀態(tài)。收到選舉信息的主節(jié)點依據(jù)選舉算法給從節(jié)點投票,獲得超過一半主節(jié)點投票的從節(jié)點被選舉為新的主節(jié)點。新的主節(jié)點當(dāng)選后廣播獲選信息,Redis集群結(jié)束節(jié)點修復(fù)狀態(tài)并恢復(fù)上線。

由上述分析可知快速收斂對故障節(jié)點的狀態(tài)檢測是提高容錯機制效率的關(guān)鍵。在故障節(jié)點的檢測過程中,Redis集群節(jié)點可分為兩類:已知故障節(jié)點的不可達(dá)狀態(tài)的節(jié)點(記作已知節(jié)點)和未知故障節(jié)點的不可達(dá)狀態(tài)的節(jié)點(記作未知節(jié)點)。

集群節(jié)點總數(shù)為S。檢測過程一開始,只有一個已知節(jié)點N。N每次隨機對一個節(jié)點進(jìn)行狀態(tài)傳播。則傳播過程可表示為{B (m),m>0}。其中B(m)表示為經(jīng)過m次傳播后已知節(jié)點的次數(shù),顯然B(0)=1。

假設(shè)B(m)=y,則B(m+1)后已知節(jié)點可能增加的數(shù)量記為x,其中 x∈[0 , y]。增加x個節(jié)點的概率為

由式(1)可以得出B(m+1)為

經(jīng)過公式整理和遞推計算可以推導(dǎo)出:

式(3)表明了經(jīng)過m次的心跳發(fā)送,已知節(jié)點的數(shù)量。當(dāng)B(m)=S/2時,就能夠完成掉線檢測。因此完成掉線檢測所需的心跳發(fā)送次數(shù)為

假設(shè)心跳發(fā)送頻率為f,心跳信息中info字段中包含故障節(jié)點的概率為p,掉線檢測耗時t滿足:

為加快故障節(jié)點信息的狀態(tài)檢測過程,同時不能過度增加節(jié)點的通訊負(fù)擔(dān)和網(wǎng)絡(luò)負(fù)載,需要均衡心跳信息的通訊負(fù)載,使得心跳信息的發(fā)送數(shù)量在時間上保持均衡,降低心跳信息的發(fā)送峰值,同時還要避免節(jié)點的心跳間隔過長。

假設(shè)某節(jié)點心跳頻率為f,在T/2的時間內(nèi)執(zhí)行心跳函數(shù)的次數(shù)為Z,在T/2的時間內(nèi)發(fā)送心跳信息的數(shù)量為C。記第x次心跳信息中發(fā)送量為hx。則在T/2時間內(nèi),需要根據(jù)節(jié)點狀態(tài)數(shù)據(jù)庫重新計算hx:

如果集群內(nèi)節(jié)點數(shù)量不變,T/2內(nèi)通信的數(shù)量固定為C=S-1。結(jié)合式(3)和式(5)可得出:

為避免節(jié)點心跳間隔過長,可使用優(yōu)先級隊列來選擇心跳對象節(jié)點的。優(yōu)先級依據(jù)與該節(jié)點心跳時間間隔來設(shè)置,時間越長優(yōu)先級越高。這樣可保證優(yōu)先向心跳間隔最長的節(jié)點發(fā)送心跳信息。

Redis集群發(fā)送心跳信息的算法過程如下:

1)初始化隊列Q1、隊列Q2和計數(shù)器Counter:Q1為空;Q2包含所有節(jié)點;Counter設(shè)置為1。

2)如果Q1為空且Counter為1,則交換隊列Q1和隊列Q2。

4)從隊列Q1中彈出hx個節(jié)點,發(fā)送心跳信息;把 hx個節(jié)點壓出隊列Q2;對(i+1)/K取余,并把取余結(jié)果賦值給i。

5)跳轉(zhuǎn)步驟2)執(zhí)行。

2.2 數(shù)據(jù)讀寫流程

基于分布式Redis集群的數(shù)據(jù)存儲過程主要包括數(shù)據(jù)緩存、建立索引、數(shù)據(jù)整理與磁盤寫入。為提高數(shù)據(jù)寫入的并發(fā)能力,數(shù)據(jù)在寫入之間要將數(shù)據(jù)分成小數(shù)據(jù)塊分配到不同的Redis客戶端。數(shù)據(jù)存儲流程如圖2所示。

圖2 數(shù)據(jù)存儲流程

數(shù)據(jù)寫入操作的具體描述如下:

1)讀取外部程序的數(shù)據(jù),分塊讀取的數(shù)據(jù),批量存入分布式Redis節(jié)點。

2)建立數(shù)據(jù)索引,并在Redis集群內(nèi)部共享索引。

3)根據(jù)索引合并數(shù)據(jù)塊。

4)把處理后的數(shù)據(jù)提交給HDFS客戶端,進(jìn)行物理磁盤寫入操作。

基于分布式Redis集群的數(shù)據(jù)讀取過程主要包括緩存檢索、索引映射、磁盤數(shù)據(jù)讀入和數(shù)據(jù)緩存。為提高數(shù)據(jù)讀取的響應(yīng)能力,Redis集群緩存了磁盤數(shù)據(jù)的索引和一部分使用頻率較高的數(shù)據(jù)。數(shù)據(jù)讀取流程如圖3所示。

圖3 數(shù)據(jù)訪問流程

數(shù)據(jù)讀取操作的具體描述如下:

1)接受外部程序的數(shù)據(jù)讀取請求。

2)檢索Redis集群中是否存儲了要訪問的數(shù)據(jù),如有,立即返回數(shù)據(jù);如沒有轉(zhuǎn)步驟3)。

3)在Redis集群中檢索數(shù)據(jù)索引,并把檢索到的索引映射給磁盤文件系統(tǒng)的管理客戶端。

4)磁盤文件系統(tǒng)的管理客戶端根據(jù)接收的索引記錄讀取、合并數(shù)據(jù),把整理好的數(shù)據(jù)緩存到Re?dis集群中,并由Redis節(jié)點把數(shù)據(jù)返回給外部程序。

5)數(shù)據(jù)預(yù)存儲機制激活,把從磁盤文件系統(tǒng)中讀取的數(shù)據(jù)設(shè)置為使用頻率高的文件,緩存到Re?dis集群中,把使用頻率最低的文件替換掉。

2.3 數(shù)據(jù)索引的建立

快速讀取數(shù)據(jù)的一個關(guān)鍵是實時建立數(shù)據(jù)索引。由于WEB數(shù)據(jù)存儲在時間上的隨機性和數(shù)量上的海量性,給Redis集群上數(shù)據(jù)索引的更新、維護(hù)帶來困難。Redis是基于鍵值對的數(shù)據(jù)庫,這讓Re?dis數(shù)據(jù)庫擁有高效率的基于主鍵檢索的優(yōu)勢,但是在面對基于非主鍵的檢索時,Redis需要全表關(guān)鍵字掃描,效率難以得到保證,而且其響應(yīng)速度會隨著索引結(jié)構(gòu)的增大而快速降低。為此需要對Re?disd的索引結(jié)構(gòu)進(jìn)行輕量化處理,以適應(yīng)快速檢索的需求。

用二維平面代表磁盤文件系統(tǒng)的邏輯地址,其中每一個網(wǎng)格表示數(shù)據(jù)的一個邏輯地址,如圖4所示。在邏輯地址平面中為每一個常用的檢索關(guān)鍵字分配一個可以由Z曲線完整編碼的矩陣,如圖中矩形框z1、z2、z3。在同一矩陣內(nèi)的數(shù)據(jù)具有相同的關(guān)鍵字,在矩陣相交區(qū)域則具有所屬矩陣關(guān)鍵字的組合,如z1和z2相交區(qū)域具有z1·z2的關(guān)鍵字組合。

圖4 邏輯地址的二維平面

Redis用鍵值對的形式保存所有關(guān)鍵字矩陣之間的包含關(guān)系形成關(guān)鍵字矩陣索引表,如表1所示。Redis用鍵值對的形式記錄關(guān)鍵字所屬矩陣及其交叉矩陣的索引信息,如表2所示。其中關(guān)鍵所屬矩陣的索引信息包含其實網(wǎng)格的二維平面坐標(biāo)和網(wǎng)格數(shù)量。

表1 關(guān)鍵字矩陣索引表

表2 關(guān)鍵字所屬矩陣索引表

通過對關(guān)鍵字建立矩陣索引,可以快速檢索到不同關(guān)鍵字組合所分布的邏輯區(qū)域,進(jìn)一步提高了含有相同關(guān)鍵字的數(shù)據(jù)之間的關(guān)聯(lián)度,大大提升了基于關(guān)鍵字的數(shù)據(jù)檢索效率。

3 基于分布式Redis集群的WEB共享架構(gòu)

共享數(shù)據(jù)普遍具有海量性、數(shù)據(jù)的無特定相關(guān)性、數(shù)據(jù)的并發(fā)訪問量大以及數(shù)據(jù)訪問響應(yīng)的實時性等。根據(jù)共享數(shù)據(jù)的上述特點,利用分布式Re?dis集群的高速讀寫性能和分布式原理作為系統(tǒng)數(shù)據(jù)存儲的緩存,提高數(shù)據(jù)訪問的速度和系統(tǒng)的并行性,從而解決大的訪問量,而將不經(jīng)常訪問的數(shù)據(jù)存儲在磁盤上的Hadoop文件系統(tǒng)中,形成兩級的數(shù)據(jù)存儲架構(gòu),如圖5所示。

圖5 基于分布式Redis集群的WEB共享架構(gòu)示意圖

圖5 所示的架構(gòu)主要由分布式Redis集群、存儲集群、代理服務(wù)器組成。Redis集群具有較強的數(shù)據(jù)讀寫性能,作為存儲集群的分布式數(shù)據(jù)緩存系統(tǒng)。在大數(shù)據(jù)系統(tǒng)中存儲集群通常是基于Hadoop的HDFS存儲集群。存儲系統(tǒng)為數(shù)據(jù)永久存儲提供磁盤空間。代理服務(wù)器的主要作用是接受外部用戶提交的數(shù)據(jù)訪問請求,并把請求數(shù)據(jù)訪問連接分發(fā)給Reids節(jié)點,具體的操作由Redis完成。

HDFS存儲集群使用分布式Redis集群作為數(shù)據(jù)存儲的緩存,HDFS集群中各節(jié)點都能直接訪問Redis集群,因此,采用這種基于Redis分布式緩存的架構(gòu)具有結(jié)構(gòu)清晰、數(shù)據(jù)存取效率高的優(yōu)勢。HDFS系統(tǒng)的數(shù)據(jù)存取操作分為兩步。

第一步,HDFS把共享數(shù)據(jù)加載到分布式Redis集群中。這一步主要是由一個Map階段的作業(yè)來完成。各Map任務(wù)節(jié)點并行地獲取集群外部的數(shù)據(jù),并保存到Redis集群中。

第二步,當(dāng)Redis集群的緩存數(shù)據(jù)存儲完成后,MapReduce節(jié)點開始建立起到Redis集群的連接,以便在執(zhí)行數(shù)據(jù)操作時可以隨時訪問Redis集群讀寫共享數(shù)據(jù)。

4 測試分析

測試環(huán)境為90個節(jié)點構(gòu)成的Redis集群,其中包括30個主節(jié)點。測試用的Redis版本為最新的穩(wěn)定版3.2.9。測試用到的物理主機有兩臺,配置為48核、內(nèi)存256G、cpu為Inter至強E5-2690 V3 2.69GHz。為了驗證文中闡述的分布式Redis集群的性能,分別進(jìn)行如下三項測試:主節(jié)點故障恢復(fù)測試、數(shù)據(jù)緩存性能測試和不同數(shù)據(jù)量下檢索性能測試。

4.1 主節(jié)點故障恢復(fù)測試

Redis集群主節(jié)點故障恢復(fù)測試主要是記錄集群恢復(fù)故障節(jié)點的時間。主節(jié)點恢復(fù)過程分為三個階段:故障檢測階段、故障確定階段和故障恢復(fù)階段,各階段耗時依次記為t1、t2、t3。首先在測試集群中人為宕機1~14個主節(jié)點,然后分別對各階段耗費時間進(jìn)行記錄分析。其中故障檢測階段是單個節(jié)點發(fā)送心跳信息,這主要與節(jié)點的配置性能有關(guān),因此這個階段耗用的時間本次測試不予記錄。

圖6 主節(jié)點故障恢復(fù)時間測試結(jié)果

由圖6可以看出,Redis集群在故障確定階段耗費時間極短,這是由于本文所述的Redis集群采用效率較高的故障容錯機制。故障恢復(fù)階段耗費時間較長是因為此階段需要在所有節(jié)點運行選舉算法??傮w而言,Redis的故障恢復(fù)時間能夠控制在20s以內(nèi)。

4.2 數(shù)據(jù)讀寫性能測試

實驗數(shù)據(jù)使用網(wǎng)頁鏈接數(shù)據(jù),共包含52773315個網(wǎng)頁節(jié)點,大小約41GB。測試步驟是先把數(shù)據(jù)寫入磁盤,隨后再把數(shù)據(jù)讀出。測試中為了驗證Redis集群的性能,使用30、60、90個節(jié)點分別進(jìn)行測試。測試結(jié)果如表3所示。

表3 分布式Redis集群數(shù)據(jù)讀寫測試結(jié)果

測試結(jié)果表明,分布式Redis集群具有較好的數(shù)據(jù)吞吐量,這主要是由于Redis是基于內(nèi)存的數(shù)據(jù)庫,數(shù)據(jù)直接從內(nèi)存讀取,效率能夠得到很好的保證。而且隨著節(jié)點數(shù)目的增加,Redis集群的數(shù)據(jù)讀寫能力直線上升,說明Redis集群具有很好的可拓展性,能夠比較簡便地通過增加節(jié)點的數(shù)量來提升集群的數(shù)據(jù)讀寫性能。

4.3 數(shù)據(jù)索引性能測試

測試首先對不同數(shù)據(jù)量下的索引文件的大小進(jìn)行記錄。然后對不同數(shù)據(jù)量下的基于關(guān)鍵字的檢索速度進(jìn)行測試。測試結(jié)果如圖7所示。

圖7 數(shù)據(jù)索引性能測試結(jié)果

文中所述的Redis索引是基于關(guān)鍵字矩陣的鍵值對,所有數(shù)據(jù)的邏輯地址的索引信息都概括為矩陣的起始坐標(biāo)和矩陣的大小兩個信息,因此索引文件在海量數(shù)據(jù)的基礎(chǔ)上仍能夠保持較小的體積?;陉P(guān)鍵字矩陣的Redis索引把關(guān)鍵字重合的區(qū)域定義為不同的關(guān)鍵字區(qū)域,這樣使得基于關(guān)鍵字檢索時能夠快速定位目標(biāo)區(qū)域,減少了無效的索引掃描,加快了索引檢索的速度。

5 結(jié)語

為了解決WEB共享的高并發(fā)的海量數(shù)據(jù)實時存取引發(fā)的性能瓶頸問題,本文提出了在傳統(tǒng)存儲系統(tǒng)的基礎(chǔ)上增加Redis分布式集群作為緩存的解決思路。測試結(jié)果表明,Redis分布式集群具有運行穩(wěn)定性好,大數(shù)據(jù)并發(fā)讀寫時具有優(yōu)異的性能,數(shù)據(jù)檢索速度快等優(yōu)點,同時Redis分布式集群可拓展性優(yōu)異,能夠很好地與不同數(shù)據(jù)需求的系統(tǒng)相結(jié)合,有效地提升了WEB共享中高并發(fā)的海量數(shù)據(jù)的實時讀寫效率。

猜你喜歡
關(guān)鍵字集群分布式
履職盡責(zé)求實效 真抓實干勇作為——十個關(guān)鍵字,盤點江蘇統(tǒng)戰(zhàn)的2021
華人時刊(2022年1期)2022-04-26 13:39:28
成功避開“關(guān)鍵字”
海上小型無人機集群的反制裝備需求與應(yīng)對之策研究
一種無人機集群發(fā)射回收裝置的控制系統(tǒng)設(shè)計
電子制作(2018年11期)2018-08-04 03:25:40
分布式光伏熱錢洶涌
能源(2017年10期)2017-12-20 05:54:07
分布式光伏:爆發(fā)還是徘徊
能源(2017年5期)2017-07-06 09:25:54
Python與Spark集群在收費數(shù)據(jù)分析中的應(yīng)用
勤快又呆萌的集群機器人
基于DDS的分布式三維協(xié)同仿真研究
西門子 分布式I/O Simatic ET 200AL
大渡口区| 秦安县| 怀安县| 保靖县| 巴塘县| 平江县| 建始县| 阳山县| 漠河县| 得荣县| 津南区| 宁津县| 苗栗县| 甘南县| 美姑县| 阿勒泰市| 宁国市| 龙州县| 桂平市| 大竹县| 沽源县| 香港 | 南木林县| 新郑市| 英德市| 汝州市| 闽清县| 扎鲁特旗| 曲阳县| 卓尼县| 英德市| 苏尼特右旗| 康保县| 五华县| 苗栗县| 神农架林区| 喀喇沁旗| 咸丰县| 沅陵县| 大新县| 丰顺县|