本申請涉及計算機領(lǐng)域,尤其涉及一種應(yīng)用的處理方法及裝置。
背景技術(shù):
目前,將應(yīng)用從大型機遷移到開放式平臺的市場價值巨大,所以,大型機的遷移方案越來越受重視。
對于開放式平臺而言,設(shè)置分布式緩存能夠?qū)?yīng)用間的數(shù)據(jù)共享方式改變?yōu)榧汗蚕矸绞?,從而提高平臺上的各種應(yīng)用間的數(shù)據(jù)共享功能的實現(xiàn)的效率。
因此,如何實現(xiàn)遷移到開放式平臺的應(yīng)用與分布式緩存之間的對接,成為目前亟待解決的問題。
技術(shù)實現(xiàn)要素:
本申請?zhí)峁┝艘环N應(yīng)用的處理方法及裝置,目的在于解決如何實現(xiàn)從第一服務(wù)器遷移第二服務(wù)器的應(yīng)用與分布式緩存之間的對接的問題。
為了實現(xiàn)上述目的,本申請?zhí)峁┝艘韵录夹g(shù)方案:
本申請的第一方面提供了一種應(yīng)用的處理方法,應(yīng)用于應(yīng)用從第一服務(wù)器向第二服務(wù)器遷移的過程中,包括:
在所述應(yīng)用的源代碼中確認用于實現(xiàn)數(shù)據(jù)共享功能的代碼段;
使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字,所述源關(guān)鍵字依據(jù)所述應(yīng)用的數(shù)據(jù)共享方式從預(yù)設(shè)的數(shù)據(jù)模型中查詢得到,所述預(yù)設(shè)的數(shù)據(jù)模型用于指示數(shù)據(jù)共享方式與源關(guān)鍵字間的對應(yīng)關(guān)系,所述源關(guān)鍵字用于所述應(yīng)用在遷移之前實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用所述第一服務(wù)器中的非分布式緩沖存儲器,所述目標關(guān)鍵字用于在所述應(yīng)用遷 移之后,在所述源代碼被編譯運行以實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用與所述第二服務(wù)器連接的分布式緩沖存儲器。
基于第一方面,在本申請的第一方面的第一種實現(xiàn)方式中,確定所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字的過程具體包括:
確定所述應(yīng)用的數(shù)據(jù)共享方式;
從所述預(yù)設(shè)的數(shù)據(jù)模型集合中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型集合中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表;
從所述目標數(shù)據(jù)模型中獲取關(guān)鍵字列表;
將包含在所述待轉(zhuǎn)換的代碼段中的所述關(guān)鍵字列表中的關(guān)鍵字作為所述源關(guān)鍵字。
基于本申請的第一方面的第一種實現(xiàn)方式,在本申請的第一方面的第二種實現(xiàn)方式中,所述預(yù)設(shè)的數(shù)據(jù)模型中的任意一個數(shù)據(jù)模型還包括:
用于指示源關(guān)鍵字替換為目標關(guān)鍵字的替換規(guī)則;
所述使用目標關(guān)鍵字替換所述待轉(zhuǎn)換的代碼段中的源關(guān)鍵字包括:
使用所述目標數(shù)據(jù)模型中的替換規(guī)則,將所述源關(guān)鍵字替換為所述目標關(guān)鍵字。
基于本申請的第一方面的第一種實現(xiàn)方式和第二種實現(xiàn)方式,在本申請的第一方面的第三種實現(xiàn)方式中,所述確定所述應(yīng)用的數(shù)據(jù)共享方式包括:確定所述應(yīng)用的數(shù)據(jù)共享方式為臨時存儲隊列TSQ;
則所述關(guān)鍵字列表包括以下關(guān)鍵字:
READQ:動作類型;
QUEUE:隊列名稱;
QNAME:隊列名稱,與QUEUE二選一;
INTO:指定接收的數(shù)據(jù)區(qū);
SET:指明接收數(shù)據(jù)的指針,與INTO二選一;
LENGTH:接收數(shù)據(jù)區(qū)的長度;
NUMITEMS:用來返回QUEUE里的紀錄的數(shù)量;
ITEM:指明讀第幾條紀錄;
NEXT:指明讀隊列的下一條紀錄,與ITEM二選一;
RESP:錯誤碼;
RESP2:錯誤碼詳細說明;
SYSID:指明隊列所在遠程客戶信息控制系統(tǒng)的名字。
基于本申請的第一方面的第一種實現(xiàn)方式和第二種實現(xiàn)方式,在本申請的第一方面的第四種實現(xiàn)方式中,所述確定所述應(yīng)用的數(shù)據(jù)共享方式包括:確定所述應(yīng)用的數(shù)據(jù)共享方式為數(shù)據(jù)庫緩存;
則所述關(guān)鍵字列表包括以下關(guān)鍵字:
SELECT:動作類型,需要查詢的字段;
FROM:從哪些表取記錄;
INTO:需要賦值的字段;
WHERE:查詢的條件;
AND:與條件。
基于第一方面,在本申請的第一方面的第五種實現(xiàn)方式中,在所述應(yīng)用的源代碼中確認用于實現(xiàn)數(shù)據(jù)共享功能的代碼段包括:
在所述應(yīng)用的數(shù)據(jù)共享方式為TSQ的情況下,將TSQ的開始標記出現(xiàn)的代碼行作為代碼起始行,并將TSQ的結(jié)束標記出現(xiàn)的代碼行作為代碼結(jié)束行,所述代碼起始行和所述代碼結(jié)束行之間的代碼段為所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段;
在所述應(yīng)用的數(shù)據(jù)共享方式為數(shù)據(jù)庫數(shù)據(jù)緩存的情況下,將用戶標記的起始位置所在的代碼行作為代碼起始行,并將用戶標記的結(jié)束位置所在的代碼行作為代碼結(jié)束行,所述代碼起始行和所述代碼結(jié)束行之間的代碼段為所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段。
基于第一方面、第一方面的第一種、第二種、第三種、第四種及第五種實現(xiàn)方式,在本申請的第一方面的第六種實現(xiàn)方式中,在所述使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字之后,還包括:
編譯所述應(yīng)用的源代碼,生成遷移后的應(yīng)用;
依據(jù)第一指令,運行所述遷移后的應(yīng)用,其中,在所述應(yīng)用運行的過程中產(chǎn)生的數(shù)據(jù)被寫入所述分布式緩存中;
被寫入所述分布式緩存中的數(shù)據(jù),用于被與分所述布式緩存連接的第三服務(wù)器中運行的應(yīng)用讀取。
基于第一方面、第一方面的第一種、第二種、第三種、第四種及第五種實現(xiàn)方式,在本申請的第一方面的第七種實現(xiàn)方式中,在所述使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字之后,還包括:
編譯所述應(yīng)用的源代碼,生成遷移后的應(yīng)用;
依據(jù)第二指令,運行所述遷移后的應(yīng)用,讀取所述分布式緩存中的數(shù)據(jù),其中,所述分布式緩存中的數(shù)據(jù)由與分所述布式緩存連接的第三服務(wù)器中運行的應(yīng)用寫入。
本申請的第二方面提供了一種應(yīng)用的處理裝置,包括:
代碼段確認模塊,用于在應(yīng)用從第一服務(wù)器向第二服務(wù)器遷移的過程中,在所述應(yīng)用的源代碼中確認用于實現(xiàn)數(shù)據(jù)共享功能的代碼段;
替換模塊,用于使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字,所述源關(guān)鍵字依據(jù)所述應(yīng)用的數(shù)據(jù)共享方式從預(yù)設(shè)的數(shù)據(jù)模型中查詢得到,所述預(yù)設(shè)的數(shù)據(jù)模型用于指示數(shù)據(jù)共享方式與源關(guān)鍵字間的對應(yīng)關(guān)系,所述目標關(guān)鍵字用于所述應(yīng)用在遷移之前實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用所述第一服務(wù)器中的非分布式緩沖存儲器,所述目標關(guān)鍵字用于在所述應(yīng)用遷移之后,在所述源代碼被編譯運行以實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用與所述第二服務(wù)器連接的分布式緩沖存儲器。
基于第二方面,在本申請的第二方面的第一種實現(xiàn)方式中,還包括:
關(guān)鍵字確認模塊,用于確定所述應(yīng)用的數(shù)據(jù)共享方式;從所述預(yù)設(shè)的數(shù)據(jù)模型集合中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型集合中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表;從所述目標數(shù)據(jù)模型中獲取關(guān)鍵字列表;將包含在所述待轉(zhuǎn)換的代碼段中的所述關(guān)鍵字列表中的關(guān)鍵字作為所述源關(guān)鍵字。
基于本申請的第二方面的第一種實現(xiàn)方式,在本申請的第二方面的第二種實現(xiàn)方式中,所述關(guān)鍵字確認模塊用于從所述預(yù)設(shè)的數(shù)據(jù)模型集合中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型集合中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表包括:
所述關(guān)鍵字確認模塊具體用于,從所述預(yù)設(shè)的數(shù)據(jù)模型集合中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型集合中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表,以及用于指示源關(guān)鍵字替換為目標關(guān)鍵字的替換規(guī)則;
所述替換模塊用于使用目標關(guān)鍵字替換所述待轉(zhuǎn)換的代碼段中的源關(guān)鍵字包括:
使用所述目標數(shù)據(jù)模型中的替換規(guī)則,將所述源關(guān)鍵字替換為所述目標關(guān)鍵字。
基于本申請的第二方面的第一種實現(xiàn)方式和第二種實現(xiàn)方式,在本申請的第二方面的第三種實現(xiàn)方式中,所述關(guān)鍵字確認模塊用于確定所述應(yīng)用的數(shù)據(jù)共享方式;從所述預(yù)設(shè)的數(shù)據(jù)模型中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表包括:
所述關(guān)鍵字確認模塊具體用于,確定所述應(yīng)用的數(shù)據(jù)共享方式為TSQ;從所述預(yù)設(shè)的數(shù)據(jù)模型中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表,所述關(guān)鍵字列表包括以下關(guān)鍵字:
READQ:動作類型;
QUEUE:隊列名稱;
QNAME:隊列名稱,與QUEUE二選一;
INTO:指定接收的數(shù)據(jù)區(qū);
SET:指明接收數(shù)據(jù)的指針,與INTO二選一;
LENGTH:接收數(shù)據(jù)區(qū)的長度;
NUMITEMS:用來返回QUEUE里的紀錄的數(shù)量;
ITEM:指明讀第幾條紀錄;
NEXT:指明讀隊列的下一條紀錄,與ITEM二選一;
RESP:錯誤碼;
RESP2:錯誤碼詳細說明;
SYSID:指明隊列所在遠程客戶信息控制系統(tǒng)的名字。
基于本申請的第二方面的第一種實現(xiàn)方式和第二種實現(xiàn)方式,在本申請的第二方面的第四種實現(xiàn)方式中,所述關(guān)鍵字確認模塊用于確定所述應(yīng)用的數(shù)據(jù)共享方式;從所述預(yù)設(shè)的數(shù)據(jù)模型集合中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型集合中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表包括:
所述關(guān)鍵字確認模塊具體用于,確定所述應(yīng)用的數(shù)據(jù)共享方式為數(shù)據(jù)庫緩存;從所述預(yù)設(shè)的數(shù)據(jù)模型集合中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型集合中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表,所述關(guān)鍵字列表包括以下關(guān)鍵字:
SELECT:動作類型,需要查詢的字段;
FROM:從哪些表取記錄;
INTO:需要賦值的字段;
WHERE:查詢的條件;
AND:與條件。
基于第二方面,在本申請的第二方面的第五種實現(xiàn)方式中,所述代碼段確認模塊用于在所述應(yīng)用的源代碼中確認用于實現(xiàn)數(shù)據(jù)共享功能的代碼段包括:
所述代碼段確認模塊具體用于,在所述應(yīng)用的數(shù)據(jù)共享方式為TSQ的情況下,將TSQ的開始標記出現(xiàn)的代碼行作為代碼起始行,并將TSQ的結(jié)束標記出現(xiàn)的代碼行作為代碼結(jié)束行,所述代碼起始行和所述代碼結(jié)束行之間的代碼段為所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段;在所述應(yīng)用的數(shù)據(jù)共享方式為數(shù)據(jù)庫數(shù)據(jù)緩存的情況下,將用戶標記的起始位置所在的代碼行作為代碼起始行,并將用戶標記的結(jié)束位置所在的代碼行作為代碼結(jié)束行,所述代碼起始行和所述代碼結(jié)束行之間的代碼段為所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段。
基于第二方面、第二方面的第一種、第二種、第三種、第四種及第五種實現(xiàn)方式,在本申請的第二方面的第六種實現(xiàn)方式中,還包括:
編譯模塊,用于在所述替換模塊使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字之后,編譯所述應(yīng)用的源代碼,生成遷移后的應(yīng)用;
第一運行控制模塊,用于依據(jù)第一指令,運行所述遷移后的應(yīng)用,其中,在所述應(yīng)用運行的過程中產(chǎn)生的數(shù)據(jù)被寫入所述分布式緩存中,被寫入所述分布式緩存中的數(shù)據(jù),用于被與分所述布式緩存連接的第三服務(wù)器中運行的應(yīng)用讀取。
基于第二方面、第二方面的第一種、第二種、第三種、第四種及第五種實現(xiàn)方式,在本申請的第二方面的第七種實現(xiàn)方式中,還包括:
編譯模塊,用于在所述替換模塊使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字之后,編譯所述應(yīng)用的源代碼,生成遷移后的應(yīng)用;
第二運行控制模塊,用于依據(jù)第二指令,運行所述遷移后的應(yīng)用,讀取所述分布式緩存中的數(shù)據(jù),其中,所述分布式緩存中的數(shù)據(jù)由與分所述布式緩存連接的第三服務(wù)器中運行的應(yīng)用寫入。
本申請所述的應(yīng)用的處理方法及裝置,在應(yīng)用從第一服務(wù)器向第二服務(wù)器遷移的過程中,在應(yīng)用的源代碼中確認用于實現(xiàn)數(shù)據(jù)共享功能的代碼段,并使用目標關(guān)鍵字替換用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字,其中,源關(guān)鍵字從預(yù)設(shè)的指示數(shù)據(jù)共享方式與源關(guān)鍵字間的對應(yīng)關(guān)系的數(shù)據(jù)模型中查詢,源關(guān)鍵字用于所述應(yīng)用在遷移之前實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用所述第一服務(wù)器中的非分布式緩沖存儲器,目標關(guān)鍵字用于在所述應(yīng)用遷移之后,在所述源代碼被編譯運行以實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用與所述第二服務(wù)器連接的分布式緩沖存儲器,所以,使用本申請所述的方法及裝置,通過對應(yīng)用的源代碼的轉(zhuǎn)換,可以實現(xiàn)此應(yīng)用與分布式緩存之間的對接,從而使得應(yīng)用調(diào)用分布式緩存實現(xiàn)數(shù)據(jù)共享功能。
附圖說明
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為一種分布式緩存的架構(gòu)圖;
圖2為本申請實施例公開的一種應(yīng)用的處理方法的流程圖;
圖3為一種應(yīng)用間數(shù)據(jù)共享方式的示意圖;
圖4為本申請實施例公開的又一種應(yīng)用的處理方法的流程圖;
圖5為本申請實施例公開的使用對接裝置實現(xiàn)應(yīng)用與分布式緩存的通信的架構(gòu)示意圖;
圖6為一種應(yīng)用間數(shù)據(jù)共享方式的示意圖;
圖7本申請實施例公開的又一種應(yīng)用的處理方法的流程圖;
圖8本申請實施例公開的一種應(yīng)用的處理裝置的結(jié)構(gòu)示意圖。
具體實施方式
本申請實施例公開了一種應(yīng)用的處理方法及裝置,可以應(yīng)用在應(yīng)用從第一服務(wù)器(例如大型機)向第二服務(wù)器的遷移過程中,其中,所述第二服務(wù)器可以采用X86架構(gòu),并且第二服務(wù)器預(yù)先與分布式緩沖存儲器(簡稱分布式緩存)相連接。
具體地,所述分布式緩沖存儲器以集群的方式提供高性能、高可靠性的分布式對象緩存能力,加速數(shù)據(jù)讀訪問、減少對數(shù)據(jù)庫的依賴。分布式緩沖存儲器常用的方式是提供鍵值(KEY VALUE,KV)數(shù)據(jù)存儲接口將數(shù)據(jù)存儲到各節(jié)點的內(nèi)存中,提供緩存的新增、查詢、修改、刪除等應(yīng)用程序編程接口(Application Programming Interface,API)。主流的分布式緩存有Memcached、Redis以及distributed cache Systyem(DCS)。圖1為一種分布式緩存與服務(wù)器連接的架構(gòu)圖,其中,應(yīng)用服務(wù)器為應(yīng)用運行的服務(wù)器,本申請以下的實施例中,第二服務(wù)器和第三服務(wù)器均為應(yīng)用服務(wù)器,緩存服務(wù)器為分布式緩存集群中用于實現(xiàn)緩存功能的服務(wù)器,各個應(yīng)用服務(wù)器中設(shè)置有緩存客戶端,用于將此應(yīng)用服務(wù)器中的數(shù)據(jù)寫入緩存服務(wù)器中,各個緩存服務(wù)器中的數(shù)據(jù)可以相互復(fù)制。
下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
本申請實施例公開的一種應(yīng)用的處理方法,如圖2所示,包括:
S201:在應(yīng)用的源代碼中確認用于實現(xiàn)數(shù)據(jù)共享功能的代碼段;
S202:使用目標關(guān)鍵字替換用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字。
本實施例中,源關(guān)鍵字的功能為:在應(yīng)用遷移之前實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用第一服務(wù)器中的非分布式緩沖存儲器,也就是說,源關(guān)鍵字為用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中,用于調(diào)用第一服務(wù)器中的非分布式緩沖存儲器的函數(shù)、字段或參數(shù)。
具體地,源關(guān)鍵字依據(jù)所述應(yīng)用的數(shù)據(jù)共享方式從預(yù)設(shè)的數(shù)據(jù)模型中查詢得到,預(yù)設(shè)的數(shù)據(jù)模型用于指示應(yīng)用的數(shù)據(jù)共享方式與源關(guān)鍵字間的對應(yīng)關(guān)系。
本實施例中,目標關(guān)鍵字用于在所述應(yīng)用遷移之后,在所述源代碼被編譯運行以實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用與所述第二服務(wù)器連接的分布式緩存。
需要說明的是,除了第二服務(wù)器,分布式緩存還可以與其它服務(wù)器(例如第三服務(wù)器)相連,使用本實施例中所述的方法,則應(yīng)用在被遷移到第三服務(wù)器中的過程中,同樣可以通過修改其源代碼的方式,實現(xiàn)第三服務(wù)器中的應(yīng)用在數(shù)據(jù)共享的過程中調(diào)用此分布式緩存的目的,在此情況下,第一服務(wù)器在使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字之后,還可以編譯應(yīng)用的源代碼,并依據(jù)第一指令,運行所述應(yīng)用,因為使用本實施例所述的方法對源代碼進行了修改,所以,在所述應(yīng)用運行的過程中產(chǎn)生的數(shù)據(jù)被寫入所述分布式緩存中,第三服務(wù)器中的應(yīng)用可以從分布式緩存中讀取被第二服務(wù)器中的應(yīng)用寫入的數(shù)據(jù),以實現(xiàn)所述第二服務(wù)器中的應(yīng)用與所述第三服務(wù)器中的應(yīng)用間的數(shù)據(jù)共享。
或者,第一服務(wù)器在使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字之后,還可以編譯應(yīng)用的源代碼,并依據(jù)第二指令,運行所述應(yīng)用,因為使用本實施例所述的方法對源代碼進行了修改,所以,在所述應(yīng)用運行的過程中,所述應(yīng)用從所述分布式緩存中讀取由第三服務(wù)器中的應(yīng)用寫入的數(shù)據(jù),以實現(xiàn)所述第二服務(wù)器中的應(yīng)用與所述第三服務(wù)器中的應(yīng)用間的數(shù)據(jù)共享。
換句話說,應(yīng)用被遷入到第三服務(wù)器的過程,和應(yīng)用被遷入到第二服務(wù)器的過程完全相同。為了節(jié)約篇幅,本發(fā)明實施例僅詳細描述應(yīng)用被遷入第二服務(wù)器的過程。第二服務(wù)器和第三服務(wù)器都和分布式緩存連接,共享分布式緩存提供的存儲空間。
第二服務(wù)器和第三服務(wù)器,可以對分布式緩存中的同一數(shù)據(jù)進行增加(寫入數(shù)據(jù))、刪除、查找或修改,實現(xiàn)了不同服務(wù)器的應(yīng)用對同一個數(shù)據(jù)的共享。第二服務(wù)器中,進行數(shù)據(jù)共享操作的是第二服務(wù)器中的的遷入后應(yīng)用。第三服務(wù)武器中,第二服務(wù)器中,進行數(shù)據(jù)共享操作的是第三服務(wù)器中的的遷入后應(yīng)用,也可以是其他應(yīng)用。第二服務(wù)器和第三服務(wù)器中的遷移后應(yīng)用,均由第一服務(wù)器中的應(yīng)用基于同樣的遷移方法生成。
例如,遷入第二服務(wù)器的應(yīng)用運行時,寫入分布式緩存的數(shù)據(jù)可以被遷入第三服務(wù)器的應(yīng)用讀取。同樣的,第二服務(wù)器運行遷入第三服務(wù)器的應(yīng)用時,寫入分布式緩存的數(shù)據(jù)可以被遷入第二服務(wù)器的應(yīng)用讀取。
可見,本實施例中所述方法,將應(yīng)用的源代碼中的源關(guān)鍵字替換為目標關(guān)鍵字,也就是將可調(diào)用分布式緩存的函數(shù)、字段或者參數(shù)封裝進應(yīng)用的源代碼中,因此,在應(yīng)用運行的過程中,可以實現(xiàn)與分布式緩存的通信,從而使用分布式緩存實現(xiàn)數(shù)據(jù)共享,以獲得更高的數(shù)據(jù)讀寫效率。
進一步地,本實施例中,可以使用現(xiàn)有的Rehosting方式將應(yīng)用遷移到第二服務(wù)器中,此種遷移方式的宗旨為不改或少修改應(yīng)用的源代碼,因此,工作量小,遷移效率高,在此種遷移方式中引入本實施例所述的方法,使得遷移后的應(yīng)用可以使用分布式緩存進行數(shù)據(jù)的讀寫,從而實現(xiàn)不同應(yīng)用間的數(shù)據(jù)集群共享,以解決Rehosting方式無法實現(xiàn)集群共享的問題。
下面將結(jié)合不同的數(shù)據(jù)共享場景,對圖2所示的實施例進行詳細說明。
本申請實施例公開的又一種應(yīng)用的處理方法,應(yīng)用在以臨時存儲隊列(Temporary Storage Queue,TSQ)為數(shù)據(jù)共享方式的應(yīng)用的遷移過程中。
交易信息的共享為一種典型的TSQ數(shù)據(jù)共享方式,如圖3所示,三個節(jié)點中的多只聯(lián)機交易(例如A交易)的初始化數(shù)據(jù)是一樣的,初始化一次后續(xù)的交易直接讀內(nèi)存里的數(shù)據(jù),為了數(shù)據(jù)的一致性,圖3所示的三個節(jié)點讀到的內(nèi)存里的數(shù)據(jù)都要是一樣的。TSQ數(shù)據(jù)共享方式是把共享的數(shù)據(jù)放到TSQ隊列里(以Enterprise Server中間件舉例),這種方式只能實現(xiàn)單節(jié)點內(nèi)的數(shù)據(jù)共享,而無法實現(xiàn)多節(jié)點間的數(shù)據(jù)同步,如果要同步多個節(jié)點以保證多節(jié)點間的數(shù)據(jù)同步,則需要設(shè)置應(yīng)用實現(xiàn)這部分功能,而設(shè)置應(yīng)用的過程非常繁瑣。
如圖4所示,本實施例中的方法包括以下步驟:
S401:確定被遷移的應(yīng)用的數(shù)據(jù)共享方式為TSQ;
S402:從預(yù)設(shè)的數(shù)據(jù)模型集合中查詢類型元數(shù)據(jù)為TSQ的目標數(shù)據(jù)模型;
具體地,預(yù)設(shè)的數(shù)據(jù)模型集合中的任意一個數(shù)據(jù)模型均可以包括以下元數(shù)據(jù):
類型元數(shù)據(jù)、源關(guān)鍵字列表,功能元數(shù)據(jù)、關(guān)鍵字的類型、長度和關(guān)鍵字之間的關(guān)系、以及轉(zhuǎn)換規(guī)則。
其中,類型元數(shù)據(jù)用于指示應(yīng)用的數(shù)據(jù)共享方式是TSQ還是數(shù)據(jù)庫緩存;功能元數(shù)據(jù)用于描述該應(yīng)用功能是讀緩存、寫緩存、更新緩存還是輸出緩存;關(guān)鍵字類型用于指示此關(guān)鍵字是否為入?yún)?;關(guān)鍵字之間的關(guān)系用于描述關(guān)鍵字與關(guān)鍵字之間的關(guān)聯(lián)關(guān)系,包括依賴關(guān)系、互斥關(guān)系、包含關(guān)系、關(guān)鍵字和關(guān)鍵字之間的排列順序(即什么關(guān)鍵字在前、什么關(guān)鍵字在后)、該關(guān)鍵字是否必需、關(guān)鍵字的參數(shù)能夠為空等;轉(zhuǎn)換規(guī)則用于指示源關(guān)鍵字轉(zhuǎn)換為目標關(guān)鍵字的轉(zhuǎn)換規(guī)則。
在類型元數(shù)據(jù)為TSQ的數(shù)據(jù)模型中,關(guān)鍵字列表中可以包括以下關(guān)鍵字:
◆讀隊列READQ:動作類型;
◆隊列QUEUE(name):隊列名稱;
◆隊列名QNAME(name):隊列名稱,與QUEUE二選一;
◆插入數(shù)據(jù)區(qū)INTO(data-area):指定接收的數(shù)據(jù)區(qū);
◆設(shè)置指針SET(ptr-ref):指明接收數(shù)據(jù)的指針,與INTO二選一;
◆數(shù)據(jù)長度LENGTH(data-area):接收數(shù)據(jù)區(qū)的長度;
◆記錄數(shù)NUMITEMS(data-area):用來返回QUEUE里一共有多少紀錄;
◆條目ITEM(data-value):指明讀第幾條紀錄;
◆下一條NEXT:指明讀隊列的下一條紀錄,與ITEM二選一;
◆響應(yīng)碼RESP:錯誤碼;
◆響應(yīng)碼說明RESP2:錯誤碼詳細說明;
◆系統(tǒng)標識SYSID(system name):指明隊列所在遠程客戶信息控制系統(tǒng)(Customer Information Control System,CICS)的名字。
需要說明的是,以上各個關(guān)鍵字之后的括號中的字段表示此關(guān)鍵字的參數(shù)(入?yún)?。
功能元數(shù)據(jù)、關(guān)鍵字的類型、長度和關(guān)鍵字之間的關(guān)系用來檢查要替換的代碼的語法,詞法和語義的正確性。
S403:從所述目標數(shù)據(jù)模型中獲取關(guān)鍵字列表;
S404:在所述待轉(zhuǎn)換的代碼段中依次查找所述關(guān)鍵字列表中的關(guān)鍵字,將找到的關(guān)鍵字確定為所述源關(guān)鍵字;
S405:將TSQ的開始標記出現(xiàn)的代碼行作為代碼起始行,并將TSQ的結(jié)束標記出現(xiàn)的代碼行作為代碼結(jié)束行,所述代碼起始行和所述代碼結(jié)束行之間的代碼段為用于實現(xiàn)數(shù)據(jù)共享功能的代碼段;
具體地,可以使用現(xiàn)有的搜索引擎搜索“EXEC CICS WRITEQ TS”、“EXEC WRITEQ TS REWRITE”、“EXEC READQ TS”、“EXEC READQ TS NEXT”、或“EXEC DELETEQ TS”標記出現(xiàn)的代碼行,并在此代碼行添加開始注解符作為代碼起始行,然后從代碼起始行逐行搜索“END-EXEC”標記出現(xiàn)的代碼行,并在次代碼行添加結(jié)束注解符作為代碼結(jié)束行。結(jié)合分布式緩存主要的API,抽取8個注解@add cache begin,@update cache begin,@delete cache begin,@read cache begin,@add cache end,@update cache end, @delete cache end,@read cache end分別對應(yīng)分布式緩存的新增、更新、刪除、讀取操作的開始和結(jié)束。
其中,S405與S403或S404的順序不做限定。
S406:使用所述目標數(shù)據(jù)模型中的替換規(guī)則,將所述源關(guān)鍵字替換為所述目標關(guān)鍵字。
本實施例中,目標關(guān)鍵字用于指示對接裝置上的API,所述對接裝置為分布式緩存與第二服務(wù)器間的連接橋梁,實現(xiàn)第二服務(wù)器中的應(yīng)用與分布式緩存的連接。
使用對接裝置實現(xiàn)應(yīng)用與分布式緩存的通信的架構(gòu)示意圖如圖5所示,因為目前主流的分布式緩存的客戶端一般采用JAVA和C進行編譯,而Rehosting遷移的應(yīng)用通常采用COBOL進行編譯,所以,對接裝置的目的在于封裝API(例如Webservice、Restful接口),這些API用于應(yīng)用與分布式緩存進行通信,包括應(yīng)用與分布式緩存間的連接及初始化等過程。
對接裝置如何與各種分布式緩存對接可以參見現(xiàn)有技術(shù)。目前對分布式緩存的使用,主要是對分布式緩存的寫、讀、更新以及刪除操作上,結(jié)合TSQ和數(shù)據(jù)庫場景,對緩存數(shù)據(jù)的操作也集中在寫、讀、更新及刪除操作上,所以,對接裝置也只需封裝以上4種接口即可。
從上述說明可以看出,本實施例中所述的方法,通過建立元數(shù)據(jù)模型,界定代碼范圍和代碼轉(zhuǎn)換流程,COBOL應(yīng)用中就自動引入了分布式緩存,基于分布式緩存的特性,多個應(yīng)用節(jié)點可以共享數(shù)據(jù),而無需對應(yīng)用進行改進,因此,使得多應(yīng)用節(jié)點共享數(shù)據(jù)的方式變得簡單易行。
本申請實施例公開的又一種應(yīng)用的處理方法,應(yīng)用在以數(shù)據(jù)庫緩存為數(shù)據(jù)共享方式的應(yīng)用的遷移過程中。
聯(lián)機交易里有分頁查詢的交易,以某銀行對公客戶系統(tǒng)為例,目前的做法是把查詢的中間結(jié)果放到數(shù)據(jù)庫,分頁查詢的時候再對中間結(jié)果查詢。如圖6所示,三個交易(A交易、B交易和C交易)每次都要取T表的前10條 記錄,而這些記錄的變動小,如果每次都取數(shù)據(jù)庫查詢無疑是種浪費,效率比較低,大數(shù)據(jù)量的查詢時又增加了數(shù)據(jù)庫網(wǎng)絡(luò)交互的次數(shù),降低了數(shù)據(jù)庫性能。
本申請實施例公開的又一種應(yīng)用的處理方法,如圖7所示,包括以下步驟:
S701:確定被遷移的應(yīng)用的數(shù)據(jù)共享方式為數(shù)據(jù)庫緩存;
S702:從預(yù)設(shè)的數(shù)據(jù)模型集合中查詢目標數(shù)據(jù)模型,目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為數(shù)據(jù)庫緩存;
同上一實施例,預(yù)設(shè)的數(shù)據(jù)模型集合中的任意一個數(shù)據(jù)模型均可以包括以下元數(shù)據(jù):
類型元數(shù)據(jù)、源關(guān)鍵字列表,功能元數(shù)據(jù)、關(guān)鍵字的類型、長度和關(guān)鍵字之間的關(guān)系、以及轉(zhuǎn)換規(guī)則。
與上述實施例不同的是,在類型元數(shù)據(jù)為數(shù)據(jù)庫緩存的數(shù)據(jù)模型下,關(guān)鍵字列表中可以包括以下關(guān)鍵字:
◆選擇SELECT:動作類型,需要查詢的字段;
◆哪些FROM:從哪些表取記錄;
◆插入數(shù)據(jù)區(qū)INTO:需要賦值的字段;
◆哪里WHERE:查詢的條件;
◆與AND:與條件。
S703:將用戶標記的起始位置所在的代碼行作為代碼起始行,并將用戶標記的結(jié)束位置所在的代碼行作為代碼結(jié)束行,所述代碼起始行和所述代碼結(jié)束行之間的代碼段為用于實現(xiàn)數(shù)據(jù)共享功能的代碼段;
具體地,由于不是所有的SQL都需要緩存,開始行的位置無法通過搜索的方式獲取,所以需要用戶指定好使用共享緩存的代碼位置,并依據(jù)用戶的指定,在開始位置和結(jié)束位置加上注解符號。
S704:從所述目標數(shù)據(jù)模型中獲取關(guān)鍵字列表;
S705:在所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中依次查找所述關(guān)鍵字列表中的關(guān)鍵字,將找到的關(guān)鍵字確定為所述源關(guān)鍵字;
S706:檢查所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字的語法是否正確,如果是,執(zhí)行S707,如果否,執(zhí)行S708;
例如包括READQ關(guān)鍵字的情況下,ITEM關(guān)鍵字和NEXT關(guān)鍵字不能并存,QUEUE不能為空;又例如在元數(shù)據(jù)類型為數(shù)據(jù)緩存的情況下,WHERE關(guān)鍵字不能在FROM關(guān)鍵字前,INTO關(guān)鍵字不能為空等。語法判斷的依據(jù)來自于數(shù)據(jù)模型里的關(guān)鍵字類型和長度、關(guān)鍵字之間的關(guān)系。
S707:使用所述目標數(shù)據(jù)模型中的替換規(guī)則,將所述源關(guān)鍵字替換為所述目標關(guān)鍵字。
S708:發(fā)出語法錯誤提示。
從上述步驟可以看出,使用本實施例所述的方法將被遷移的應(yīng)用的源代碼進行轉(zhuǎn)換后,使得應(yīng)用與分布式緩存對接,在此應(yīng)用進行分頁查詢的時候,可以直接從分布式緩存中讀取數(shù)據(jù),從而能夠提高查詢的效率。
與上述方法相對應(yīng)地,本申請實施例還提供了一種應(yīng)用的處理裝置,如圖8所示,包括:
代碼段確認模塊801,用于在應(yīng)用從第一服務(wù)器向第二服務(wù)器遷移的過程中,在所述應(yīng)用的源代碼中確認用于實現(xiàn)數(shù)據(jù)共享功能的代碼段;
替換模塊802,用于使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字,所述源關(guān)鍵字依據(jù)所述應(yīng)用的數(shù)據(jù)共享方式從預(yù)設(shè)的數(shù)據(jù)模型中查詢得到,所述預(yù)設(shè)的數(shù)據(jù)模型用于指示數(shù)據(jù)共享方式與源關(guān)鍵字間的對應(yīng)關(guān)系,所述目標關(guān)鍵字用于所述應(yīng)用在遷移之前實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用所述第一服務(wù)器中的非分布式緩沖存儲器,所述目標關(guān)鍵字用于在所述應(yīng)用遷移之后,在所述源代碼被編譯運行以實現(xiàn)數(shù)據(jù)共享功能的過程中,調(diào)用與所述第二服務(wù)器連接的分布式緩沖存儲器。
可選地,本實施例所述裝置還可以包括:
關(guān)鍵字確認模塊803,用于確定所述應(yīng)用的數(shù)據(jù)共享方式;從所述預(yù)設(shè)的數(shù)據(jù)模型集合中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型集合中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表;從所述目標數(shù)據(jù)模型中獲取關(guān)鍵字列表;將包含在所述待轉(zhuǎn)換的代碼段中的所述關(guān)鍵字列表中的關(guān)鍵字作為所述源關(guān)鍵字。
編譯模塊804,用于在所述替換模塊使用目標關(guān)鍵字替換所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段中的源關(guān)鍵字之后,編譯所述應(yīng)用的源代碼,生成遷移后的應(yīng)用;
以及第一運行控制模塊805和/或第二運行控制模塊806。
其中,第一運行控制模塊用于依據(jù)第一指令,運行所述遷移后的應(yīng)用,其中,在所述應(yīng)用運行的過程中產(chǎn)生的數(shù)據(jù)被寫入所述分布式緩存中,被寫入所述分布式緩存中的數(shù)據(jù),用于被與分所述布式緩存連接的第三服務(wù)器中運行的應(yīng)用讀取。
第二運行控制模塊用于依據(jù)第二指令,運行所述遷移后的應(yīng)用,讀取所述分布式緩存中的數(shù)據(jù),其中所述分布式緩存中的數(shù)據(jù)由與分所述布式緩存連接的第三服務(wù)器中運行的應(yīng)用寫入。
具體地,關(guān)鍵字確認模塊確認源關(guān)鍵字的具體實現(xiàn)方式可以為:從所述預(yù)設(shè)的數(shù)據(jù)模型集合中查詢目標數(shù)據(jù)模型,所述目標數(shù)據(jù)模型中的類型元數(shù)據(jù)為所述應(yīng)用的數(shù)據(jù)共享方式,所述預(yù)設(shè)的數(shù)據(jù)模型集合中的任意一個數(shù)據(jù)模型包括類型元數(shù)據(jù)及關(guān)鍵字列表,以及用于指示源關(guān)鍵字替換為目標關(guān)鍵字的替換規(guī)則;替換模塊使用目標關(guān)鍵字替換所述待轉(zhuǎn)換的代碼段中的源關(guān)鍵字的具體實現(xiàn)方式可以為:使用所述目標數(shù)據(jù)模型中的替換規(guī)則,將所述源關(guān)鍵字替換為所述目標關(guān)鍵字。
進一步地,關(guān)鍵字確認模塊可以依據(jù)不同的數(shù)據(jù)共享方式,確定出不同的關(guān)鍵字列表,具體地:
關(guān)鍵字確認模塊確定所述應(yīng)用的數(shù)據(jù)共享方式為TSQ,則所述關(guān)鍵字列表包括以下關(guān)鍵字:
READQ:動作類型;
QUEUE:隊列名稱;
QNAME:隊列名稱,與QUEUE二選一;
INTO:指定接收的數(shù)據(jù)區(qū);
SET:指明接收數(shù)據(jù)的指針,與INTO二選一;
LENGTH:接收數(shù)據(jù)區(qū)的長度;
NUMITEMS:用來返回QUEUE里的紀錄的數(shù)量;
ITEM:指明讀第幾條紀錄;
NEXT:指明讀隊列的下一條紀錄,與ITEM二選一;
RESP:錯誤碼;
RESP2:錯誤碼詳細說明;
SYSID:指明隊列所在遠程客戶信息控制系統(tǒng)的名字。
關(guān)鍵字確認模塊確定所述應(yīng)用的數(shù)據(jù)共享方式為數(shù)據(jù)庫緩存;
則所述關(guān)鍵字列表包括以下關(guān)鍵字:
SELECT:動作類型,需要查詢的字段;
FROM:從哪些表取記錄;
INTO:需要賦值的字段;
WHERE:查詢的條件;
AND:與條件。
具體地,代碼段確認模塊在所述應(yīng)用的源代碼中確認用于實現(xiàn)數(shù)據(jù)共享功能的代碼段的具體實現(xiàn)方式可以為:在所述應(yīng)用的數(shù)據(jù)共享方式為TSQ的情況下,將TSQ的開始標記出現(xiàn)的代碼行作為代碼起始行,并將TSQ的結(jié)束標記出現(xiàn)的代碼行作為代碼結(jié)束行,所述代碼起始行和所述代碼結(jié)束行之間的代碼段為所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段;在所述應(yīng)用的數(shù)據(jù)共享方式為數(shù)據(jù)庫數(shù)據(jù)緩存的情況下,將用戶標記的起始位置所在的代碼行作為代 碼起始行,并將用戶標記的結(jié)束位置所在的代碼行作為代碼結(jié)束行,所述代碼起始行和所述代碼結(jié)束行之間的代碼段為所述用于實現(xiàn)數(shù)據(jù)共享功能的代碼段。
本實施例所述的裝置,可以通過在應(yīng)用的遷移過程中修改應(yīng)用的源代碼,將實現(xiàn)數(shù)據(jù)共享功能過程中調(diào)用的非分布式存儲器替換為分布式緩存,從而提高數(shù)據(jù)共享的效率。
本申請實施例方法所述的功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算設(shè)備可讀取存儲介質(zhì)中。基于這樣的理解,本申請實施例對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算設(shè)備(可以是個人計算機,服務(wù)器,移動計算設(shè)備或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其它實施例的不同之處,各個實施例之間相同或相似部分互相參見即可。
對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本申請。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本申請的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本申請將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。