欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)及方法與流程

文檔序號:12122643閱讀:315來源:國知局
基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)及方法與流程

本發(fā)明涉及計算機軟件技術(shù)領(lǐng)域,尤其涉及云計算技術(shù)領(lǐng)域,具體是指一種基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)及方法。



背景技術(shù):

緩存作為一種有效提高性能的技術(shù)已經(jīng)被廣泛采用,使用緩存的一個難點在于保證緩存中的數(shù)據(jù)正確性,即保證緩存的數(shù)據(jù)和數(shù)據(jù)源的數(shù)據(jù)一致性。在傳統(tǒng)單機環(huán)境下,從數(shù)據(jù)源加載數(shù)據(jù)和將數(shù)據(jù)持久化到數(shù)據(jù)源都由單機應(yīng)用完成,實現(xiàn)相對簡單。但是在云計算環(huán)境下,保證緩存的數(shù)據(jù)和數(shù)據(jù)源的數(shù)據(jù)一致性更有挑戰(zhàn),在云計算環(huán)境下,一般的數(shù)據(jù)都通過專門的微服務(wù)來訪問,為保證可用性,微服務(wù)都采用多節(jié)點部署,意味著不能再簡單的由每個節(jié)點來加載和持久化數(shù)據(jù)。另外云計算環(huán)境下,資源多由自動分配,所以將加載和持久化綁定到某個節(jié)點也不可行。緩存的數(shù)據(jù)加載是使用緩存的基礎(chǔ),需要一套成熟的技術(shù)和方法來支撐。

現(xiàn)在各系統(tǒng)使用緩存時加載和持久化過程呈現(xiàn)多樣化的特點,有些系統(tǒng)采用人工初始化的方法,這類系統(tǒng)主要針對的是靜態(tài)數(shù)據(jù),初始化完成后數(shù)據(jù)長期不會變化,如果需要變化需要人工重新初始化。對于非靜態(tài)數(shù)據(jù),目前大多數(shù)采用硬編碼的方式,針對不同系統(tǒng),不同類型的數(shù)據(jù)源做不同的適配,對于云計算環(huán)境下還需要單獨的配置指定某個節(jié)點完成加載或持久化動作,沒有一種統(tǒng)一的規(guī)劃和技術(shù)方案。

現(xiàn)有的實現(xiàn)方式存在以下不足:1、實施周期長,而且因為實施人員的水品參差不齊也給測試帶來更大的工作量;2、對于云計算環(huán)境下,需要指定固定的節(jié)點來完成加載或持久化動作,一旦該節(jié)點出現(xiàn)問題,就不能保證緩存數(shù)據(jù)的時效性;3、針對不同類型的數(shù)據(jù)源硬編碼過多,不能達到很好復(fù)用的效果。



技術(shù)實現(xiàn)要素:

本發(fā)明的目的是克服了上述現(xiàn)有技術(shù)的缺點,提供了一種能夠?qū)崿F(xiàn)在云計算環(huán)境下自動選擇服務(wù)節(jié)點加載和持久化緩存數(shù)據(jù)的系統(tǒng)及方法。

為了實現(xiàn)上述目的,本發(fā)明的具有如下構(gòu)成:

一種基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng),包括調(diào)度模塊、緩存模塊、數(shù)據(jù)源模塊和事件模塊,所述的調(diào)度模塊分別與所述的緩存模塊、數(shù)據(jù)源模塊和事件模塊相連接。

較佳地,所述的調(diào)度模塊包括:

分布式選舉單元,用于對每個緩存的數(shù)據(jù)集選舉一個leader,由該leader執(zhí)行將緩存的數(shù)據(jù)項從數(shù)據(jù)源加載到緩存中,并且由該leader將緩存中的數(shù)據(jù)持久化到數(shù)據(jù)源中;

任務(wù)工作池單元,該任務(wù)工作池單元為一用于管理加載和持久化執(zhí)行的線程,并支持彈性調(diào)整執(zhí)行線程數(shù)量,在忙時增加處理線程,在閑時釋放處理線程。

較佳地,所述的緩存模塊包括:

緩存接口單元,定義該緩存的加載或持久化的系統(tǒng)與在各緩存實現(xiàn)之間的交互接口,通過該緩存接口單元與具體的緩存實現(xiàn)進行解耦,從而支持多重緩存實現(xiàn),如Redis、memcache等;

緩存適配單元,用于針對具體的緩存存儲對緩存SPI的實現(xiàn)。

較佳地,所述的數(shù)據(jù)源模塊包括:

數(shù)據(jù)定義單元,用于定義緩存的數(shù)據(jù)集來源,所述的數(shù)據(jù)來源包括配置文件、關(guān)系型數(shù)據(jù)庫和外部系統(tǒng),并且定義數(shù)據(jù)的加載和持久化策略,所述的數(shù)據(jù)的加載和持久化策略包括定時加載和持久化策略和通知加載和持久化策略,其中,加載和持久化方法包括同步和異步兩種;

數(shù)據(jù)源適配單元,用于從數(shù)據(jù)讀取數(shù)據(jù),并將數(shù)據(jù)寫到數(shù)據(jù)源,該數(shù)據(jù)源適配單元可以根據(jù)需要擴展多個,分別針對不同的數(shù)據(jù)源。

