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