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