較佳地,所述的事件模塊包括:

事件中心單元,leader節(jié)點通過該事件中心單元接收非leader節(jié)點的狀態(tài)變化通知。

還包括一種通過上述系統(tǒng)基于云計算實現(xiàn)緩存的加載或持久化的方法,所述的方法包括以下步驟:

(1)定義緩存提供者;

(2)定義緩存數(shù)據(jù)集以及加載或持久化策略;

(3)自動調(diào)度加載或持久化;

(4)發(fā)布數(shù)據(jù)變化事件。

較佳地,所述的步驟(1)包括以下步驟:

(1-1)根據(jù)緩存提供者配置文件模板新建緩存提供者配置文件,擴展名為:.chpx;

(1-2)在所述的緩存提供者配置文件中按照模板增加緩存實例定義;

(1-3)為所述的緩存實例定義配置id屬性,所配置的id值必須全局唯一;

(1-4)為所述的緩存實例定義配置provider屬性,provider屬性的值是一種緩存SPI接口的實現(xiàn),如redis緩存SPI實現(xiàn);

(1-5)為所述的緩存實例定義配置私有屬性,如果是本地緩存,則配置緩存大??;如果是遠程緩存,則配置遠程緩存的地址、端口、用戶名和密碼。

較佳地,所述的步驟(2)包括以下步驟:

(2-1)根據(jù)緩存數(shù)據(jù)集配置文件模板新建緩存數(shù)據(jù)集配置文件,擴展名為:.chsx;

(2-2)在所述的緩存數(shù)據(jù)集配置文件中按照模板增加緩存數(shù)據(jù)集的定義;

(2-3)為所述的緩存數(shù)據(jù)集定義配置命名空間屬性和數(shù)據(jù)集名稱屬性,所述的命名空間屬性和所述的數(shù)據(jù)集名稱屬性組合生成一個唯一的id,組合規(guī)則為:命名空間+“.”+數(shù)據(jù)集名稱;

(2-4)為所述的緩存數(shù)據(jù)定義配置數(shù)據(jù)源類型,如果是數(shù)據(jù)源類型是文件型,則配置文件路徑,如果是關(guān)系型數(shù)據(jù)庫類型,則配置關(guān)系型數(shù)據(jù)庫的服務(wù)器地址和端口;

(2-5)為所述的緩存數(shù)據(jù)定義配置加載或持久化策略。

更佳地,所述的步驟(2-5)包括以下步驟:

(2-5-1)為所述的緩存數(shù)據(jù)集定義配置場景類型:“加載”或“持久化”,如果是“加載”場景類型,則繼續(xù)步驟(2-5-2),如果是“持久化”場景類型,則繼續(xù)步驟(2-5-3);

(2-5-2)為所述的緩存數(shù)據(jù)集定義配置read實現(xiàn)類,其中read實現(xiàn)類從上述配置的數(shù)據(jù)源中讀取數(shù)據(jù),繼續(xù)步驟(2-5-4);

(2-5-3)為所述的緩存數(shù)據(jù)集定義配置write實現(xiàn)類,其中write實現(xiàn)類從將緩存中變化的內(nèi)容持久化到上述的數(shù)據(jù)源中;

(2-5-4)為所述的緩存數(shù)據(jù)集定義配置調(diào)度策略,可設(shè)置的值為固定頻率刷新、懶加載和緩沖區(qū)大小閾值,如果設(shè)置的值為固定刷新頻率,則繼續(xù)設(shè)置刷新周期,如果設(shè)置的值為緩沖區(qū)大小,則繼續(xù)設(shè)置緩沖區(qū)的閾值;

(2-5-5)為所述的緩存數(shù)據(jù)集定義配置動作模式,可設(shè)置的值為同步和異步。

較佳地,所述的步驟(3)包括以下步驟:

(3-1)加載緩存提供者配置文件;

(3-2)加載緩存數(shù)據(jù)集配置文件;

(3-3)針對每個緩存數(shù)據(jù)集選擇一個leader節(jié)點來執(zhí)行加載或持久化動作,在有更新時判斷當前節(jié)點類型,如果是非leader節(jié)點,則繼續(xù)步驟(3-4),如果是leader節(jié)點,則繼續(xù)步驟(3-5);

(3-4)非leader節(jié)點當緩存,通過上述事件子系統(tǒng)通知leader節(jié)點有變化的key,繼續(xù)步驟(3-3);

(3-5)leader節(jié)點根據(jù)上述配置的加載或持久化策略來加載或持久化數(shù)據(jù),繼續(xù)步驟(3-3)。

更佳地,其特征在于,所述的步驟(3-1)包括以下步驟:

(3-1-1)掃描指定目錄下所有以.chpx為擴展名的文件,調(diào)用解析器解析成緩存數(shù)據(jù)配置模型對象;

(3-1-2)將模型對象注冊到緩存提供者manager中,在系統(tǒng)停止時通過manager釋放資源;

(3-1-3)如果模型對象指示的緩存提供者為遠程緩存,則啟動該模型,建立與遠程緩存的連接。

更佳地,所述的步驟(3-2)包括以下步驟:

