專利名稱:一種數(shù)據(jù)查詢系統(tǒng)及其構(gòu)建方法與相應(yīng)的數(shù)據(jù)查詢方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)查詢領(lǐng)域,尤其涉及一種數(shù)據(jù)查詢系統(tǒng)及其構(gòu)建方法與相應(yīng)的 數(shù)據(jù)查詢方法。
背景技術(shù):
在數(shù)據(jù)查詢系統(tǒng)構(gòu)建中,尤其是在性能數(shù)據(jù)查詢系統(tǒng)構(gòu)建中,或者網(wǎng)站服務(wù) 器的構(gòu)建中,往往需要接收從客戶端發(fā)送來(lái)的諸多客戶端請(qǐng)求,其中客戶端可以是 GUKGraphical User Interface,圖形用戶界面),客戶端或者Web客戶端,這些客戶端請(qǐng) 求往往都會(huì)涉及到大規(guī)模的數(shù)據(jù)網(wǎng)絡(luò)傳遞,而且返回的數(shù)據(jù)還需要進(jìn)行一些邏輯計(jì)算、 歸并以及排序之類的處理。例如,性能數(shù)據(jù)查詢系統(tǒng)中,采集到的性能數(shù)據(jù)經(jīng)過處理后 存儲(chǔ)到性能報(bào)表中,數(shù)據(jù)查詢系統(tǒng)中往往需要通過查詢組件先從后臺(tái)數(shù)據(jù)庫(kù)中查詢出符 合條件的性能報(bào)表中的性能數(shù)據(jù),再將這些性能數(shù)據(jù)從后臺(tái)經(jīng)過網(wǎng)絡(luò)傳遞回來(lái),返回的 性能數(shù)據(jù)再經(jīng)過一些 邏輯計(jì)算被封裝成適合GUI顯示的數(shù)據(jù)結(jié)構(gòu);如果是分布式系統(tǒng)的 話,還會(huì)接收從不同的數(shù)據(jù)源來(lái)的數(shù)據(jù),在數(shù)據(jù)查詢系統(tǒng)中合并,最終提供給GUI用于 顯不。目前查詢組件一般都采用直接構(gòu)建的方式,并且在邏輯上具有唯一性,也就是 說一個(gè)數(shù)據(jù)查詢系統(tǒng)只有一個(gè)查詢組件,所有的客戶端請(qǐng)求(包括GUI,客戶端或Web客 戶端的客戶端請(qǐng)求)都在這個(gè)查詢組件中去處理,往往會(huì)出現(xiàn)由于請(qǐng)求的增多而導(dǎo)致服 務(wù)不能及時(shí)響應(yīng),從而降低處理效率。因此,由于查詢組件的唯一特性,也使得查詢組件不具備可擴(kuò)展性,不具備可 伸縮性,也不能通過添加硬件設(shè)備來(lái)提升請(qǐng)求處理的效率,影響系統(tǒng)本身的可用性。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種數(shù)據(jù)查詢系統(tǒng)及其構(gòu)建方法與相應(yīng)的數(shù)據(jù) 查詢方法,保證了數(shù)據(jù)查詢系統(tǒng)的高可用性。為了解決上述問題,本發(fā)明提供了一種數(shù)據(jù)查詢系統(tǒng),包括客戶端,所述數(shù)據(jù) 查詢系統(tǒng)還包括一個(gè)查詢組件代理以及與該查詢組件代理連接的一個(gè)或多個(gè)查詢組件; 其中,所述客戶端,用于向所述查詢組件代理發(fā)送客戶端請(qǐng)求;所述查詢組件代理,用于保存所述查詢組件的查詢組件號(hào)、查詢組件實(shí)例以及 查詢組件的負(fù)載情況,并根據(jù)查詢組件上報(bào)的所述查詢組件的客戶端請(qǐng)求負(fù)載情況進(jìn)行 更新;以及接收所述客戶端請(qǐng)求,并根據(jù)負(fù)載均衡的原則,選擇一個(gè)查詢組件返回給所 述客戶端;所述查詢組件,用于向查詢組件代理發(fā)送查詢組件號(hào)與查詢組件實(shí)例進(jìn)行注 冊(cè),并上報(bào)所述查詢組件的客戶端請(qǐng)求負(fù)載情況;以及處理所述客戶端請(qǐng)求并將處理結(jié) 果返回給所述客戶端。
進(jìn)一步地,上述數(shù)據(jù)查詢系統(tǒng)還具有如下特征所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上正在處理的客戶端請(qǐng)求的數(shù)量,所 述負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的客戶端請(qǐng)求個(gè)數(shù)最少;或者,所述客戶 端請(qǐng)求負(fù)載情況為所述查詢組件上的客戶端請(qǐng)求的處理權(quán)重, 所述負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的所述客戶端請(qǐng)求的處理權(quán)重最小。進(jìn)一步地,上述數(shù)據(jù)查詢系統(tǒng)還具有如下特征所述數(shù)據(jù)查詢系統(tǒng)進(jìn)一步包括查詢組件號(hào)分配器和負(fù)載均衡控制器;其中,所述查詢組件號(hào)分配器,用于在所述查詢組件啟動(dòng)時(shí),給所述查詢組件分配一 個(gè)唯一的未被其他查詢組件占用的查詢組件號(hào);所述負(fù)載均衡控制器,用于在所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行過程中,根據(jù)數(shù)據(jù)查詢系 統(tǒng)運(yùn)行指標(biāo)或根據(jù)接收到的用戶的控制命令,向所述查詢組件發(fā)送啟動(dòng)指令,指示所述 查詢組件啟動(dòng);其中,負(fù)載均衡控制器根據(jù)接收到的用戶的控制命令向查詢組件發(fā)送啟動(dòng)指 令,或者負(fù)載均衡控制器根據(jù)所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)設(shè)置啟動(dòng)閾值,并監(jiān)測(cè)所述數(shù) 據(jù)查詢系統(tǒng)的運(yùn)行狀況,如果數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)達(dá)到所述啟動(dòng)閾值,則向所述查詢 組件發(fā)送啟動(dòng)指令。進(jìn)一步地,上述數(shù)據(jù)查詢系統(tǒng)還具有如下特征所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)為數(shù)據(jù)查詢系統(tǒng)的使用規(guī)模,客戶端請(qǐng)求的響應(yīng) 性,客戶端請(qǐng)求的數(shù)目,系統(tǒng)支持的客戶請(qǐng)求的計(jì)算量,請(qǐng)求在處理時(shí)CPU的耗時(shí)以及 占用資源中的一種或多種。為了解決上述問題,本發(fā)明還提供了一種上述數(shù)據(jù)查詢系統(tǒng)的構(gòu)建方法,具體 包括如下步驟啟動(dòng)一個(gè)查詢組件代理以及啟動(dòng)一個(gè)或多個(gè)查詢組件,所述查詢組件啟動(dòng)后向 所述查詢組件代理發(fā)送查詢組件號(hào)與查詢組件實(shí)例進(jìn)行注冊(cè),并上報(bào)所述查詢組件的客 戶端請(qǐng)求負(fù)載情況,所述查詢組件代理保存所述查詢組件號(hào)、查詢組件實(shí)例以及所述查 詢組件的客戶端請(qǐng)求負(fù)載情況的映射關(guān)系,并根據(jù)所述查詢組件上報(bào)的客戶端請(qǐng)求負(fù)載 情況更新保存的所述客戶端請(qǐng)求負(fù)載情況;所述查詢組件代理接收到客戶端請(qǐng)求后,按照負(fù)載均衡的原則,選擇一個(gè)查詢 組件返回給客戶端,所述查詢組件更新所述查詢組件的客戶端請(qǐng)求負(fù)載情況。進(jìn)一步地,上述構(gòu)建方法還具有如下特征所述啟動(dòng)一個(gè)或多個(gè)查詢組件,在所述數(shù)據(jù)查詢系統(tǒng)開始運(yùn)行時(shí)同時(shí)啟動(dòng)所有 查詢組件。或者,所述數(shù)據(jù)查詢系統(tǒng)還包括一個(gè)負(fù)載均衡控制器;所述啟動(dòng)一個(gè)或多個(gè)查 詢組件,是在所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行過程中,所述負(fù)載均衡控制器根據(jù)數(shù)據(jù)查詢系統(tǒng)運(yùn) 行指標(biāo)或根據(jù)接收到的用戶的控制命令,向所述查詢組件發(fā)送啟動(dòng)指令,指示所述查詢 組件啟動(dòng);其中,負(fù)載均衡控制器是根據(jù)接收到的用戶的控制命令向查詢組件發(fā)送啟動(dòng)指 令,或者負(fù)載均衡控制器根據(jù)所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)設(shè)置啟動(dòng)閾值,并監(jiān)測(cè)所述數(shù) 據(jù)查詢系統(tǒng)的運(yùn)行狀況,如果數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)達(dá)到所述啟動(dòng)閾值,則向所述查詢組件發(fā)送啟動(dòng)指令;所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)為數(shù)據(jù)查詢系統(tǒng)的使用規(guī)模,客戶端請(qǐng)求的響應(yīng) 性,客戶端請(qǐng)求的數(shù)目,系統(tǒng)支持的客戶請(qǐng)求的計(jì)算量,請(qǐng)求在處理時(shí)CPU的耗時(shí)以及 占用資源中 的一種或多種。進(jìn)一步地,上述構(gòu)建方法還具有如下特征所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上正在處理的客戶端請(qǐng)求的數(shù)量,所 述負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的客戶端請(qǐng)求個(gè)數(shù)最少;或者,所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上的客戶端請(qǐng)求的處理權(quán)重, 所述負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的所述客戶端請(qǐng)求的處理權(quán)重最小。進(jìn)一步地,上述構(gòu)建方法還具有如下特征所述查詢組件代理保存所述查詢組件號(hào)、查詢組件實(shí)例以及所述查詢組件的客 戶端請(qǐng)求負(fù)載情況的映射關(guān)系,并根據(jù)所述查詢組件上報(bào)的客戶端請(qǐng)求負(fù)載情況更新保 存的客戶端請(qǐng)求負(fù)載情況,具體包括如下步驟所述查詢組件代理初始化兩個(gè)哈希表,第一哈希表用來(lái)保存所述查詢組件號(hào)和 所述查詢組件實(shí)例的映射關(guān)系,第二哈希表用來(lái)保存所述查詢組件號(hào)和所述查詢組件上 客戶端請(qǐng)求負(fù)載情況的映射關(guān)系;所述查詢組件代理接受查詢組件的注冊(cè)后,將所述查詢組件號(hào)和查詢組件實(shí)例 的映射關(guān)系保存在所述第一哈希表中;所述查詢組件代理接受所述查詢組件的周期心跳聯(lián)系,并定期更新所述第二哈 希表中查詢組件上客戶端請(qǐng)求負(fù)載情況。進(jìn)一步地,上述構(gòu)建方法還具有如下特征所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上正在處理的客戶端請(qǐng)求的數(shù)量,所 述查詢組件更新所述客戶端請(qǐng)求負(fù)載情況具體為所述查詢組件在處理所述客戶端請(qǐng)求前,所述查詢組件正在處理的客戶端請(qǐng)求 數(shù)計(jì)數(shù)加一個(gè)計(jì)數(shù)單位值;所述查詢組件向客戶端返回請(qǐng)求結(jié)果前,所述查詢組件正在處理的客戶端請(qǐng)求 數(shù)減所述計(jì)數(shù)單位值。進(jìn)一步地,上述構(gòu)建方法還具有如下特征所述查詢組件向所述查詢組件代理發(fā)送查詢組件號(hào)與查詢組件實(shí)例進(jìn)行注冊(cè), 并上報(bào)所述查詢組件的客戶端請(qǐng)求負(fù)載情況,具體包括如下步驟A、所述查詢組件啟動(dòng)一定時(shí)器;B、定時(shí)時(shí)間到,所述查詢組件判斷向所述查詢組件代理注冊(cè)是否成功,如果不 成功,執(zhí)行步驟C;如果成功,判斷上一次向所述查詢組件代理心跳發(fā)送所述客戶端請(qǐng) 求負(fù)載情況是否成功;如果成功,執(zhí)行步驟D,否則執(zhí)行步驟C;C、所述查詢組件向所述查詢組件代理注冊(cè),返回步驟B;D、所述查詢組件向所述查詢組件代理發(fā)送所述客戶端請(qǐng)求負(fù)載情況,返回步驟 B。為了解決上述問題,本發(fā)明還提供了一種數(shù)據(jù)查詢方法,包括如下步驟客戶端向查詢組件代理發(fā)送客戶端請(qǐng)求;
所述查詢組件代理根據(jù)負(fù)載均衡的原則,選擇查詢組件,并將該查詢組件返回 給所述客戶端;所述查詢組件處理所述客戶端請(qǐng)求,并將處理結(jié)果返回給所述客戶端;其中,所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上正在處理的客戶端請(qǐng)求的數(shù) 量,所述負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的客戶端請(qǐng)求個(gè)數(shù)最少;或者,所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上的客戶端請(qǐng)求的處理權(quán)重, 所述負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的所述客戶端請(qǐng)求的處理權(quán)重最小。上述數(shù)據(jù)查詢系統(tǒng)和數(shù)據(jù)查詢方法保證了數(shù)據(jù)查詢系統(tǒng)的高可用性,可以克服 現(xiàn)有數(shù)據(jù)查詢系統(tǒng)中,當(dāng)客戶端請(qǐng)求增多時(shí),單一查詢組件不能及時(shí)響應(yīng)的缺陷。
圖1是本發(fā)明實(shí)施例查詢組件代理啟動(dòng)后保存并更新映射關(guān)系流程圖;圖2是本發(fā)明實(shí)施例查詢組件動(dòng)態(tài)地啟動(dòng),以及注冊(cè)和上報(bào)查詢組件號(hào)與客戶 端請(qǐng)求負(fù)載情況的流程圖;圖3是本發(fā)明實(shí)施例查詢組件代理根據(jù)負(fù)載均衡原則獲取查詢組件的流程圖。
具體實(shí)施例方式下面結(jié)合附圖詳細(xì)說明本發(fā)明的具體實(shí)施方式
。本實(shí)施例中的數(shù)據(jù)查詢系統(tǒng),包括客戶端、一個(gè)查詢組件代理以及一個(gè)或多個(gè) 與該查詢組件代理連接的查詢組件;其中,客戶端,用于向查詢組件代理發(fā)送客戶端請(qǐng)求;查詢組件代理,用于保存查詢組件的查詢組件號(hào)、查詢組件實(shí)例以及查詢組件 的負(fù)載情況,并根據(jù)查詢組件上報(bào)的查詢組件的客戶端請(qǐng)求負(fù)載情況進(jìn)行更新;以及接 收客戶端請(qǐng)求,并根據(jù)負(fù)載均衡的原則,選擇一個(gè)查詢組件返回給客戶端;查詢組件,用于向查詢組件代理發(fā)送查詢組件號(hào)與查詢組件實(shí)例進(jìn)行注冊(cè),并 上報(bào)查詢組件的客戶端請(qǐng)求負(fù)載情況;以及處理客戶端請(qǐng)求并將處理結(jié)果返回給客戶 端。上述數(shù)據(jù)查詢系統(tǒng)還可以進(jìn)一步包括一個(gè)查詢組件號(hào)分配器和一個(gè)負(fù)載均衡 控制器;其中,查詢組件號(hào)分配器,用于給查詢組件分配一個(gè)唯一的未被其他查詢組件占用的 查詢組件號(hào);負(fù)載均衡控制器,用于在數(shù)據(jù)查詢系統(tǒng)運(yùn)行過程中,根據(jù)數(shù)據(jù)查詢系統(tǒng)運(yùn)行指 標(biāo)或根據(jù)接收到的用戶的控制命令,向查詢組件發(fā)送啟動(dòng)指令,指示查詢組件啟動(dòng);進(jìn)一步地,負(fù)載均衡控制器可以根據(jù)接收到的用戶的控制命令向查詢組件發(fā)送 啟動(dòng)指令,負(fù)載均衡控制器還可以根據(jù)不同的數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)設(shè)置啟動(dòng)閾值,并 監(jiān)測(cè)數(shù)據(jù)查詢系統(tǒng)的運(yùn)行狀況,如果數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)達(dá)到該閾值,則向查詢組件 發(fā)送啟動(dòng)指令;其中,數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)可以為數(shù)據(jù)查詢系統(tǒng)的使用規(guī)模,客戶端請(qǐng)求的 響應(yīng)性,客戶端請(qǐng)求的數(shù)目,系統(tǒng)支持的客戶請(qǐng)求的計(jì)算量,請(qǐng)求在處理時(shí)CPU的耗時(shí),占用資源中的一種或多種。 基于上述數(shù)據(jù)查詢系統(tǒng),本實(shí)施例給出上述數(shù)據(jù)查詢系統(tǒng)的構(gòu)建方法;本實(shí)施例將原來(lái)的一個(gè)查詢組件擴(kuò)展為一個(gè)或多個(gè)查詢組件,并創(chuàng)建一個(gè)查詢 組件代理用來(lái)管理該一個(gè)或多個(gè)查詢組件;其中每個(gè)查詢組件都可以設(shè)置為能夠處理所 有類型的客戶端請(qǐng)求,不限制每個(gè)查詢組件能夠處理的客戶端請(qǐng)求的類型;查詢組件代理還用于接收客戶端請(qǐng)求,并根據(jù)負(fù)載均衡的原則選擇查詢組件返 回給發(fā)送請(qǐng)求的客戶端;由此可見,本實(shí)施例中客戶端請(qǐng)求不是直接發(fā)送給查詢組件 的。本實(shí)施例的構(gòu)建方法具體包括如下步驟第一步啟動(dòng)查詢組件代理以及一個(gè)或多個(gè)查詢組件,查詢組件啟動(dòng)后向查詢 組件代理發(fā)送查詢組件號(hào)和查詢組件實(shí)例進(jìn)行注冊(cè),并向查詢組件代理上報(bào)客戶端請(qǐng)求 負(fù)載情況,查詢組件代理保存查詢組件的查詢組件號(hào)、查詢組件實(shí)例以及與查詢組件的 客戶端請(qǐng)求負(fù)載情況的映射關(guān)系,并根據(jù)查詢組件的上報(bào)更新客戶端請(qǐng)求負(fù)載情況;本實(shí)施例中優(yōu)選查詢組件周期性地判斷向查詢組件代理的注冊(cè)情況,以及周期 性的上報(bào)客戶端請(qǐng)求負(fù)載情況,以供查詢組件代理進(jìn)行更新;這樣的設(shè)計(jì)使得方案中的 各個(gè)部分之間的耦合更小,容錯(cuò)性更加好。當(dāng)然也可以是其他實(shí)施方式,如接收到一個(gè) 客戶端請(qǐng)求就進(jìn)行判斷等。查詢組件周期性地判斷向查詢組件代理的注冊(cè)情況,以及周期性的上報(bào)客戶端 請(qǐng)求負(fù)載情況,以供查詢組件代理進(jìn)行更新具體包括如下步驟注冊(cè)指當(dāng)某個(gè)查詢組件啟動(dòng)后,該查詢組件將其查詢組件號(hào)和查詢組件實(shí)例發(fā) 送給查詢組件代理;查詢組件代理接受查詢組件的注冊(cè),保存該查詢組件的查詢組件號(hào) 與查詢組件實(shí)例的映射關(guān)系;查詢組件代理用來(lái)管理一個(gè)或多個(gè)查詢組件,并用于接收客戶端請(qǐng)求;管理包 括接受啟動(dòng)的查詢組件的注冊(cè),保存查詢組件號(hào)、查詢組件實(shí)例以及查詢組件的客戶端 請(qǐng)求負(fù)載情況的映射關(guān)系,以及更新客戶端請(qǐng)求負(fù)載情況;查詢組件上客戶端請(qǐng)求負(fù)載情況,可以是查詢組件上正在處理的客戶端請(qǐng)求的 數(shù)目,還可以是查詢組件上客戶端請(qǐng)求的處理權(quán)重;查詢組件代理根據(jù)客戶端請(qǐng)求負(fù)載情況選擇查詢組件,找到查詢組件實(shí)例 (instance),從而將該查詢組件實(shí)例表示的查詢組件返回給客戶端;圖1所示為一個(gè)查詢組件代理啟動(dòng)后保存以及更新映射關(guān)系的具體實(shí)施例,本 實(shí)施例中查詢組件上客戶端請(qǐng)求負(fù)載情況為查詢組件上正在處理的客戶端請(qǐng)求數(shù)目,具 體包括如下步驟步驟101 查詢組件代理初始化兩個(gè)哈希表,一個(gè)哈希表QRYS用來(lái)保存查詢組 件號(hào)和查詢組件實(shí)例的映射關(guān)系,一個(gè)哈希表QRYN用來(lái)保存查詢組件號(hào)和查詢組件上 正在處理的客戶端請(qǐng)求數(shù)目的映射關(guān)系;在另一實(shí)施例中,也可以將查詢組件號(hào)、查詢組件實(shí)例以及每個(gè)查詢組件上正 在處理的請(qǐng)求的映射關(guān)系保存在一個(gè)表中;步驟102 查詢組件代理接受查詢組件的注冊(cè),并將查詢組件號(hào)和查詢組件實(shí) 例的映射關(guān)系保存在哈希表QRYS中;
步驟103:查詢組件代理接受查詢組件的周期心跳聯(lián)系,查詢組件將查詢組件 號(hào)以及該查詢組件正在處理的客戶端請(qǐng)求個(gè)數(shù)作為參數(shù)傳遞給查詢組件代理,查詢組件 代理更新哈希表QRYN中查詢組件號(hào)和查詢組件正在處理的客戶端請(qǐng)求個(gè)數(shù);此步驟中,查詢組 件代理可以是定期更新哈希表QRYN中查詢組件號(hào)和查詢組 件正在處理的客戶端請(qǐng)求個(gè)數(shù);也可以是實(shí)時(shí)更新,或者查詢組件代理根據(jù)需要指示查 詢組件發(fā)送正在處理的客戶端請(qǐng)求個(gè)數(shù)等多種實(shí)施方式;第一步中,啟動(dòng)查詢組件可以由也有多種實(shí)施方式如可以在數(shù)據(jù)查詢系統(tǒng)開始運(yùn)行時(shí)同時(shí)啟動(dòng)所有查詢組件;也可在運(yùn)行過程中由負(fù)載均衡控制器根據(jù)數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)或根據(jù)接收到 的用戶的控制命令,動(dòng)態(tài)地啟動(dòng)查詢組件,而且每個(gè)查詢組件的啟動(dòng)都是獨(dú)立的;其中 負(fù)載均衡控制器用于向查詢組件發(fā)送啟動(dòng)指令,指示查詢組件啟動(dòng);進(jìn)一步地,負(fù)載均衡控制器可以根據(jù)接收到的用戶的控制命令向查詢組件發(fā)送 啟動(dòng)指令,負(fù)載均衡控制器還可以根據(jù)不同的數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)設(shè)置啟動(dòng)閾值,并 監(jiān)測(cè)數(shù)據(jù)查詢系統(tǒng)的運(yùn)行狀況,如果數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)達(dá)到該閾值,則向查詢組件 發(fā)送啟動(dòng)指令;其中,數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)可以為數(shù)據(jù)查詢系統(tǒng)的使用規(guī)模,客戶端請(qǐng)求的 響應(yīng)性,客戶端請(qǐng)求的數(shù)目,系統(tǒng)支持的客戶請(qǐng)求的計(jì)算量,請(qǐng)求在處理時(shí)CPU的耗 時(shí),占用資源中的一種或多種。圖2所示為查詢組件動(dòng)態(tài)地啟動(dòng),以及注冊(cè)和上報(bào)查詢組件號(hào)與客戶端請(qǐng)求負(fù) 載情況的優(yōu)選的實(shí)施例,具體包括如下步驟步驟201 查詢組件獲取一個(gè)未被其他查詢組件占用的查詢組件號(hào);查詢組件號(hào)可以是由一個(gè)查詢組件號(hào)分配器分配給查詢組件;該查詢組件分配器,用于向查詢組件分配一個(gè)唯一的未被其他查詢組件占用的 查詢組件號(hào);當(dāng)然,查詢組件號(hào)也可以預(yù)先配置到查詢組件中,此時(shí)步驟201可以省略;步驟202 查詢組件設(shè)置一個(gè)變量用來(lái)保存目前該查詢組件的客戶端請(qǐng)求負(fù)載 情況,如正在處理的客戶端請(qǐng)求的個(gè)數(shù);步驟203 查詢組件啟動(dòng)一定時(shí)器;該定時(shí)器的定時(shí)時(shí)間可以根據(jù)實(shí)際數(shù)據(jù)查詢系統(tǒng)的運(yùn)行進(jìn)行設(shè)置,本發(fā)明對(duì)此 并不限定;此外,本步驟中還可以進(jìn)一步初始化用來(lái)表示注冊(cè)是否成功的變量一和表示上 一次向查詢組件代理發(fā)送客戶端請(qǐng)求負(fù)載是否成功的變量二;但本發(fā)明并不限于此方法 對(duì)注冊(cè)是否成功和發(fā)送客戶端請(qǐng)求負(fù)載是否成功進(jìn)行限定,如還可以是根據(jù)與查詢組件 代理進(jìn)行交互通知查詢組件是否成功;其中變量一和變量二可以是布爾變量,用True表示成功,用False表示失敗,當(dāng) 然也可以是其他變量。步驟204:定時(shí)時(shí)間到,查詢組件判斷向查詢組件代理注冊(cè)是否成功,如果不 成功,執(zhí)行步驟205;如果成功,判斷上一次向查詢組件代理心跳發(fā)送客戶端請(qǐng)求負(fù)載 (如客戶端請(qǐng)求個(gè)數(shù))是否成功;如果成功,執(zhí)行步驟206,否則執(zhí)行步驟205;
如可以根據(jù) 變量一和變量二的值進(jìn)行判斷;步驟205:向查詢組件代理注冊(cè),返回步驟204;如果采用設(shè)置變量一的方式,此步驟進(jìn)一步包括按照注冊(cè)是否成功的結(jié)果設(shè)置 變量一的值;如當(dāng)注冊(cè)成功,將布爾變量表示的變量一置為Ture,否則置為False;步驟206:向查詢組件代理發(fā)送客戶端請(qǐng)求負(fù)載情況,如當(dāng)前正在處理的客戶 端請(qǐng)求數(shù)目;返回步驟204;如果采用設(shè)置變量二的方式,此步驟進(jìn)一步還包括按照向查詢組件代理發(fā)送客 戶端請(qǐng)求負(fù)載情況是否成功的結(jié)果設(shè)置變量二的值。當(dāng)然,非動(dòng)態(tài)啟動(dòng)的注冊(cè)和上報(bào)也可以采用本實(shí)施例的實(shí)施方式。上述優(yōu)選實(shí)施例中,查詢組件通過斷點(diǎn)續(xù)連的方法,也就是啟動(dòng)時(shí)注冊(cè),然后 周期發(fā)送當(dāng)前正在客戶端請(qǐng)求個(gè)數(shù)給查詢組件代理,保持查詢組件和查詢組件代理之間 的聯(lián)系。特別是在分布式系統(tǒng)中,不同客戶端請(qǐng)求往往會(huì)被分到不同的數(shù)據(jù)源或者后 臺(tái)去做,這些客戶端請(qǐng)求之間本身不具備關(guān)聯(lián)性,但是如果都通過一個(gè)查詢組件去做的 話,就會(huì)使得他們相互影響,本方案將盡量減小他們之間不必要的耦合。第二步查詢組件代理接收到客戶端請(qǐng)求后,按照負(fù)載均衡的原則,選擇一個(gè) 查詢組件返回給客戶端;其中,負(fù)載均衡原則有很多種,如可以是在每次接收到客戶端獲取查詢組件 時(shí),都選擇一個(gè)當(dāng)前正在處理的客戶端請(qǐng)求個(gè)數(shù)最少的查詢組件返回給客戶端;或者可 以是根據(jù)客戶端請(qǐng)求的處理權(quán)重,將當(dāng)前處理權(quán)重最小的查詢組件返回給客戶端;權(quán)重是系統(tǒng)對(duì)客戶端請(qǐng)求的響應(yīng)性;如,數(shù)據(jù)量越大,對(duì)響應(yīng)性的影響越大; 因此,根據(jù)客戶端請(qǐng)求的處理權(quán)重選擇查詢組件時(shí),可以是根據(jù)當(dāng)前正在處理的客戶端 請(qǐng)求的計(jì)算量最小的查詢組件返回給客戶端,或者可以選擇當(dāng)前處理客戶端請(qǐng)求時(shí)CPU 耗時(shí)最少的查詢組件返回給客戶端等中的一種或多種;因此,當(dāng)客戶端請(qǐng)求負(fù)載情況為所述查詢組件上正在處理的客戶端請(qǐng)求的數(shù)量 時(shí),負(fù)載均衡原則為查詢組件上當(dāng)前正在處理的客戶端請(qǐng)求個(gè)數(shù)最少;或者,當(dāng)客戶端請(qǐng)求負(fù)載情況為查詢組件上的客戶端請(qǐng)求的處理權(quán)重時(shí),負(fù)載 均衡原則為查詢組件上當(dāng)前正在處理的客戶端請(qǐng)求的處理權(quán)重最小。圖3所示為查詢組件代理根據(jù)負(fù)載均衡原則獲取查詢組件的實(shí)施例,包括如下 步驟步驟301 查詢組件代理從哈希表QRYN中獲取所有查詢組件正在處理的客戶 端請(qǐng)求的個(gè)數(shù);步驟302 查詢組件代理獲取正在處理的客戶端請(qǐng)求的個(gè)數(shù)最小的查詢組件 號(hào),若是查詢請(qǐng)求個(gè)數(shù)最小的不止一個(gè),隨機(jī)抽取一個(gè);步驟303 根據(jù)獲取的查詢組件號(hào)從哈希表QRYS中找到對(duì)應(yīng)的查詢組件實(shí)例返 回給客戶端;第三步查詢組件更新查詢組件的客戶端請(qǐng)求負(fù)載情況;如客戶端請(qǐng)求負(fù)載情況為查詢組件正在處理的客戶端請(qǐng)求數(shù),具體可以是查 詢組件在處理客戶端請(qǐng)求前,查詢組件請(qǐng)求計(jì)數(shù)加一個(gè)單位計(jì)數(shù)值,如1,向客戶端返回 請(qǐng)求結(jié)果前,查詢組件正在處理的客戶端請(qǐng)求數(shù)計(jì)數(shù)減一個(gè)同樣的單位計(jì)數(shù)值;
如客戶端請(qǐng)求負(fù)載情況為客戶端請(qǐng)求的處理權(quán)重,查詢組件則計(jì)算當(dāng)前客戶端 請(qǐng)求的處理權(quán)重并更新。本發(fā)明由于能夠動(dòng)態(tài)地通過添加查詢組件來(lái)滿足系統(tǒng)的需求,使得系統(tǒng)的動(dòng)態(tài) 擴(kuò)展性好,這個(gè)方案本身也可推而廣之應(yīng)用到任何需要高可伸縮性的應(yīng)用,具體可以是 管理信息系統(tǒng)(Management Information System,MIS),信息查詢系統(tǒng),性能數(shù)據(jù)查詢系
統(tǒng),尤其是網(wǎng)管上的性能數(shù)據(jù)查詢系統(tǒng)等。相應(yīng)地,本實(shí)施例還給出基于上述數(shù)據(jù)查詢系統(tǒng)的數(shù)據(jù)查詢的方法,具體包括 如下步驟A、客戶端向查詢組件代理發(fā)送客戶端請(qǐng)求;B、查詢組件代理根據(jù)負(fù)載均衡的原則,選擇查詢組件,并將該查詢組件返回給 客戶端;C、查詢組件處理客戶端請(qǐng)求,并將處理結(jié)果返回給客戶端。 本發(fā)明的方案與傳統(tǒng)單一組件查詢,集中處理查詢請(qǐng)求的方案相比,每個(gè)查詢 組件都具有平等的處理能力,即查詢組件在邏輯上不再具有唯一性。查詢組件的選擇 交由查詢組件代理去做,使得組件具備高可伸縮性。當(dāng)查詢請(qǐng)求較多以至于現(xiàn)有的查詢 組件不能有效處理時(shí),能動(dòng)態(tài)地增加查詢組件,而新增的查詢組件可以部署在別的機(jī)器 上,達(dá)到通過添加硬件設(shè)備來(lái)提升響應(yīng)能力而又不影響正在處理的客戶端請(qǐng)求,極大地 提升可數(shù)據(jù)查詢系統(tǒng)的可用性。
權(quán)利要求
1.一種數(shù)據(jù)查詢系統(tǒng),包括客戶端,其特征在于,所述數(shù)據(jù)查詢系統(tǒng)還包括一個(gè)查 詢組件代理以及與該查詢組件代理連接的一個(gè)或多個(gè)查詢組件;其中,所述客戶端,用于向所述查詢組件代理發(fā)送客戶端請(qǐng)求;所述查詢組件代理,用于保存所述查詢組件的查詢組件號(hào)、查詢組件實(shí)例以及查 詢組件的負(fù)載情況,并根據(jù)查詢組件上報(bào)的所述查詢組件的客戶端請(qǐng)求負(fù)載情況進(jìn)行更 新;以及接收所述客戶端請(qǐng)求,并根據(jù)負(fù)載均衡的原則,選擇一個(gè)查詢組件返回給所述 客戶端;所述查詢組件,用于向查詢組件代理發(fā)送查詢組件號(hào)與查詢組件實(shí)例進(jìn)行注冊(cè),并 上報(bào)所述查詢組件的客戶端請(qǐng)求負(fù)載情況;以及處理所述客戶端請(qǐng)求并將處理結(jié)果返回 給所述客戶端。
2.如權(quán)利要求1所述的數(shù)據(jù)查詢系統(tǒng),其特征在于所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上正在處理的客戶端請(qǐng)求的數(shù)量,所述負(fù) 載均衡原則為所述查詢組件上當(dāng)前正在處理的客戶端請(qǐng)求個(gè)數(shù)最少;或者,所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上的客戶端請(qǐng)求的處理權(quán)重,所述 負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的所述客戶端請(qǐng)求的處理權(quán)重最小。
3.如權(quán)利要求1或2所述的數(shù)據(jù)查詢系統(tǒng),其特征在于,所述數(shù)據(jù)查詢系統(tǒng)進(jìn)一步包 括查詢組件號(hào)分配器和負(fù)載均衡控制器;其中,所述查詢組件號(hào)分配器,用于在所述查詢組件啟動(dòng)時(shí),給所述查詢組件分配一個(gè)唯 一的未被其他查詢組件占用的查詢組件號(hào);所述負(fù)載均衡控制器,用于在所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行過程中,根據(jù)數(shù)據(jù)查詢系統(tǒng)運(yùn) 行指標(biāo)或根據(jù)接收到的用戶的控制命令,向所述查詢組件發(fā)送啟動(dòng)指令,指示所述查詢 組件啟動(dòng);其中,負(fù)載均衡控制器根據(jù)接收到的用戶的控制命令向查詢組件發(fā)送啟動(dòng)指令,或 者負(fù)載均衡控制器根據(jù)所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)設(shè)置啟動(dòng)閾值,并監(jiān)測(cè)所述數(shù)據(jù)查詢 系統(tǒng)的運(yùn)行狀況,如果數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)達(dá)到所述啟動(dòng)閾值,則向所述查詢組件發(fā) 送啟動(dòng)指令。
4.如權(quán)利要求3所述的數(shù)據(jù)查詢系統(tǒng),其特征在于所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)為數(shù)據(jù)查詢系統(tǒng)的使用規(guī)模,客戶端請(qǐng)求的響應(yīng)性,客 戶端請(qǐng)求的數(shù)目,系統(tǒng)支持的客戶請(qǐng)求的計(jì)算量,請(qǐng)求在處理時(shí)CPU的耗時(shí)以及占用資 源中的一種或多種。
5.—種如權(quán)利要求1所述的數(shù)據(jù)查詢系統(tǒng)的構(gòu)建方法,其特征在于,所述構(gòu)建方法具 體包括如下步驟啟動(dòng)一個(gè)查詢組件代理以及啟動(dòng)一個(gè)或多個(gè)查詢組件,所述查詢組件啟動(dòng)后向所述 查詢組件代理發(fā)送查詢組件號(hào)與查詢組件實(shí)例進(jìn)行注冊(cè),并上報(bào)所述查詢組件的客戶端 請(qǐng)求負(fù)載情況,所述查詢組件代理保存所述查詢組件號(hào)、查詢組件實(shí)例以及所述查詢組 件的客戶端請(qǐng)求負(fù)載情況的映射關(guān)系,并根據(jù)所述查詢組件上報(bào)的客戶端請(qǐng)求負(fù)載情況 更新保存的所述客戶端請(qǐng)求負(fù)載情況;所述查詢組件代理接收到客戶端請(qǐng)求后,按照負(fù)載均衡的原則,選擇一個(gè)查詢組件 返回給客戶端,所述查詢組件更新所述查詢組件的客戶端請(qǐng)求負(fù)載情況。
6.如權(quán)利要求5所述的構(gòu)建方法,其特征在于所述啟動(dòng)一個(gè)或多個(gè)查詢組件,在所述數(shù)據(jù)查詢系統(tǒng)開始運(yùn)行時(shí)同時(shí)啟動(dòng)所有查詢 組件?;蛘?,所述數(shù)據(jù)查詢系統(tǒng)還包括一個(gè)負(fù)載均衡控制器;所述啟動(dòng)一個(gè)或多個(gè)查詢組 件,是在所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行過程中,所述負(fù)載均衡控制器根據(jù)數(shù)據(jù)查詢系統(tǒng)運(yùn)行指 標(biāo)或根據(jù)接收到的用戶的控制命令,向所述查詢組件發(fā)送啟動(dòng)指令,指示所述查詢組件 啟動(dòng);其中,負(fù)載均衡控制器是根據(jù)接收到的用戶的控制命令向查詢組件發(fā)送啟動(dòng)指令, 或者負(fù)載均衡控制器根據(jù)所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)設(shè)置啟動(dòng)閾值,并監(jiān)測(cè)所述數(shù)據(jù)查 詢系統(tǒng)的運(yùn)行狀況,如果數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)達(dá)到所述啟動(dòng)閾值,則向所述查詢組件 發(fā)送啟動(dòng)指令;所述數(shù)據(jù)查詢系統(tǒng)運(yùn)行指標(biāo)為數(shù)據(jù)查詢系統(tǒng)的使用規(guī)模,客戶端請(qǐng)求的響應(yīng)性,客 戶端請(qǐng)求的數(shù)目,系統(tǒng)支持的客戶請(qǐng)求的計(jì)算量,請(qǐng)求在處理時(shí)CPU的耗時(shí)以及占用資 源中的一種或多種。
7.如權(quán)利要求5或6所述的構(gòu)建方法,其特征在于,所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上正在處理的客戶端請(qǐng)求的數(shù)量,所述負(fù) 載均衡原則為所述查詢組件上當(dāng)前正在處理的客戶端請(qǐng)求個(gè)數(shù)最少;或者,所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上的客戶端請(qǐng)求的處理權(quán)重,所述 負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的所述客戶端請(qǐng)求的處理權(quán)重最小。
8.如權(quán)利要求5或6所述的構(gòu)建方法,其特征在于,所述查詢組件代理保存所述查詢組件號(hào)、查詢組件實(shí)例以及所述查詢組件的客戶端 請(qǐng)求負(fù)載情況的映射關(guān)系,并根據(jù)所述查詢組件上報(bào)的客戶端請(qǐng)求負(fù)載情況更新保存的 客戶端請(qǐng)求負(fù)載情況,具體包括如下步驟所述查詢組件代理初始化兩個(gè)哈希表,第一哈希表用來(lái)保存所述查詢組件號(hào)和所述 查詢組件實(shí)例的映射關(guān)系,第二哈希表用來(lái)保存所述查詢組件號(hào)和所述查詢組件上客戶 端請(qǐng)求負(fù)載情況的映射關(guān)系;所述查詢組件代理接受查詢組件的注冊(cè)后,將所述查詢組件號(hào)和查詢組件實(shí)例的映 射關(guān)系保存在所述第一哈希表中;所述查詢組件代理接受所述查詢組件的周期心跳聯(lián)系,并定期更新所述第二哈希表 中查詢組件上客戶端請(qǐng)求負(fù)載情況。
9.如權(quán)利要求7所述的構(gòu)建方法,其特征在于所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上正在處理的客戶端請(qǐng)求的數(shù)量,所述查 詢組件更新所述客戶端請(qǐng)求負(fù)載情況具體為所述查詢組件在處理所述客戶端請(qǐng)求前,所述查詢組件正在處理的客戶端請(qǐng)求數(shù)計(jì) 數(shù)加一個(gè)計(jì)數(shù)單位值;所述查詢組件向客戶端返回請(qǐng)求結(jié)果前,所述查詢組件正在處理的客戶端請(qǐng)求數(shù)減 所述計(jì)數(shù)單位值。
10.如權(quán)利要求5或6所述的構(gòu)建方法,其特征在于,所述查詢組件向所述查詢組件 代理發(fā)送查詢組件號(hào)與查詢組件實(shí)例進(jìn)行注冊(cè),并上報(bào)所述查詢組件的客戶端請(qǐng)求負(fù)載情況,具體包括如下步驟A、所述查詢組件啟動(dòng)一定時(shí)器;B、定時(shí)時(shí)間到,所述查詢組件判斷向所述查詢組件代理注冊(cè)是否成功,如果不成 功,執(zhí)行步驟C;如果成功,判斷上一次向所述查詢組件代理心跳發(fā)送所述客戶端請(qǐng)求 負(fù)載情況是否成功;如果成功,執(zhí)行步驟D,否則執(zhí)行步驟C;C、所述查詢組件向所述查詢組件代理注冊(cè),返回步驟B;D、所述查詢組件向所述查詢組件代理發(fā)送所述客戶端請(qǐng)求負(fù)載情況,返回步驟B。
11. 一種數(shù)據(jù)查詢方法,包括如下步驟客戶端向查詢組件代理發(fā)送客戶端請(qǐng)求;所述查詢組件代理根據(jù)負(fù)載均衡的原則,選擇查詢組件,并將該查詢組件返回給所 述客戶端;所述查詢組件處理所述客戶端請(qǐng)求,并將處理結(jié)果返回給所述客戶端; 其中,所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上正在處理的客戶端請(qǐng)求的數(shù)量, 所述負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的客戶端請(qǐng)求個(gè)數(shù)最少;或者,所述客戶端請(qǐng)求負(fù)載情況為所述查詢組件上的客戶端請(qǐng)求的處理權(quán)重,所述 負(fù)載均衡原則為所述查詢組件上當(dāng)前正在處理的所述客戶端請(qǐng)求的處理權(quán)重最小。
全文摘要
一種數(shù)據(jù)查詢系統(tǒng),包括客戶端,查詢組件代理以及與該查詢組件代理連接的一個(gè)或多個(gè)查詢組件;客戶端用于向查詢組件代理發(fā)送客戶端請(qǐng)求;查詢組件代理用于保存查詢組件的查詢組件號(hào)、查詢組件實(shí)例以及查詢組件的負(fù)載情況,并根據(jù)查詢組件上報(bào)的所述查詢組件的客戶端請(qǐng)求負(fù)載情況進(jìn)行更新;以及接收客戶端請(qǐng)求,并根據(jù)負(fù)載均衡的原則,選擇一個(gè)查詢組件返回給所述客戶端;查詢組件用于向查詢組件代理發(fā)送查詢組件號(hào)與查詢組件實(shí)例進(jìn)行注冊(cè),并上報(bào)所述查詢組件的客戶端請(qǐng)求負(fù)載情況;以及處理所述客戶端請(qǐng)求并將處理結(jié)果返回給所述客戶端。相應(yīng)地,還提供該數(shù)據(jù)查詢系統(tǒng)的構(gòu)建方法以及數(shù)據(jù)查詢方法。本發(fā)明保證了數(shù)據(jù)查詢系統(tǒng)的高可用性。
文檔編號(hào)G06F17/30GK102023997SQ20091017810
公開日2011年4月20日 申請(qǐng)日期2009年9月23日 優(yōu)先權(quán)日2009年9月23日
發(fā)明者孫鳴 申請(qǐng)人:中興通訊股份有限公司