本發(fā)明涉及數(shù)據(jù)庫領域,更具體的說,涉及一種時序數(shù)據(jù)庫的集群化方法及系統(tǒng)。
背景技術:
隨著云計算大數(shù)據(jù)的不斷發(fā)展,用戶對數(shù)據(jù)的高可用、資源彈性擴容、規(guī)??蔁o限擴展等需求越來越強烈。另一方面,目前數(shù)據(jù)庫領域的大多數(shù)產(chǎn)品,如mysql、influxdb等,其單機版本在生產(chǎn)環(huán)境中已經(jīng)經(jīng)受過檢驗,表現(xiàn)出了良好的穩(wěn)定性,但是卻一直沒有很好的集群化版本或方案,導致使用規(guī)模往往被限制在單臺機器的負載能力上,無法很好的擴展。
提高現(xiàn)有數(shù)據(jù)庫的橫向擴展能力,使其擁有高可用、無限擴展、彈性擴容、自動容災等能力,是亟待解決的問題。而解決這些問題的一個基本方法,就是將單機實例集群化。集群化就是將多個單機實例通過一定的組織方式聯(lián)合起來,使多個實例可以協(xié)作完成用戶的請求,從而提供用戶更高的擴展性和負載。但是在解決集群化過程中還會遇到數(shù)據(jù)容災等問題。
技術實現(xiàn)要素:
本發(fā)明所要解決的技術問題是提供一種提供數(shù)據(jù)容災的時序數(shù)據(jù)庫的集群化方法及系統(tǒng)。
本發(fā)明的目的是通過以下技術方案來實現(xiàn)的:
一種時序數(shù)據(jù)庫的集群化方法,包括步驟:
將多個時序數(shù)據(jù)庫構建為一個組;
一個組負責一個時間段的數(shù)據(jù)寫入與查詢請求;
一個組或多個組連接起來構成一個鏈;
以鏈為單元處理數(shù)據(jù)寫入與查詢請求;
將所有的鏈統(tǒng)一管理;
根據(jù)時序數(shù)據(jù)庫狀態(tài)將一個新的組加入到鏈中,并將寫入請求切換到新的組上。
進一步的,根據(jù)資源使用情況將鏈設置為共享或獨占。彈性擴容,用戶可以根據(jù)實際需求,選擇與他人共享資源或者獨占資源。
進一步的,將多個時序數(shù)據(jù)庫構建為一個組包括:
同組的多個時序數(shù)據(jù)庫實例部署在不同的服務器上、同組的實例網(wǎng)絡訪問速度相當、同組的實例磁盤存儲空間相當、同組的時序數(shù)據(jù)庫實例各自保存一份完整的用戶數(shù)據(jù)和一個時序數(shù)據(jù)庫實例僅被一個組選中中的至少一項。
有利于數(shù)據(jù)的安全和調(diào)用,有利于資源的合理分配和充分應用,提高整體的反應速度。
進一步的,一個組負責一個時間段的數(shù)據(jù)寫入與查詢請求包括:
組有一個時間范圍、組根據(jù)寫入的數(shù)據(jù)點和/或時間戳接收寫入、同組的所有實例都寫入數(shù)據(jù)、查詢數(shù)據(jù)的范圍會被縮小至該組的范圍之內(nèi)和通過查詢同組的任意實例實現(xiàn)查詢數(shù)據(jù)中的至少一項。
可以更方便的管理數(shù)據(jù),查找更方便。查詢的范圍會被縮小至該組的范圍之內(nèi),其中即查詢的起始時間和組的起始時間相比取一個更晚的時間,而查詢范圍的結束時間和組的結束時間相比,取一個更早的時間;
進一步的,一個組或多個組連接起來構成一個鏈包括:
同一個鏈中的組按時間順序前后緊密銜接,前一個組的結束時間與其后的組的起始時間相同;
根據(jù)組的磁盤用量進行組切換動作;
鏈中的任意兩個組彼此之間互相獨立。
鏈中的兩個連接的組按時間連接更緊密,任意兩個組彼此之間互相獨立,方便數(shù)據(jù)查找和寫入。
進一步的,組切換動作包括:
鏈中加入一個新的組,以切換時的當前時間為界,決定上一個組的結束時間以及新的組的開始時間。
切換以時間為界更加安全準確。
進一步的,根據(jù)時序數(shù)據(jù)庫狀態(tài)將一個新的組加入到鏈中,并將寫入請求切換到新的組上包括:
選擇一個新的組,且該組當前狀態(tài)沒有被任何鏈引用;
將鏈中最后一個組的結束時間與鏈中將要加入的新組的開始時間設置為相同;
將請求根據(jù)時間戳導向新的組。
進一步的,以鏈為單元處理用戶的數(shù)據(jù)寫入與查詢請求包括:
根據(jù)寫入數(shù)據(jù)請求的時間戳寫入鏈中對應時間范圍的組;
根據(jù)查詢請求的查詢的時間范圍,從涉及到的組中查詢數(shù)據(jù)并歸并后返回。
寫入和查詢更加方便快捷,數(shù)據(jù)更加安全。
進一步的,將所有的鏈統(tǒng)一管理包括:
多個用戶使用多個的鏈或共享同一個鏈;
一個用戶有一個或多個鏈;
任意兩個鏈之間彼此隔離。
進一步的,根據(jù)資源使用情況將鏈設置為共享或獨占包括:
根據(jù)資源使用情況將鏈從共享切換成獨占;或根據(jù)資源使用情況將鏈從獨占切換成共享。
本發(fā)明的另一優(yōu)選方案,一種時序數(shù)據(jù)庫集群化系統(tǒng),包括:
信息收集模塊,用于收集不同機器上的時序數(shù)據(jù)庫實例信息;
組調(diào)度模塊,用于將不同的時序數(shù)據(jù)庫實例組合成多個組,將組與組鏈接形成鏈,并分配資源,記錄時序數(shù)據(jù)庫實例的狀態(tài);
元數(shù)據(jù)管理模塊,用于記錄用戶數(shù)據(jù)與時序數(shù)據(jù)庫鏈的對應關系;
用戶請求處理模塊,用于通過查看元數(shù)據(jù)管理模塊,獲取用戶數(shù)據(jù)與時序數(shù)據(jù)庫對應關系,并到對應組寫入或查詢數(shù)據(jù);
添加模塊,用于為鏈添加新組,并進行組切換。
進一步的,組調(diào)度模塊包括:
組成模塊,用于從不同服務器上選取網(wǎng)絡傳輸速率相當、磁盤剩余空間相當?shù)?、且沒有被其他組引用的時序數(shù)據(jù)庫實例組成一個組;
檢測模塊,用于檢測實例狀態(tài),當組中某個實例出現(xiàn)故障時,處理用戶請求時排除該實例,當某個組所有實例均不可用時進行組切換;
鏈分裂模塊,用于將原有的鏈分裂為兩條或多條鏈,其中包括獨占一條或多條鏈資源的新鏈和原有的舊鏈;
鏈合并模塊,用于將多條鏈合并為一條鏈。
進一步的,元數(shù)據(jù)管理模塊包括:
定位模塊,用于定位訪問對應的具體時序數(shù)據(jù)庫實例;
更新模塊,用于資源改變時更新元數(shù)據(jù)。
進一步的,用戶請求處理模塊包括:
寫入請求模塊,用于響應寫入請求,根據(jù)元數(shù)據(jù)管理模塊查找到對應的鏈,并根據(jù)時間戳寫入到對應鏈的對應組,寫入對應鏈的所有實例后發(fā)送成功信息;
查詢請求模塊,用于響應查詢請求,根據(jù)元數(shù)據(jù)管理模塊查找到對應的鏈,根據(jù)查詢的范圍找到涉及的組,將查詢范圍縮小至各個組的范圍,再去各個組分別執(zhí)行查詢,并將結果匯總發(fā)送完整的查詢結果。
本發(fā)明由于根據(jù)時序數(shù)據(jù)庫狀態(tài)將一個新的組加入到鏈中,并將寫入請求切換到新的組上,當實際進行負載的組出現(xiàn)故障時,系統(tǒng)可以自動切換到新的組,實現(xiàn)自動容災,當用戶的磁盤用量快滿時,可以通過切換組的方式,將用戶的請求導入到別的組,從而使磁盤用量沒有上限,無限擴展,多個時序數(shù)據(jù)庫構建為一個組,當集群中一個時序數(shù)據(jù)庫實例出現(xiàn)故障時,并不會影響用戶的使用,可用由其他實例來承擔負載。
附圖說明
圖1是本發(fā)明實施例的一種時序數(shù)據(jù)庫的集群化方法示意圖;
圖2是本發(fā)明實施例的組切換流程圖;
圖3是本發(fā)明實施例的鏈分裂前示意圖;
圖4是本發(fā)明實施例的鏈分裂示意圖;
圖5是本發(fā)明實施例的數(shù)據(jù)流示意圖。
具體實施方式
在更加詳細地討論示例性實施例之前應當提到的是,一些示例性實施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項操作描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時實施。此外,各項操作的順序可以被重新安排。當其操作完成時所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應于方法、函數(shù)、規(guī)程、子例程、子程序等等。
在上下文中所稱“計算機設備”,也稱為“電腦”,是指可以通過運行預定程序或指令來執(zhí)行數(shù)值計算和/或邏輯計算等預定處理過程的智能電子設備,其可以包括處理器與存儲器,由處理器執(zhí)行在存儲器中預存的存續(xù)指令來執(zhí)行預定處理過程,或是由ASIC、FPGA、DSP等硬件執(zhí)行預定處理過程,或是由上述二者組合來實現(xiàn)。計算機設備包括但不限于服務器、個人電腦、筆記本電腦、平板電腦、智能手機等。
所述計算機設備包括用戶設備與網(wǎng)絡設備。其中,所述用戶設備或客戶端包括但不限于電腦、智能手機、PDA等;所述網(wǎng)絡設備包括但不限于單個網(wǎng)絡服務器、多個網(wǎng)絡服務器組成的服務器組或基于云計算(Cloud Computing)的由大量計算機或網(wǎng)絡服務器構成的云,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個超級虛擬計算機。其中,所述計算機設備可單獨運行來實現(xiàn)本發(fā)明,也可接入網(wǎng)絡并通過與網(wǎng)絡中的其他計算機設備的交互操作來實現(xiàn)本發(fā)明。其中,所述計算機設備所處的網(wǎng)絡包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、VPN網(wǎng)絡等
需要說明的是,所述用戶設備、客戶端、網(wǎng)絡設備和網(wǎng)絡等僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計算機設備或網(wǎng)絡如可適用于本發(fā)明,也應包含在本發(fā)明保護范圍以內(nèi),并以引用方式包含于此。
后面所討論的方法(其中一些通過流程圖示出)可以通過硬件、軟件、固件、中間件、微代碼、硬件描述語言或者其任意組合來實施。當用軟件、固件、中間件或微代碼來實施時,用以實施必要任務的程序代碼或代碼段可以被存儲在機器或計算機可讀介質(zhì)(比如存儲介質(zhì))中。(一個或多個)處理器可以實施必要的任務。
這里所公開的具體結構和功能細節(jié)僅僅是代表性的,并且是用于描述本發(fā)明的示例性實施例的目的。但是本發(fā)明可以通過許多替換形式來具體實現(xiàn),并且不應當被解釋成僅僅受限于這里所闡述的實施例。
應當理解的是,雖然在這里可能使用了術語“第一”、“第二”等等來描述各個單元,但是這些單元不應當受這些術語限制。使用這些術語僅僅是為了將一個單元與另一個單元進行區(qū)分。舉例來說,在不背離示例性實施例的范圍的情況下,第一單元可以被稱為第二單元,并且類似地第二單元可以被稱為第一單元。這里所使用的術語“和/或”包括其中一個或更多所列出的相關聯(lián)項目的任意和所有組合。
應當理解的是,當一個單元被稱為“連接”或“耦合”到另一單元時,其可以直接連接或耦合到所述另一單元,或者可以存在中間單元。與此相對,當一個單元被稱為“直接連接”或“直接耦合”到另一單元時,則不存在中間單元。應當按照類似的方式來解釋被用于描述單元之間的關系的其他詞語(例如“處于...之間”相比于“直接處于...之間”,“與...鄰近”相比于“與...直接鄰近”等等)。
這里所使用的術語僅僅是為了描述具體實施例而不意圖限制示例性實施例。除非上下文明確地另有所指,否則這里所使用的單數(shù)形式“一個”、“一項”還意圖包括復數(shù)。還應當理解的是,這里所使用的術語“包括”和/或“包含”規(guī)定所陳述的特征、整數(shù)、步驟、操作、單元和/或組件的存在,而不排除存在或添加一個或更多其他特征、整數(shù)、步驟、操作、單元、組件和/或其組合。
還應當提到的是,在一些替換實現(xiàn)方式中,所提到的功能/動作可以按照不同于附圖中標示的順序發(fā)生。舉例來說,取決于所涉及的功能/動作,相繼示出的兩幅圖實際上可以基本上同時執(zhí)行或者有時可以按照相反的順序來執(zhí)行。
下面結合附圖和較佳的實施例對本發(fā)明作進一步說明。
如圖1所示,一種時序數(shù)據(jù)庫的集群化方法,包括步驟:
S1:將多個時序數(shù)據(jù)庫構建為一個組;
S2:一個組負責一個時間段的數(shù)據(jù)寫入與查詢請求;
S3:一個組或多個組連接起來構成一個鏈;
S4:以鏈為單元處理數(shù)據(jù)寫入與查詢請求;
S5:將所有的鏈統(tǒng)一管理;
S6:根據(jù)時序數(shù)據(jù)庫狀態(tài)將一個新的組加入到鏈中,并將寫入請求切換到新的組上。
由于根據(jù)時序數(shù)據(jù)庫狀態(tài)將一個新的組加入到鏈中,并將寫入請求切換到新的組上,當實際進行負載的組出現(xiàn)故障時,系統(tǒng)可以自動切換到新的組,實現(xiàn)自動容災,當用戶的磁盤用量快滿時,可以通過切換組的方式,將用戶的請求導入到別的組,從而使磁盤用量沒有上限,無限擴展,多個時序數(shù)據(jù)庫構建為一個組,當集群中一個時序數(shù)據(jù)庫實例出現(xiàn)故障時,并不會影響用戶的使用,可用由其他實例來承擔負載。
其中,根據(jù)資源使用情況將鏈設置為共享或獨占。彈性擴容,用戶可以根據(jù)實際需求,選擇與他人共享資源或者獨占資源。
其中,將多個時序數(shù)據(jù)庫構建為一個組包括:
同組的多個時序數(shù)據(jù)庫實例部署在不同的服務器上、同組的實例網(wǎng)絡訪問速度相當、同組的實例磁盤存儲空間相當、同組的時序數(shù)據(jù)庫實例各自保存一份完整的用戶數(shù)據(jù)和一個時序數(shù)據(jù)庫實例僅被一個組選中中的至少一項。有利于數(shù)據(jù)的安全和調(diào)用,有利于資源的合理分配和充分應用,提高整體的反應速度。將多個時序數(shù)據(jù)庫構建為一個組,構建時保證:將同組的多個時序數(shù)據(jù)庫實例部署在不同的服務器上;為同組的實例選擇網(wǎng)絡訪問速度相當?shù)膶嵗龢嫿橥粋€組;為同組的實例選擇磁盤存儲空間相當?shù)膶嵗龢嫿橥粋€組;同組的時序數(shù)據(jù)庫實例各自保存一份完整的用戶數(shù)據(jù);被選中的時序數(shù)據(jù)庫實例不能再被別的組選中。
其中,一個組負責一個時間段的數(shù)據(jù)寫入與查詢請求包括:
組有一個時間范圍、組根據(jù)寫入的數(shù)據(jù)點和/或時間戳接收寫入、同組的所有實例都寫入數(shù)據(jù)、查詢數(shù)據(jù)的范圍會被縮小至該組的范圍之內(nèi)和通過查詢同組的任意實例實現(xiàn)查詢數(shù)據(jù)中的至少一項。
可以更方便的管理數(shù)據(jù),查找更方便。構建的每個組負責一個特定時間段的數(shù)據(jù)寫入與查詢請求:每個組都有一個時間范圍,通過起始時間和結束時間來約束;當用戶寫入的數(shù)據(jù)點,時間戳屬于該組的時間范圍才接受,否則拒絕寫入;當用戶寫入數(shù)據(jù)時,同組的所有實例都寫入成功才算該組寫入成功;當用戶查詢數(shù)據(jù)時,查詢的范圍會被縮小至該組的范圍之內(nèi),即查詢的起始時間和組的起始時間相比取一個更晚的時間,而查詢范圍的結束時間和組的結束時間相比,取一個更早的時間;當用戶查詢到同組的任意實例時,一旦查詢一個實例成功,便認為成功。
其中,一個組或多個組連接起來構成一個鏈包括:
同一個鏈中的組按時間順序前后緊密銜接,前一個組的結束時間與其后的組的起始時間相同;
根據(jù)組的磁盤用量進行組切換動作;
鏈中的任意兩個組彼此之間互相獨立。
鏈中的兩個連接的組按時間連接更緊密,任意兩個組彼此之間互相獨立,方便數(shù)據(jù)查找和寫入。
其中,組切換動作包括:
鏈中加入一個新的組,以切換時的當前時間為界,決定上一個組的結束時間以及新的組的開始時間。
切換以時間為界更加安全準確。將實例組與組之間根據(jù)時間順序進行銜接,多個組連接起來構成一個鏈:同一個鏈中的組按時間順序前后緊密銜接,前一個組的結束時間與其后的組的起始時間相同;當一個組的磁盤用量快要耗盡時,可以進行組切換動作,此時鏈中會多加入一個組,以切換時的當前時間為界,決定上一個組的結束時間以及新的組的開始時間;鏈中的所有組,彼此之間互相獨立,互不影響,資源隔離。
其中,根據(jù)時序數(shù)據(jù)庫狀態(tài)將一個新的組加入到鏈中,并將寫入請求切換到新的組上包括:
選擇一個新的組,且該組當前狀態(tài)沒有被任何鏈引用;
將鏈中最后一個組的結束時間與鏈中將要加入的新組的開始時間設置為相同;
將請求根據(jù)時間戳導向新的組。
其中,以鏈為單元處理用戶的數(shù)據(jù)寫入與查詢請求包括:
根據(jù)寫入數(shù)據(jù)請求的時間戳寫入鏈中對應時間范圍的組;
根據(jù)查詢請求的查詢的時間范圍,從涉及到的組中查詢數(shù)據(jù)并歸并后返回。
寫入和查詢更加方便快捷,數(shù)據(jù)更加安全。以鏈為單元處理用戶的數(shù)據(jù)寫入與查詢請求:用戶寫入數(shù)據(jù)的請求,根據(jù)時間戳寫入鏈中對應時間范圍的組;用戶的查詢請求,根據(jù)查詢的時間范圍,從涉及到的組中查詢數(shù)據(jù)并歸并后返回給用戶。
其中,將所有的鏈統(tǒng)一管理包括:
多個用戶使用多個的鏈或共享同一個鏈;
一個用戶有一個或多個鏈;
任意兩個鏈之間彼此隔離。
其中,根據(jù)資源使用情況將鏈設置為共享或獨占包括:
根據(jù)資源使用情況將鏈從共享切換成獨占;或根據(jù)資源使用情況將鏈從獨占切換成共享。
將所有的鏈統(tǒng)一管理起來為用戶分配資源:用戶可以在資源不足或為了故障恢復,快速將一個新的實例組加入到鏈中,并將所有寫入請求切換到新的組上;根據(jù)資源使用情況,用戶之間可以共享同一個鏈,也可以獨占一個鏈。
本實施例的一種時序數(shù)據(jù)庫的集群化方法提高時序數(shù)據(jù)庫的高可用能力,提高數(shù)據(jù)庫的橫向擴展能力,擁有高可用、無限擴展、彈性擴容、自動容災等能力。將多個單機實例通過一定的組織方式聯(lián)合起來,使多個實例可以協(xié)作完成用戶的請求,從而提供用戶更高的擴展性和負載。
本實施例的有益效果:
高可用:當集群中一個時序數(shù)據(jù)庫實例出現(xiàn)故障時,并不會影響用戶的使用,可用由其他實例來承擔負載;
無限擴展:當用戶的磁盤用量快滿時,可以通過切換組的方式,將用戶的請求導入到別的組,從而使磁盤用量沒有上限;
彈性擴容:用戶可以根據(jù)實際需求,選擇與他人共享資源或者獨占資源,并可以自由選擇修改共享與獨占;
自動容災:當實際進行負載的組出現(xiàn)故障時,系統(tǒng)可以自動切換到新的組,實現(xiàn)自動容災。
具體的,以influxdb作為被集群化的時序數(shù)據(jù)庫實例作為依據(jù),一個具體但非限制性的實施方案,可以分為如下幾個步驟:
首先需要將多個influxdb部署在多個不同的服務器上,然后在每個機器安裝一個代理服務,獲取不同服務器上influxdb的IP、端口、磁盤剩余空間、網(wǎng)絡訪問延遲等信息,上報給組調(diào)度模塊并記錄。
調(diào)度模塊獲得上報信息后,將磁盤用量、網(wǎng)絡寫入延遲數(shù)值上最相近、并且擁有不同IP的幾個構建為一個組,用戶寫入的數(shù)據(jù),同組的每個實例都保存完整的一份。
當用戶需要使用時序數(shù)據(jù)庫服務時,為用戶分配一個資源空閑的鏈,當鏈不存在時,創(chuàng)建一個時序數(shù)據(jù)庫鏈,并選擇一個空閑的組加入鏈中,鏈的初始狀態(tài)只有一個組,當然也可以初始狀態(tài)有多個組。
元數(shù)據(jù)管理模塊在分配完畢后,記錄下用戶創(chuàng)建的資源所在的鏈。
當用戶有寫入請求時,請求處理模塊從元數(shù)據(jù)管理模塊獲取用戶資源對應的鏈信息,按照數(shù)據(jù)時間戳寫入對應組,寫入成功后返回給用戶。
當用戶有查詢請求時,請求處理模塊從元數(shù)據(jù)管理模塊獲取用戶資源所在的鏈,根據(jù)用戶查詢的條件,將查詢語句分解到各個組去查詢,對于每一個組,縮小查詢范圍至該組的時間范圍,隨機查詢一個實例獲取查詢結果;當請求處理模塊獲取鏈中所有涉及到的組的查詢結果以后,根據(jù)用戶的查詢語句,進行歸并,以查詢最大值為例,則在所有返回結果中找一個最大值,再返回給用戶。
當用戶數(shù)據(jù)寫入使得磁盤快要存滿時,或者當influxdb實例組出現(xiàn)故障時,可以通過組調(diào)度模塊進行組切換操作,此時的步驟如圖2所示,開始切換時,首先找到空閑的組,將新組加入到鏈中,這一步要將鏈中最后的組結束時間設置為空閑組的開始時間,然后修改元數(shù)據(jù)表,此時當用戶再有請求時,查詢元數(shù)據(jù)表,新的時間戳即對應新的組,切換完成。
當用戶需要從共享狀態(tài)變?yōu)楠毾頎顟B(tài)時,可以通過調(diào)度模塊進行鏈分裂操作,此時的步驟如圖3、圖4所示,分裂前是一個組構成的鏈,其中有兩個用戶的資源,他們是共享的,分別為user1和user2,分裂后,user1獨占了一組新的資源,user1的鏈構成是實例組1和實例組3,而user2是原來的共享用戶,他的鏈變?yōu)榱藢嵗M1合實例組2,其中實例組1合實例組2使用的influxdb是一樣的,但是邏輯上組已經(jīng)切換了。所以分裂組實際上是一個組切換的過程,只是原來的鏈切換后對應的influxdb實例依舊是原來的。切換過后,實例組3可以設定其所在的鏈不允許再分配給其他用戶使用,這樣就保證了實例組3的獨占。
當用戶需要從獨占變?yōu)楣蚕頃r,只要重新設定實例組3可以被分配給其他用戶使用即可。
經(jīng)過鏈切換后,舊有的數(shù)據(jù)實際依舊在原來的influxdb實例中,不影響用戶使用,也不會出現(xiàn)大規(guī)模數(shù)據(jù)的遷移。
整個架構實施完畢后,如圖5所示,當用戶請求到達時,首先發(fā)送到用戶請求處理模塊,然后去元數(shù)據(jù)管理模塊獲得用戶元數(shù)據(jù)對應關系,再從組調(diào)度模塊獲得涉及的鏈和在用戶請求范圍內(nèi)的實例組,最終在實例組獲得查詢結果后一一返回,在用戶請求處理模塊進行結果的歸并后反饋給用戶。
本發(fā)明的另一優(yōu)選實施例,一種時序數(shù)據(jù)庫集群化系統(tǒng),包括:
信息收集模塊,用于收集不同機器上的時序數(shù)據(jù)庫實例信息;用于收集不同機器上的時序數(shù)據(jù)庫實例信息,收集的信息包括但不限于服務器上時序數(shù)據(jù)庫實例的IP、端口、磁盤剩余空間、網(wǎng)絡訪問延遲等信息,并定時發(fā)送更新信息上報給集群化系統(tǒng)。
組調(diào)度模塊,用于將不同的時序數(shù)據(jù)庫實例組合成多個組,將組與組鏈接形成鏈,并為用戶分配資源,記錄時序數(shù)據(jù)庫實例的狀態(tài);
元數(shù)據(jù)管理模塊,用于記錄用戶數(shù)據(jù)與時序數(shù)據(jù)庫鏈的對應關系;
用戶請求處理模塊,用于通過查看元數(shù)據(jù)管理模塊,獲取用戶數(shù)據(jù)與時序數(shù)據(jù)庫對應關系,并到對應組寫入或查詢數(shù)據(jù);
添加模塊,用于為鏈添加新組,并進行組切換。
其中,組調(diào)度模塊包括:
組成模塊,用于從不同服務器上選取網(wǎng)絡傳輸速率相當、磁盤剩余空間相當?shù)?、且沒有被其他組引用的時序數(shù)據(jù)庫實例組成一個組;
檢測模塊,用于檢測實例狀態(tài),當組中某個實例出現(xiàn)故障時,處理用戶請求時排除該實例,當某個組所有實例均不可用時進行組切換;
鏈分裂模塊,用于將原有的鏈分裂為兩條或多條鏈,其中包括獨占一條或多條鏈資源的新鏈和原有的舊鏈;
鏈合并模塊,用于將多條鏈合并為一條鏈。
其中,元數(shù)據(jù)管理模塊包括:
定位模塊,用于定位訪問對應的具體時序數(shù)據(jù)庫實例;
更新模塊,用于資源改變時更新元數(shù)據(jù)。
其中,用戶請求處理模塊包括:
寫入請求模塊,用于響應寫入請求,根據(jù)元數(shù)據(jù)管理模塊查找到對應的鏈,并根據(jù)時間戳寫入到對應鏈的對應組,寫入對應鏈的所有實例后發(fā)送成功信息;
查詢請求模塊,用于響應查詢請求,根據(jù)元數(shù)據(jù)管理模塊查找到對應的鏈,根據(jù)查詢的范圍找到涉及的組,將查詢范圍縮小至各個組的范圍,再去各個組分別執(zhí)行查詢,并將結果匯總發(fā)送完整的查詢結果。
本發(fā)明的再一優(yōu)選實施例,一種時序數(shù)據(jù)庫集群化系統(tǒng),包括:
信息收集模塊,用于收集不同機器上的時序數(shù)據(jù)庫實例信息;
組調(diào)度模塊,用于將不同的時序數(shù)據(jù)庫實例組合成多個組,將組與組鏈接形成鏈,并為用戶分配資源,記錄時序數(shù)據(jù)庫實例的狀態(tài);
元數(shù)據(jù)管理模塊,用于記錄用戶數(shù)據(jù)與時序數(shù)據(jù)庫鏈的對應關系;對于用戶的訪問,定位其對應的具體時序數(shù)據(jù)庫實例;
用戶請求處理模塊,通過查看元數(shù)據(jù)管理模塊,獲取用戶數(shù)據(jù)與時序數(shù)據(jù)庫對應關系,并到對應組寫入或查詢數(shù)據(jù);
其中,信息收集模塊,還可以用于收集不同機器上的時序數(shù)據(jù)庫實例信息;還用于收集不同機器上的時序數(shù)據(jù)庫實例信息,收集的信息包括但不限于服務器上時序數(shù)據(jù)庫實例的IP、端口、磁盤剩余空間、網(wǎng)絡訪問延遲等信息,并定時發(fā)送更新信息上報給集群化系統(tǒng)。
其中,組調(diào)度模塊,還可以用于從不同服務器上選取網(wǎng)絡傳輸速率相當、磁盤剩余空間相當?shù)?、且沒有被其他組引用的時序數(shù)據(jù)庫實例,組成一個組;可以為鏈添加新組,并進行組切換,如鏈中最后一個組的磁盤使用量超過規(guī)定的值或組出現(xiàn)服務故障等情況時;實例、組狀態(tài)更新,定時檢測實例狀態(tài),當組中某個實例出現(xiàn)故障時,處理用戶請求時排除該實例,當某個組所有實例均不可用時進行組切換;鏈分裂功能,當用戶想要獨占組資源時,可以將原有的鏈分裂為兩條或多條鏈,其中包括想要獨占一條或多條鏈資源的用戶的新鏈和原有的舊鏈;鏈合并功能,當用戶不需要獨占鏈資源時,可以將多條鏈合并為一條鏈。
其中,用戶請求處理模塊,還可以用于用戶增刪改資源時,對于元數(shù)據(jù)更新,用戶的寫入請求,根據(jù)元數(shù)據(jù)管理模塊,查找到對應的鏈,并根據(jù)時間戳寫入到對應鏈的對應組,當組的所有實例都寫入成功后才返回成功;用戶的查詢請求,根據(jù)元數(shù)據(jù)管理模塊,查找到對應的鏈,根據(jù)查詢的范圍,找到涉及的組,然后將查詢范圍縮小至各個組的范圍,再去各個組分別執(zhí)行查詢,最終將結果匯總聚合,返回給用戶完整的查詢結果。
以上內(nèi)容是結合具體的優(yōu)選實施方式對本發(fā)明所作的進一步詳細說明,不能認定本發(fā)明的具體實施只局限于這些說明。對于本發(fā)明所屬技術領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干簡單推演或替換,都應當視為屬于本發(fā)明的保護范圍。