(3-2-1)掃描指定目錄下的所有以.chsx為擴展名的文件,調(diào)用解析器解析成配置模型對象;

(3-2-2)將模型對象注冊到緩存數(shù)據(jù)集manager中,在系統(tǒng)停止時通過manager釋放資源。

更佳地,所述的針對每個緩存數(shù)據(jù)集選擇一個leader節(jié)點來執(zhí)行加載或持久化動作,具體為:

(3-3-1)生成一個唯一的節(jié)點id,目前生成id的方式為uuid;

(3-3-2)構(gòu)造用于保存選舉狀態(tài)的緩存key,key的生成規(guī)則為“_learder_key_”+緩存數(shù)據(jù)集id,即“_leader_key_”+緩存數(shù)據(jù)集命名空間+“.”+緩存數(shù)據(jù)集名稱;

(3-3-3)將用于檢查狀態(tài)值的計數(shù)器初始化為零;

(3-3-4)將暫存的上次選舉狀態(tài)值初始化為空;

(3-3-5)通過緩存SPI單元的get接口獲取當前的選舉狀態(tài)值,并判斷當前的選舉狀態(tài)值,如果是當前的選舉狀態(tài)值null,則繼續(xù)步驟(3-3-6),如果當前的選舉狀態(tài)值不等于暫存的上次選舉狀態(tài)值,則繼續(xù)步驟(3-3-7),如果是leader節(jié)點,則繼續(xù)步驟(3-3-8),否則,繼續(xù)步驟(3-3-9);

(3-3-6)自薦成為leader,繼續(xù)步驟(3-4);

(3-3-7)檢查狀態(tài)值的計數(shù)器清零,將暫存選舉狀態(tài)值設(shè)置為所述的當前選舉狀態(tài)值,并在等待1秒后繼續(xù)步驟(3-3-5);

(3-3-8)根據(jù)上述獲取到的選舉狀態(tài)值確定是否自身是leader節(jié)點,生成新的選舉狀態(tài)值,并通過緩存模塊的SPI接口replace更新緩存,繼續(xù)步驟(3-4);

(3-3-9)將檢查狀態(tài)值計算器的值+1,并判斷是否計算器值達到上限,如果是,則自薦成為leader。

更進一步地,所述的自薦成為leader,具體為:

(3-3-6-1)生成新的選舉狀態(tài)值,生成規(guī)則為:上述生成的唯一節(jié)點id+“.”+最新時間戳;

(3-3-6-2)通過緩存模塊的replace接口嘗試將選舉狀態(tài)值設(shè)置為所述的新的選舉狀態(tài)值,如果是設(shè)置成功,則自薦成功,否則自薦失敗,其中replace接口原子的檢查舊狀態(tài)值沒有變化才會更新為新狀態(tài)值;

(3-3-6-3)將暫存的上次選舉狀態(tài)值更新為所述的新的選舉狀態(tài)值。

更進一步地,所述的根據(jù)上述獲取到的選舉狀態(tài)值確定是否自身是leader節(jié)點,具體為:

(3-3-8-1)從上述獲取到的選舉狀態(tài)中獲取leader的節(jié)點id,獲取方式為取選舉狀態(tài)值中的開始到“.”的部分;

(3-3-8-2)比較上述獲取到的leader節(jié)點id和自身的節(jié)點id,如果相等則自身是leader節(jié)點,否則不是。

較佳地,所述的步驟(4)包括以下步驟:

(4-1)獲取leader節(jié)點的事件發(fā)送地址;

(4-2)通過restful接口地址發(fā)送變化調(diào)目的key,不需要發(fā)送當前的值,對于多個key的連續(xù)更新可以合并事件。

采用了該發(fā)明中的基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)及方法,系統(tǒng)架構(gòu)簡單,不依賴于某種緩存實現(xiàn)或者某種具體類型的數(shù)據(jù)源,在云計算環(huán)境下能自動選擇服務(wù)節(jié)點加載和持久化緩存數(shù)據(jù),適用于不同類型的數(shù)據(jù)源硬編碼,具有廣泛的應(yīng)用范圍。

附圖說明

圖1為本發(fā)明的基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)的持久化數(shù)據(jù)流示意圖。

圖2為本發(fā)明的基于云計算實現(xiàn)緩存的加載或持久化的方法的加載數(shù)據(jù)流示意圖。

圖3為本發(fā)明的基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)及方法的自動調(diào)度加載或持久化處理流程圖。

圖4為本發(fā)明的基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)及方法的節(jié)點自薦流程圖。

圖5為本發(fā)明的基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)及方法的的加載或持久化數(shù)據(jù)流程圖。

具體實施方式

為了能夠更清楚地描述本發(fā)明的技術(shù)內(nèi)容,下面結(jié)合具體實施例來進行進一步的描述。

一種基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng),包括調(diào)度模塊、緩存模塊、數(shù)據(jù)源模塊和事件模塊,所述的調(diào)度模塊分別與所述的緩存模塊、數(shù)據(jù)源模塊和事件模塊相連接。

較佳地,所述的調(diào)度模塊包括:

分布式選舉單元,用于對每個緩存的數(shù)據(jù)集選舉一個leader,由該leader執(zhí)行將緩存的數(shù)據(jù)項從數(shù)據(jù)源加載到緩存中,并且由該leader將緩存中的數(shù)據(jù)持久化到數(shù)據(jù)源中;

任務(wù)工作池單元,該任務(wù)工作池單元為一用于管理加載和持久化執(zhí)行的線程,并支持彈性調(diào)整執(zhí)行線程數(shù)量,在忙時增加處理線程,在閑時釋放處理線程。

在一種較佳的實施方式中,所述的緩存模塊包括:

緩存接口單元,定義該緩存的加載或持久化的系統(tǒng)與在各緩存實現(xiàn)之間的交互接口,通過該緩存接口單元與具體的緩存實現(xiàn)進行解耦,從而支持多重緩存實現(xiàn),如Redis,memcache等;

緩存適配單元,用于針對具體的緩存存儲對緩存SPI的實現(xiàn)。

在一種較佳的實施方式中,所述的數(shù)據(jù)源模塊包括:

數(shù)據(jù)定義單元,用于定義緩存的數(shù)據(jù)集來源,所述的數(shù)據(jù)來源包括配置文件、關(guān)系型數(shù)據(jù)庫和外部系統(tǒng),并且定義數(shù)據(jù)的加載和持久化策略,所述的數(shù)據(jù)的加載和持久化策略包括定時加載和持久化策略和通知加載和持久化策略,其中,加載和持久化方法包括同步和異步兩種;

數(shù)據(jù)源適配單元,用于從數(shù)據(jù)讀取數(shù)據(jù),并將數(shù)據(jù)寫到數(shù)據(jù)源,該數(shù)據(jù)源適配單元可以根據(jù)需要擴展多個,分別針對不同的數(shù)據(jù)源。

在一種較佳的實施方式中,所述的事件模塊包括:

事件中心單元,leader節(jié)點通過該事件中心單元接收非leader節(jié)點的狀態(tài)變化通知s。

還包括一種通過上述系統(tǒng)基于云計算實現(xiàn)緩存的加載或持久化的方法,所述的方法包括以下步驟:

(1)定義緩存提供者;

(2)定義緩存數(shù)據(jù)集以及加載或持久化策略;

(3)自動調(diào)度加載或持久化;

(4)發(fā)布數(shù)據(jù)變化事件。

在一種較佳的實施方式中,所述的步驟(1)包括以下步驟:

(1-1)根據(jù)緩存提供者配置文件模板新建緩存提供者配置文件,擴展名為:.chpx;

(1-2)在所述的緩存提供者配置文件中按照模板增加緩存實例定義;

(1-3)為所述的緩存實例定義配置id屬性,所配置的id值必須全局唯一;

(1-4)為所述的緩存實例定義配置provider屬性,provider屬性的值是一種緩存SPI接口的實現(xiàn),如redis緩存SPI實現(xiàn);

(1-5)為所述的緩存實例定義配置私有屬性,如果是本地緩存,則配置緩存大?。蝗绻沁h程緩存,則配置遠程緩存的地址、端口、用戶名和密碼。

在一種較佳的實施方式中,所述的步驟(2)包括以下步驟:

(2-1)根據(jù)緩存數(shù)據(jù)集配置文件模板新建緩存數(shù)據(jù)集配置文件,擴展名為:.chsx;

(2-2)在所述的緩存數(shù)據(jù)集配置文件中按照模板增加緩存數(shù)據(jù)集的定義;

(2-3)為所述的緩存數(shù)據(jù)集定義配置命名空間屬性和數(shù)據(jù)集名稱屬性,所述的命名空間屬性和所述的數(shù)據(jù)集名稱屬性組合生成一個唯一的id,組合規(guī)則為:命名空間+“.”+數(shù)據(jù)集名稱;

(2-4)為所述的緩存數(shù)據(jù)定義配置數(shù)據(jù)源類型,如果是數(shù)據(jù)源類型是文件型,則配置文件路徑,如果是關(guān)系型數(shù)據(jù)庫類型,則配置關(guān)系型數(shù)據(jù)庫的服務(wù)器地址和端口;

(2-5)為所述的緩存數(shù)據(jù)定義配置加載或持久化策略。

在一種更佳的實施方式中,所述的步驟(2-5)包括以下步驟:

(2-5-1)為所述的緩存數(shù)據(jù)集定義配置場景類型:“加載”或“持久化”,如果是“加載”場景類型,則繼續(xù)步驟(2-5-2),如果是“持久化”場景類型,則繼續(xù)步驟(2-5-3);

(2-5-2)為所述的緩存數(shù)據(jù)集定義配置read實現(xiàn)類,其中read實現(xiàn)類從上述配置的數(shù)據(jù)源中讀取數(shù)據(jù),繼續(xù)步驟(2-5-4);

(2-5-3)為所述的緩存數(shù)據(jù)集定義配置write實現(xiàn)類,其中write實現(xiàn)類從將緩存中變化的內(nèi)容持久化到上述的數(shù)據(jù)源中;

(2-5-4)為所述的緩存數(shù)據(jù)集定義配置調(diào)度策略,可設(shè)置的值為固定頻率刷新、懶加載和緩沖區(qū)大小閾值,如果設(shè)置的值為固定刷新頻率,則繼續(xù)設(shè)置刷新周期,如果設(shè)置的值為緩沖區(qū)大小,則繼續(xù)設(shè)置緩沖區(qū)的閾值;

(2-5-5)為所述的緩存數(shù)據(jù)集定義配置動作模式,可設(shè)置的值為同步和異步。

在一種較佳的實施方式中,所述的步驟(3)包括以下步驟:

(3-1)加載緩存提供者配置文件;

(3-2)加載緩存數(shù)據(jù)集配置文件;

(3-3)針對每個緩存數(shù)據(jù)集選擇一個leader節(jié)點來執(zhí)行加載或持久化動作,在有更新時判斷當前節(jié)點類型,如果是非leader節(jié)點,則繼續(xù)步驟(3-4),如果是leader節(jié)點,則繼續(xù)步驟(3-5);

(3-4)非leader節(jié)點當緩存,通過上述事件子系統(tǒng)通知leader節(jié)點有變化的key,繼續(xù)步驟(3-3);

(3-5)leader節(jié)點根據(jù)上述配置的加載或持久化策略來加載或持久化數(shù)據(jù),繼續(xù)步驟(3-3)。

在一種更佳的實施方式中,其特征在于,所述的步驟(3-1)包括以下步驟:

(3-1-1)掃描指定目錄下所有以.chpx為擴展名的文件,調(diào)用解析器解析成緩存數(shù)據(jù)配置模型對象;

(3-1-2)將模型對象注冊到緩存提供者manager中,在系統(tǒng)停止時通過manager釋放資源;

(3-1-3)如果模型對象指示的緩存提供者為遠程緩存,則啟動該模型,建立與遠程緩存的連接。

在一種更佳的實施方式中,所述的步驟(3-2)包括以下步驟:

(3-2-1)掃描指定目錄下的所有以.chsx為擴展名的文件,調(diào)用解析器解析成配置模型對象;

(3-2-2)將模型對象注冊到緩存數(shù)據(jù)集manager中,在系統(tǒng)停止時通過manager釋放資源。

在一種更佳的實施方式中,所述的針對每個緩存數(shù)據(jù)集選擇一個leader節(jié)點來執(zhí)行加載或持久化動作,具體為:

(3-3-1)生成一個唯一的節(jié)點id,目前生成id的方式為uuid;

(3-3-2)構(gòu)造用于保存選舉狀態(tài)的緩存key,key的生成規(guī)則為“_learder_key_”+緩存數(shù)據(jù)集id,即“_leader_key_”+緩存數(shù)據(jù)集命名空間+“.”+緩存數(shù)據(jù)集名稱;

(3-3-3)將用于檢查狀態(tài)值的計數(shù)器初始化為零;

(3-3-4)將暫存的上次選舉狀態(tài)值初始化為空;

(3-3-5)通過緩存SPI單元的get接口獲取當前的選舉狀態(tài)值,并判斷當前的選舉狀態(tài)值,如果是當前的選舉狀態(tài)值null,則繼續(xù)步驟(3-3-6),如果當前的選舉狀態(tài)值不等于暫存的上次選舉狀態(tài)值,則繼續(xù)步驟(3-3-7),如果是leader節(jié)點,則繼續(xù)步驟(3-3-8),否則,繼續(xù)步驟(3-3-9);

(3-3-6)自薦成為leader,繼續(xù)步驟(3-4);

(3-3-7)檢查狀態(tài)值的計數(shù)器清零,將暫存選舉狀態(tài)值設(shè)置為所述的當前選舉狀態(tài)值,并在等待1秒后繼續(xù)步驟(3-3-5);

(3-3-8)根據(jù)上述獲取到的選舉狀態(tài)值確定是否自身是leader節(jié)點,生成新的選舉狀態(tài)值,并通過緩存模塊的SPI接口replace更新緩存,繼續(xù)步驟(3-4);

(3-3-9)將檢查狀態(tài)值計算器的值+1,并判斷是否計算器值達到上限,如果是,則自薦成為leader。

在一種更進一步的實施方式中,所述的自薦成為leader,具體為:

(3-3-6-1)生成新的選舉狀態(tài)值,生成規(guī)則為:上述生成的唯一節(jié)點id+“.”+最新時間戳;

(3-3-6-2)通過緩存模塊的replace接口嘗試將選舉狀態(tài)值設(shè)置為所述的新的選舉狀態(tài)值,如果是設(shè)置成功,則自薦成功,否則自薦失敗,其中replace接口原子的檢查舊狀態(tài)值沒有變化才會更新為新狀態(tài)值;

(3-3-6-3)將暫存的上次選舉狀態(tài)值更新為所述的新的選舉狀態(tài)值。

在一種更進一步的實施方式中,所述的根據(jù)上述獲取到的選舉狀態(tài)值確定是否自身是leader節(jié)點,具體為:

(3-3-8-1)從上述獲取到的選舉狀態(tài)中獲取leader的節(jié)點id,獲取方式為取選舉狀態(tài)值中的開始到“.”的部分;

(3-3-8-2)比較上述獲取到的leader節(jié)點id和自身的節(jié)點id,如果相等則自身是leader節(jié)點,否則不是。

在一種較佳的實施方式中,所述的步驟(4)包括以下步驟:

(4-1)獲取leader節(jié)點的事件發(fā)送地址;

(4-2)通過restful接口地址發(fā)送變化調(diào)目的key,不需要發(fā)送當前的值,對于多個key的連續(xù)更新可以合并事件。

在一個具體的實施例中,如圖1、圖2所示,該基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)包括調(diào)度子系統(tǒng)、緩存子系統(tǒng)、數(shù)據(jù)源子系統(tǒng)、事件子系統(tǒng),其中調(diào)度子系統(tǒng)包括:

分布式選舉模塊,負責對每個緩存的數(shù)據(jù)集選舉一個leader,由該leader執(zhí)行將緩存的數(shù)據(jù)項從數(shù)據(jù)源加載到緩存中,并且由該leader將緩存中的數(shù)據(jù)持久化到數(shù)據(jù)源中。

任務(wù)工作池模塊,管理加載和持久化執(zhí)行的線程,該任務(wù)池支持彈性調(diào)整執(zhí)行線程數(shù)量,在忙時增加處理線程,在閑時釋放處理線程。

所述的緩存子系統(tǒng)包括:

緩存接口單元,定義該緩存的加載或持久化的系統(tǒng)與在各緩存實現(xiàn)之間的交互接口,通過該緩存接口單元與具體的緩存實現(xiàn)進行解耦,從而支持多重緩存實現(xiàn),如Redis,memcache等;

緩存適配模塊,針對具體的緩存存儲對緩存SPI的實現(xiàn),比如redis的適配模塊。

所述的數(shù)據(jù)源子系統(tǒng)包括:

數(shù)據(jù)定義模塊,定義緩存的數(shù)據(jù)集來源,包括從配置文件、從關(guān)系型數(shù)據(jù)庫、從外部系統(tǒng)等;并且定義數(shù)據(jù)的加載和持久化策略,包括定時加載和持久化策略、通知加載和持久化策略。加載和持久化方法包括同步和異步兩種。

數(shù)據(jù)源適配模塊,具體實現(xiàn)從數(shù)據(jù)讀取數(shù)據(jù)的方法和將數(shù)據(jù)寫到數(shù)據(jù)源的方法。該適配器模塊可以根據(jù)需要擴展多個,分別針對不同的數(shù)據(jù)源。

所述的事件子系統(tǒng)包括:

事件中心單元,leader節(jié)點通過該事件中心單元接收非leader節(jié)點的狀態(tài)變化通知s。

在另一個實施例中,如圖3、圖4和圖5所示,還包括一種基于上述的緩存加載或持久化的方法,其主要特點是,所述的方法包括定義緩存提供者操作、定義緩存數(shù)據(jù)集以及加載或持久化策略操作、自動調(diào)度加載或持久化操作。

所述的定義緩存提供者操作,包括以下步驟:

(11)根據(jù)緩存提供者配置文件模板新建緩存提供者配置文件,擴展名為.chpx;

(12)在上述新建的緩存提供者配置文件中按照模板增加緩存實例的定義;

(13)為上述新增的緩存實例定義配置id屬性,所配置的id值必須全局唯一;

(14)為上述新增的緩存實例定義配置provider屬性,provider屬性的值是一種緩存SPI接口的實現(xiàn),如redis緩存SPI實現(xiàn);

(15)為上述新增的緩存實例配置私有屬性,如果是本地緩存,配置緩存大?。蝗绻沁h程緩存,需要配置遠程緩存的地址、端口、用戶名、密碼等屬性。

所述的定義緩存數(shù)據(jù)集以及加載或持久化策略操作,包括以下步驟:

(21)根據(jù)緩存數(shù)據(jù)集配置文件模板新建緩存數(shù)據(jù)集配置文件,擴展名為.chsx;

(22)在上述新建的緩存數(shù)據(jù)集配置文件中按照模板增加緩存數(shù)據(jù)集的定義;

(23)為上述新增的緩存數(shù)據(jù)集定義配置命名空間屬性和數(shù)據(jù)集名稱屬性,該命名空間屬性和該數(shù)據(jù)集名稱屬性組合生成一個唯一的id,組合規(guī)則為:命名空間+“.”+數(shù)據(jù)集名稱;

(24)為上述新增的緩存數(shù)據(jù)定義配置數(shù)據(jù)源類型,如果是數(shù)據(jù)源類型是文件型,需要配置文件路徑;如果是關(guān)系型數(shù)據(jù)庫類型,需要配置關(guān)系型數(shù)據(jù)庫的服務(wù)器地址、端口等等。

(25)為上述新增的緩存數(shù)據(jù)定義配置加載或持久化策略。

所述的自動調(diào)度加載或持久化操作,包括以下步驟:

(31)加載緩存提供者配置文件;

(32)加載緩存數(shù)據(jù)集配置文件;

(33)針對每個緩存數(shù)據(jù)集選擇一個leader節(jié)點來執(zhí)行加載或持久化動作;

(34)非上述選舉出來的leader節(jié)點當緩存有更新時,通過上述事件子系統(tǒng)通知leader節(jié)點有變化的key;

(35)上述選舉出來的leader節(jié)點根據(jù)上述配置的加載或持久化策略來加載或持久化數(shù)據(jù);

(36)跳轉(zhuǎn)到33,繼續(xù)執(zhí)行。

所述的發(fā)布數(shù)據(jù)變化事件操作,包括以下步驟:

(41)獲取leader節(jié)點的事件發(fā)送地址;

(42)通過restful接口地址發(fā)送變化調(diào)目的key,不需要發(fā)送當前的值,對于多個key的連續(xù)更新可以合并事件。

該實現(xiàn)云計算環(huán)境下緩存的無感知加載或持久化的通用系統(tǒng)及方法中的為上述新增的緩存數(shù)據(jù)定義配置加載或持久化策略操作,包括以下步驟:

(251)為所述的緩存數(shù)據(jù)集定義配置選擇場景類型:“加載”或者“持久化”;

(252)如果上述選擇為“加載”場景類型,為所述的緩存數(shù)據(jù)集定義配置設(shè)置read實現(xiàn)類,其中read實現(xiàn)類從上述配置的數(shù)據(jù)源中讀取數(shù)據(jù);

(253)如果上述選擇為“持久化”場景類型,為所述的緩存數(shù)據(jù)集定義配置設(shè)置write實現(xiàn)類,其中write實現(xiàn)類從將緩存中變化的內(nèi)容持久化到上述的數(shù)據(jù)源中;

(254)為所述的緩存數(shù)據(jù)集定義配置設(shè)置調(diào)度策略:可設(shè)置的值為固定頻率刷新、懶加載、緩沖區(qū)大小閾值。如果設(shè)置的值為固定刷新頻率需要設(shè)置刷新周期,如果設(shè)置為緩沖區(qū)大小需要設(shè)置緩沖區(qū)的閾值;

(255)為所述的緩存數(shù)據(jù)集定義配置設(shè)置動作模式,可設(shè)置的值為同步和異步。

該實現(xiàn)云計算環(huán)境下緩存的無感知加載或持久化的通用系統(tǒng)及方法中的加載緩存提供者配置文件操作,包括以下步驟:

(311)掃描指定目錄下的所有以.chpx為擴展名的文件,調(diào)用解析器解析成緩存數(shù)據(jù)配置模型對象;

(312)將模型對象注冊到緩存提供者manager中,在系統(tǒng)停止時可通過manager釋放資源;

(313)如果模型對象指示的緩存提供者為遠程緩存,則啟動該模型,建立與遠程緩存的連接。

該實現(xiàn)云計算環(huán)境下緩存的無感知加載或持久化的通用系統(tǒng)及方法中的,加載緩存提供者配置文件操作,包括以下步驟:

(321)掃描指定目錄下的所有以.chsx為擴展名的文件,調(diào)用解析器解析成配置模型對象;

(322)將模型對象注冊到緩存數(shù)據(jù)集manager中,在系統(tǒng)停止時可通過manager釋放資源。

該實現(xiàn)云計算環(huán)境下緩存的無感知加載或持久化的通用系統(tǒng)及方法中的,針對每個緩存數(shù)據(jù)集選擇一個leader節(jié)點來執(zhí)行加載或持久化動作操作,包括以下步驟:

(331)生成一個唯一的節(jié)點id,目前生成id的方式為uuid;

(332)構(gòu)造用于保存選舉狀態(tài)的緩存key,key的生成規(guī)則為“_learder_key_”+緩存數(shù)據(jù)集id,實際上等于“_leader_key_”+緩存數(shù)據(jù)集命名空間+“.”+緩存數(shù)據(jù)集名稱;

(333)初始化用于檢查狀態(tài)值的計數(shù)器為0;

(334)初始化暫存的上次選舉狀態(tài)值為空;

(335)通過上述緩存子系統(tǒng)SPI的get接口獲取當前的選舉狀態(tài)值;

(336)如果上述獲取到的當前選舉狀態(tài)值為null,則自薦成為leader;

(337)否則如果上述獲取到的當前選舉狀態(tài)值不等于暫存的上次選舉狀態(tài)值,那么檢查狀態(tài)值的計數(shù)器清0,將暫存選舉狀態(tài)值設(shè)置為上述獲取到的當前選舉狀態(tài)值,并等待1秒后跳轉(zhuǎn)到335重新執(zhí)行;

(338)否則根據(jù)上述獲取到的選舉狀態(tài)值確定是否自身是leader節(jié)點,如果是leader節(jié)點生成新的選舉狀態(tài)值,并通過緩存子系統(tǒng)的SPI接口replace更新緩存;

(339)否則將檢查狀態(tài)值計算器的值+1,并判斷是否計算器值達到上限,如果達到上限則自薦成為leader。

該實現(xiàn)云計算環(huán)境下緩存的無感知加載或持久化的通用系統(tǒng)及方法中的,針對每個緩存數(shù)據(jù)集選擇一個leader節(jié)點來執(zhí)行加載或持久化動作操作中的自薦成為leader操作,包括以下步驟:

(3361)生成新的選舉狀態(tài)值,生成規(guī)則為:上述生成的唯一節(jié)點id+“.”+最新時間戳;

(3362)通過上述緩存子系統(tǒng)SPI的replace接口將選舉狀態(tài)值嘗試設(shè)置為上述生成的選舉狀態(tài)值,如果是設(shè)置成功則自薦成功,否則自薦失敗。其中replace接口原子的檢查舊狀態(tài)值沒有變化才會更新為新狀態(tài)值;

(3363)將暫存的上次選舉狀態(tài)值更新為上述新生成的選舉狀態(tài)值。

該實現(xiàn)云計算環(huán)境下緩存的無感知加載或持久化的通用系統(tǒng)及方法中的針對每個緩存數(shù)據(jù)集選擇一個leader節(jié)點來執(zhí)行加載或持久化動作操作中的確定是否自身是leader節(jié)點操作,包括以下步驟:

(3381)從上述獲取到的選舉狀態(tài)中獲取leader的節(jié)點id,獲取方式為取選舉狀態(tài)值中的開始到“.”的部分;

(3382)比較上述獲取到的leader節(jié)點id和自身的節(jié)點id,如果相等則自身是leader節(jié)點,否則不是。

在實際使用當中,云計算環(huán)境下緩存的無感知加載或持久化的通用系統(tǒng)及方法中緩存子系統(tǒng)定義spi接口:

其中g(shù)et(K key)根據(jù)key獲取緩存的值;put(K key,V value)將key對應(yīng)的值value寫入到緩存中;putIfAbsent(K key,V value)與put作用相同,但是只有當緩存中不存在key時才會put成功;remove(K key)從緩存中移除key;remove(K key,V oldValue)與remove作用相同,但是只有當緩存中值的值與oldValue相等時remove才能成功;replace(K key,V oldValue,V newValue)將緩存中key的值設(shè)置為value,但是只有當緩存中有值且值為oldValue時才能設(shè)置成功。

云計算環(huán)境下緩存的無感知加載或持久化的通用系統(tǒng)及方法中數(shù)據(jù)源子系統(tǒng)定義spi接口

其中CacheLoader為數(shù)據(jù)源子系統(tǒng)定義的加載SPI接口,CacheWriter為數(shù)據(jù)源子系統(tǒng)定義的持久化SPI接口。

其中CacheLoader中的supportChangeList()操作用于獲取數(shù)據(jù)源是否支持變更清單;readChangeList(long lastSeq)用于獲取自上次lastSeq開始數(shù)據(jù)源變化的所有記錄;read(K key)用于返回指定key對應(yīng)的值value;readNextBatch(int batchIndx,int batchSize)用于獲取數(shù)據(jù)源中一個批次的數(shù)據(jù);readAll()用于返回數(shù)據(jù)源該數(shù)據(jù)集的所有數(shù)據(jù)。

其中CacheWriter中的save(Cache.Entry<K,V>entry)操作用于保存一條數(shù)據(jù)到數(shù)據(jù)源中,如果數(shù)據(jù)源中已經(jīng)包含該記錄將執(zhí)行update操作,如果該數(shù)據(jù)源中不包含該記錄則執(zhí)行insert操作;insert(CAche.Entry<K,V>entry)用于向數(shù)據(jù)源中增加一條新記錄;update(Cache.Entry<K,V>entry)用于更新數(shù)據(jù)源中已有的一條記錄;delete(K key)用于刪除數(shù)據(jù)源中已有的一條記錄;saveAll(List<Cache.Entry<K,V>>entrys)用于批量更新數(shù)據(jù)源中的記錄。

該系統(tǒng)提供的針對上述CacheLoader SPI的實現(xiàn)包括:ConfFileLoader、IniFileLoader、XmlFileLoader、RdbLoader;該系統(tǒng)提供的針對上述CacheWriter SPI的實現(xiàn)包括ConfFileWriter、IniFileWriter、XmlFileWriter、RdbWriter。

采用了該發(fā)明中的基于云計算實現(xiàn)緩存的加載或持久化的系統(tǒng)及方法,系統(tǒng)架構(gòu)簡單,不依賴于某種緩存實現(xiàn)或者某種具體類型的數(shù)據(jù)源,在云計算環(huán)境下能自動選擇服務(wù)節(jié)點加載和持久化緩存數(shù)據(jù),適用于不同類型的數(shù)據(jù)源硬編碼,具有廣泛的應(yīng)用范圍。

在此說明書中,本發(fā)明已參照其特定的實施例作了描述。但是,很顯然仍可以作出各種修改和變換而不背離本發(fā)明的精神和范圍。因此,說明書和附圖應(yīng)被認為是說明性的而非限制性的。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
洛隆县| 马龙县| 新宾| 会理县| 郯城县| 尚义县| 德清县| 东阳市| 吉安市| 漳平市| 洛南县| 三明市| 古丈县| 临泽县| 拜泉县| 耒阳市| 云梦县| 长兴县| 利川市| 苏尼特右旗| 奉节县| 株洲县| 疏附县| 临朐县| 崇义县| 德州市| 南昌市| 会同县| 宿迁市| 临漳县| 黑龙江省| 鄂尔多斯市| 岗巴县| 延吉市| 前郭尔| 舒兰市| 稷山县| 昌吉市| 施秉县| 长岛县| 桂林市|