專利名稱:一種實現(xiàn)分布式數(shù)據(jù)庫代理的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式數(shù)據(jù)庫領(lǐng)域,特別涉及一種實現(xiàn)分布式數(shù)據(jù)庫代理的方法及裝置。
背景技術(shù):
數(shù)據(jù)庫代理是介于數(shù)據(jù)庫客戶端和服務(wù)器之間,主要起請求轉(zhuǎn)發(fā)作用的實體。客戶端使用各個數(shù)據(jù)庫時,不需要知道后端數(shù)據(jù)庫服務(wù)器的IP和端口,只需要知道數(shù)據(jù)庫代理的IP和端口,以及需要使用的數(shù)據(jù)庫用戶名、密碼和數(shù)據(jù)庫名,通過數(shù)據(jù)庫代理即可訪問數(shù)據(jù)庫。例如,MySQL Proxy數(shù)據(jù)庫代理。
隨著數(shù)據(jù)庫應(yīng)用規(guī)模的擴(kuò)大,分布式數(shù)據(jù)庫越來越得到廣泛應(yīng)用,對于分布式數(shù)據(jù)庫來說,某個局部的數(shù)據(jù)庫可能會隨時出現(xiàn)增加或者刪除等變化,但是,由于一般數(shù)據(jù)庫代理只能靜態(tài)配置一組數(shù)據(jù)庫,在某個局部數(shù)據(jù)庫增加時,客戶端無法及時訪問到該數(shù)據(jù)庫,因此無法滿足分布式數(shù)據(jù)庫代理的需求。發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種實現(xiàn)分布式數(shù)據(jù)庫代理的方法及裝置以實現(xiàn)在數(shù)據(jù)庫變化時不影響客戶端訪問的目的。
本發(fā)明提供的一種實現(xiàn)分布式數(shù)據(jù)庫代理的方法,包括
通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,更新所保存的數(shù)據(jù)庫配置信息,所述配置信息至少包括數(shù)據(jù)庫名稱、其對應(yīng)的IP地址和端口 ;
接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱;
若目標(biāo)數(shù)據(jù)庫名稱在所保存的數(shù)據(jù)庫配置信息中,根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP 地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接。
可選地,所述通過監(jiān)聽數(shù)據(jù)庫配置信息,更新所保存的數(shù)據(jù)庫配置信息具體實現(xiàn)為
讀取所保存的數(shù)據(jù)庫配置信息;
根據(jù)所述數(shù)據(jù)庫配置信息,訪問該數(shù)據(jù)庫;
如果訪問失敗,刪除該數(shù)據(jù)庫配置信息;
如果訪問正常,接收返回的更新數(shù)據(jù)庫配置信息,更新該數(shù)據(jù)庫配置信息。
可選地,該方法還包括獲得所保存的數(shù)據(jù)庫配置信息的步驟
接收數(shù)據(jù)庫配置信息的注冊請求,所述數(shù)據(jù)庫配置信息至少包括數(shù)據(jù)庫名稱、IP 地址和端口;
為該數(shù)據(jù)庫配置信息分配存儲空間,保存該數(shù)據(jù)庫配置信息。
可選地,所述通過監(jiān)聽數(shù)據(jù)庫配置信息,更新所保存的數(shù)據(jù)庫配置信息具體實現(xiàn)為
監(jiān)聽ZooKeeper發(fā)出的數(shù)據(jù)庫節(jié)點(diǎn)狀態(tài)變化的通知;
在監(jiān)聽到所述通知時,讀取ZooKeeper上保存的數(shù)據(jù)庫節(jié)點(diǎn)的配置信息;
更新數(shù)據(jù)庫配置信息。
可選地,該方法還包括若目標(biāo)數(shù)據(jù)庫名稱不在數(shù)據(jù)庫配置信息中,向客戶端返回數(shù)據(jù)庫信息不存在錯誤。
可選地,所述根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接具體實現(xiàn)為
查詢是否存在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池;
如果存在,從目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中取出空閑連接,通過該空閑連接建立客戶端與目標(biāo)數(shù)據(jù)庫的連接,并且將該空閑連接狀態(tài)設(shè)置為繁忙,其中,所述空閑連接具體根據(jù)數(shù)據(jù)庫配置信息中該目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口創(chuàng)建;
如果不存在,根據(jù)數(shù)據(jù)庫配置信息中該目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口創(chuàng)建目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池,其中所述連接池包含最小連接數(shù)個空閑連接,從該連接池中取出空閑連接,通過該空閑連接建立客戶端與目標(biāo)數(shù)據(jù)庫的連接,并且將該空閑連接狀態(tài)設(shè)為繁忙。
可選地,所述從目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中取出空閑連接,具體實現(xiàn)為
判斷目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中是否有空閑連接;
如果有,從目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中取出空閑連接;
如果沒有,判斷目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中的連接數(shù)是否小于最大連接數(shù)閾值,如果是,在該連接池中增加與目標(biāo)數(shù)據(jù)庫的空閑連接,從該連接池中取出空閑連接。
可選地,在建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之后,還可以包括
接收客戶端斷開與目標(biāo)數(shù)據(jù)庫連接的請求;
根據(jù)所述請求,斷開與客戶端的連接,將與目標(biāo)數(shù)據(jù)庫的連接放回目標(biāo)數(shù)據(jù)名稱對應(yīng)的連接池,并且將該連接狀態(tài)設(shè)置為空閑。
可選地,該方法還包括
計算所述連接池內(nèi)的空閑連接的空閑時間;
查詢出空閑時間超過預(yù)設(shè)空閑時間閾值的空閑連接;
若所查詢出的空閑連接所在連接池內(nèi)的連接個數(shù)大于最小連接數(shù)閾值,則將所查詢出的空閑連接從連接池內(nèi)刪除。
可選地,所述數(shù)據(jù)庫配置信息還可以包括用戶名和密碼;
所述接收客戶端對數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱時,還獲得客戶端的用戶名和密碼;
在建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之前,還將客戶端的用戶名和密碼與數(shù)據(jù)庫配置信息中的用戶名和密碼進(jìn)行匹配;
所述建立客戶端與目標(biāo)數(shù)據(jù)庫的連接具體在匹配正確時,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接。
可選地,所述建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之后,還可以包括;
根據(jù)目標(biāo)數(shù)據(jù)庫協(xié)議,生成包含用戶名和密碼的認(rèn)證信息,發(fā)送給目標(biāo)數(shù)據(jù)庫的服務(wù)器;
接收目標(biāo)數(shù)據(jù)庫的服務(wù)器返回的認(rèn)證通過信息,向客戶端返回認(rèn)證通過信息。
可選地,該方法還包括在所述數(shù)據(jù)庫配置信息中設(shè)置數(shù)據(jù)庫名稱對應(yīng)的IP白名單;
在接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求時,還獲得客戶端的IP地址;
所述建立客戶端與目標(biāo)數(shù)據(jù)庫的連接具體在客戶端的IP地址在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP白名單中時建立;
若客戶端的IP地址不再目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP白名單中,向客戶端返回錯誤信息。
可選地,在建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之后,還包括
接收客戶端對目標(biāo)數(shù)據(jù)庫的操作指令;
將所述操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫。
可選地,該方法還包括在所述數(shù)據(jù)庫配置信息中設(shè)置數(shù)據(jù)庫名稱對應(yīng)的指令白名單;
還通過解析操作指令判斷該操作指令是否在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的指令白名單中;
所述將操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫具體在該操作指令在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的指令白名單中時發(fā)送。
可選地,所述數(shù)據(jù)庫配置信息還可以包括數(shù)據(jù)庫名稱對應(yīng)讀操作或者寫操作的信息;
還通過解析操作指令,判斷該操作指令為讀操作還是寫操作;
如果是讀操作,所述將操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫具體發(fā)送到數(shù)據(jù)庫配置信息中目標(biāo)數(shù)據(jù)庫名稱對應(yīng)讀操作的IP地址和端口的目標(biāo)數(shù)據(jù)庫;
如果是寫操作,所述將操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫具體發(fā)送到數(shù)據(jù)庫配置信息中目標(biāo)數(shù)據(jù)庫名稱對應(yīng)寫操作的IP地址和端口的目標(biāo)數(shù)據(jù)庫。
本發(fā)明還提供一種實現(xiàn)分布式數(shù)據(jù)庫代理的裝置,包括
配置信息更新單元用于通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,更新所保存的數(shù)據(jù)庫配置信息,所述數(shù)據(jù)庫配置信息至少包括數(shù)據(jù)庫名稱,其對應(yīng)的IP地址和端口 ;
接收單元用于接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱;
驗證單元用于判斷目標(biāo)數(shù)據(jù)庫名稱是否在所保存的數(shù)據(jù)庫配置信息中,如果在, 根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接。
可選地,該裝置還包括=Z00K^per分布式協(xié)調(diào)單元用于保存數(shù)據(jù)庫配置信息, 在數(shù)據(jù)庫節(jié)點(diǎn)變化時,向配置信息更新單元發(fā)出數(shù)據(jù)庫節(jié)點(diǎn)變化的通知;
所述配置信息更新單元具體用于通過監(jiān)聽ZooK^per分布式協(xié)調(diào)單元發(fā)出的數(shù)據(jù)庫節(jié)點(diǎn)變化通知確定數(shù)據(jù)庫配置信息的變化,在監(jiān)聽到所述通知時,讀取ZooK^per上保存的數(shù)據(jù)庫節(jié)點(diǎn)的配置信息,更新數(shù)據(jù)庫配置信息。
可見本發(fā)明具有如下有益效果
由于后端數(shù)據(jù)庫發(fā)生變化的同時,數(shù)據(jù)庫配置信息也會發(fā)生相應(yīng)地變化,本發(fā)明通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,在數(shù)據(jù)庫發(fā)生變化時,例如,增加、刪除數(shù)據(jù)庫,更改數(shù)據(jù)庫IP地址、端口等,可以及時獲得更新的數(shù)據(jù)庫配置信息,進(jìn)而,在接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求時,可以及時根據(jù)更新的數(shù)據(jù)庫配置信息獲得該目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接,實現(xiàn)了在后端數(shù)據(jù)庫變化時,跟隨后端數(shù)據(jù)庫變化及時更新數(shù)據(jù)庫的配置信息,不影響客戶端的訪問。
圖1是本發(fā)明提供的一種實現(xiàn)分布式數(shù)據(jù)庫代理的方法一實施例流程圖2是本發(fā)明提供的一種實現(xiàn)分布式數(shù)據(jù)庫代理的裝置一實施例組成圖3是本發(fā)明提供的一種實現(xiàn)分布式數(shù)據(jù)庫代理的裝置另一實施例組成圖。
具體實施方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式
對本發(fā)明實施例作進(jìn)一步詳細(xì)的說明。
參見圖1,為本發(fā)明提供的一種實現(xiàn)分布式數(shù)據(jù)庫代理的方法的流程圖,如圖所示,該方法包括
S101、通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,更新所保存的數(shù)據(jù)庫配置信息,所述數(shù)據(jù)庫配置信息至少包括數(shù)據(jù)庫名稱、其對應(yīng)的IP地址和端口 ;
S102、接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱;
S103、若目標(biāo)數(shù)據(jù)庫名稱在所保存的數(shù)據(jù)庫配置信息中,根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接。
可以理解的是,后端數(shù)據(jù)庫發(fā)生變化的同時,數(shù)據(jù)庫配置信息也會發(fā)生相應(yīng)地變化,因此,應(yīng)用該實施例提供的方法,通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,在數(shù)據(jù)庫發(fā)生變化時,例如,增加、刪除數(shù)據(jù)庫,更改數(shù)據(jù)庫IP地址、端口等,可以及時獲得更新的數(shù)據(jù)庫配置信息,進(jìn)而,在接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求時,可以及時根據(jù)更新的數(shù)據(jù)庫配置信息獲得該目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接,實現(xiàn)了在后端數(shù)據(jù)庫變化時,跟隨后端數(shù)據(jù)庫變化及時更新數(shù)據(jù)庫的配置信息,不影響客戶端的訪問。
下面,對步驟S101、通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,更新所保存的數(shù)據(jù)庫配置信息的具體實現(xiàn)進(jìn)行詳細(xì)解釋
一種實現(xiàn)方式,例如,可以包括
讀取所保存的數(shù)據(jù)庫配置信息;
根據(jù)所述數(shù)據(jù)庫配置信息,訪問該數(shù)據(jù)庫;
如果訪問失敗,刪除該數(shù)據(jù)庫配置信息;
如果訪問正常,接收返回的更新數(shù)據(jù)庫配置信息,更新該數(shù)據(jù)庫配置信息。
在該實現(xiàn)方式中,還包括以下獲得所保存的數(shù)據(jù)庫配置信息的步驟
接收數(shù)據(jù)庫配置信息的注冊請求,所述數(shù)據(jù)庫配置信息至少包括數(shù)據(jù)庫名稱、IP 地址和端口;
為該數(shù)據(jù)庫配置信息分配存儲空間,保存該數(shù)據(jù)庫配置信息。
另一種實現(xiàn)方式,例如,可以利用ZooKe^er開源分布式協(xié)調(diào)系統(tǒng)監(jiān)聽在 ZooKeeper上保存了配置信息的數(shù)據(jù)庫節(jié)點(diǎn)的變化,獲得保存在ZooKe印er上的更新的數(shù)據(jù)庫配置信息,在這里,需要說明的是,ZooKe印er主要用于提供數(shù)據(jù)庫注冊節(jié)點(diǎn),ZooKeeper和數(shù)據(jù)庫通過周期性的通信自動更新數(shù)據(jù)庫配置信息,通過ZooKeeper可以監(jiān)聽數(shù)據(jù)庫節(jié)點(diǎn)的變化,當(dāng)監(jiān)聽到數(shù)據(jù)庫節(jié)點(diǎn)有變化時,如配置信息改變、節(jié)點(diǎn)刪除或增加等,ZooKe^er會發(fā)出數(shù)據(jù)庫節(jié)點(diǎn)變化的通知,因此,步驟SlOl所述通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,更新所保存的數(shù)據(jù)庫配置信息具體實現(xiàn)可以包括
通過監(jiān)聽ZooKeeper發(fā)出的數(shù)據(jù)庫節(jié)點(diǎn)變化的通知,確定數(shù)據(jù)庫配置信息的變化;
在監(jiān)聽到所述通知時,讀取ZooKeeper上保存的數(shù)據(jù)庫節(jié)點(diǎn)的配置信息;
更新數(shù)據(jù)庫配置信息。
而且,該方法還可以包括若目標(biāo)數(shù)據(jù)庫名稱不在數(shù)據(jù)庫配置信息中,向客戶端返回數(shù)據(jù)庫信息不存在錯誤。
在本發(fā)明的一個優(yōu)選實施例中,為了提高客戶端與目標(biāo)數(shù)據(jù)庫的連接速度,還可以通過建立連接池,復(fù)用連接池內(nèi)的空閑連接以節(jié)省客戶端與目標(biāo)數(shù)據(jù)庫的連接時間,具體地,例如步驟S103、根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接具體實現(xiàn)可以包括
S103.1、查詢是否存在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池;
S103. 2、如果存在,從目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中取出空閑連接,通過該空閑連接建立客戶端與目標(biāo)數(shù)據(jù)庫的連接,并且將該空閑連接狀態(tài)設(shè)為繁忙,其中,所述空閑連接具體根據(jù)數(shù)據(jù)庫配置信息中該目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口創(chuàng)建;
S103. 3、如果不存在,根據(jù)數(shù)據(jù)庫配置信息中該目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口創(chuàng)建目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池,其中所述連接池包含最小連接數(shù)個空閑連接,從該連接池中取出空閑連接,通過該空閑連接建立客戶端與目標(biāo)數(shù)據(jù)庫的連接,并且將該空閑連 接狀態(tài)設(shè)為繁忙。
其中,步驟S103. 2所述從目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中取出空閑連接,具體實現(xiàn)可以為
S103. 2a、判斷目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中是否有空閑連接;
S103. 2b、如果有,從目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中取出空閑連接;
S103. 2c、如果沒有,判斷目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中的連接數(shù)是否小于最大連接數(shù)閾值,如果是,在該連接池中增加與目標(biāo)數(shù)據(jù)庫的空閑連接,從該連接池中取出空閑連接。
可以理解的是,如果該數(shù)據(jù)庫名稱對應(yīng)的連接池中的連接數(shù)不小于最大連接數(shù)閾值,可以向客戶端返回?zé)o空閑連接信息。
相應(yīng)地,步驟S103. 3所述建立該數(shù)據(jù)庫名稱對應(yīng)的連接池時,還可以設(shè)置該連接池最大連接數(shù)閾值。
而且,在該實施例中,在客戶端與目標(biāo)數(shù)據(jù)庫斷開連接時,還可以將該連接放回連接池以待復(fù)用,具體實現(xiàn)可以為
在建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之后,還可以包括
接收客戶端斷開與目標(biāo)數(shù)據(jù)庫連接的請求;
根據(jù)所述請求,斷開與客戶端的連接,將與目標(biāo)數(shù)據(jù)庫的連接放回目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池,并且將該連接狀態(tài)設(shè)置為空閑。
考慮到若連接池內(nèi)的空閑連接空閑時間過長,將導(dǎo)致連接資源的浪費(fèi),因此,還可以通過預(yù)設(shè)空閑時間閾值,將空閑時間過長的空閑連接撤銷以節(jié)省連接資源,具體實現(xiàn)可以為
計算所述連接池內(nèi)的空閑連接的空閑時間;
查詢出空閑時間超過預(yù)設(shè)空閑時間閾值的空閑連接;
若所查詢出的空閑連接所在連接池內(nèi)的連接個數(shù)大于最小連接數(shù)閾值,則將該查詢出的空閑連接從連接池內(nèi)刪除。
另外,還可以在后端數(shù)據(jù)庫刪除時,及時跟隨刪除所建立的連接池,以實現(xiàn)及時更新數(shù)據(jù)庫的配置,具體實現(xiàn)可以為
在步驟SlOl獲得更新的數(shù)據(jù)庫配置信息后,還可以將配置信息中的數(shù)據(jù)庫名稱與所有連接池對應(yīng)的數(shù)據(jù)庫名稱比較,將不在配置信息中的數(shù)據(jù)庫名稱對應(yīng)的連接池刪除。
另外,本發(fā)明提供的方法還可以包括驗證客戶端認(rèn)證信息的步驟,例如
該方法中所述的數(shù)據(jù)庫配置信息還可以包括用戶名和密碼;
其中步驟S102、接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱時,還獲得客戶端的用戶名和密碼;
在步驟S103建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之前,還將客戶端的用戶名和密碼與數(shù)據(jù)庫配置信息中的用戶名和密碼進(jìn)行匹配;
所述步驟S103建立客戶端與目標(biāo)數(shù)據(jù)庫的連接具體在匹配正確時,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接;
若匹配不正確,還可以返回用戶名、密碼錯誤信息。
其中,步驟S103建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之后,還可以包括
根據(jù)目標(biāo)數(shù)據(jù)庫協(xié)議,生成包含用戶名和密碼的認(rèn)證信息,發(fā)送給該數(shù)據(jù)庫的服務(wù)器;
接收該數(shù)據(jù)庫的服務(wù)器返回的認(rèn)證通過信息,向客戶端返回認(rèn)證通過信息。
本發(fā)明提供的方法還可以實現(xiàn)限制非法客戶端連接、轉(zhuǎn)發(fā)客戶端對目標(biāo)數(shù)據(jù)庫的操作指令,限制非法操作指令、讀寫分離等功能,具體地,例如
實現(xiàn)非法客戶端連接的具體實現(xiàn)為
可以在數(shù)據(jù)庫配置信息中設(shè)置數(shù)據(jù)庫名稱對應(yīng)的IP白名單,在步驟S102接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求時,還可以獲得客戶端的IP地址,所述步驟S103具體在客戶端的IP地址在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP白名單中時,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接;若不在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP白名單中時,向客戶端返回錯誤信息;
轉(zhuǎn)發(fā)客戶端對目標(biāo)數(shù)據(jù)庫的操作指令的具體實現(xiàn)為
在步驟S103建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之后,還可以包括
接收客戶端對目標(biāo)數(shù)據(jù)庫的操作指令;
將所述操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫。
在該轉(zhuǎn)發(fā)客戶端對目標(biāo)數(shù)據(jù)庫的操作指令的實施例中,還可以限制非法操作指令的轉(zhuǎn)發(fā),具體實現(xiàn)為
可以在數(shù)據(jù)庫配置信息中設(shè)置數(shù)據(jù)庫名稱對應(yīng)的指令白名單;
還可以通過解析操作指令判斷該操作指令是否在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的指令白名單中;
所述將操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫具體在該操作指令在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的指令白名單中時發(fā)送。
可以理解的是,若操作指令不在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的指令白名單中,可以向客戶端返回操作指令受禁錯誤。
在該轉(zhuǎn)發(fā)客戶端對目標(biāo)數(shù)據(jù)庫操作指令的實施例中,結(jié)合分布式數(shù)據(jù)庫讀寫分離的特點(diǎn),還可以將客戶端讀操作對應(yīng)的操作指令發(fā)送到負(fù)責(zé)讀操作的數(shù)據(jù)庫,將客戶端寫操作對應(yīng)的操作指令發(fā)送到負(fù)責(zé)寫操作的數(shù)據(jù)庫,具體地,所述數(shù)據(jù)庫配置信息還可以包括數(shù)據(jù)庫名稱對應(yīng)讀操作或者寫操作的信息,例如,讀操作的信息為從庫,寫操作的信息為主庫,具體實現(xiàn)可以包括;
通過解析操作指令判斷該操作指令為讀操作還是寫操作,例如,在SQL中,SELECT 指令為讀操作,其他指令可以默認(rèn)為寫操作;
如果是讀操作,所述將操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫具體發(fā)送到數(shù)據(jù)庫配置信息中目標(biāo)數(shù)據(jù)庫名稱對應(yīng)讀操作的IP地址和端口的目標(biāo)數(shù)據(jù)庫,例如如果是SELECT操作指令,可以將操作指令發(fā)送到數(shù)據(jù)庫配置信息中目標(biāo)數(shù)據(jù)庫名稱對應(yīng)從庫的IP地址和端口的目標(biāo)數(shù)據(jù)庫;
如果是寫操作,所述將操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫具體發(fā)送到數(shù)據(jù)庫配置信息中目標(biāo)數(shù)據(jù)庫名稱對 應(yīng)寫操作的IP地址和端口的目標(biāo)數(shù)據(jù)庫,例如如果是非SELECT操作指令,可以將操作指令發(fā)送到數(shù)據(jù)庫配置信息中目標(biāo)數(shù)據(jù)庫名稱對應(yīng)主庫的IP地址和端口的目標(biāo)數(shù)據(jù)庫。
在本發(fā)明具體實施時,還可以在轉(zhuǎn)發(fā)客戶端的訪問請求時,通過從后端數(shù)據(jù)庫服務(wù)器獲取數(shù)據(jù)庫性能數(shù)據(jù),以及統(tǒng)計流量和連接數(shù)等數(shù)據(jù)庫資源狀態(tài),根據(jù)數(shù)據(jù)庫資源狀態(tài)閾值,判斷當(dāng)前客戶端對數(shù)據(jù)庫訪問請求對應(yīng)的數(shù)據(jù)庫資源狀態(tài)是否超出閾值,如果超出閾值,可以限制客戶端對數(shù)據(jù)庫的訪問請求。
參見圖2,本發(fā)明還提供一種實現(xiàn)分布式數(shù)據(jù)庫代理的裝置,如圖所示,該裝置包括
配置信息更新單元201 :用于通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,更新所保存的數(shù)據(jù)庫配置信息,所述數(shù)據(jù)庫配置信息至少包括數(shù)據(jù)庫名稱,其對應(yīng)的IP地址和端口 ;
接收單元202 :用于接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱;
驗證單元203 :用于判斷目標(biāo)數(shù)據(jù)庫名稱是否在所保存的數(shù)據(jù)庫配置信息中,如果在,根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接。
參見圖3,所述一種實現(xiàn)分布式數(shù)據(jù)庫代理的裝置,還可以包括
ZooKeeper分布式協(xié)調(diào)單元304 :用于保存數(shù)據(jù)庫配置信息,在數(shù)據(jù)庫節(jié)點(diǎn)變化時,向配置信息更新單元301發(fā)出數(shù)據(jù)庫節(jié)點(diǎn)變化的通知;
所述配置信息更新單元301 :具體用于通過監(jiān)聽ZooKeeper分布式協(xié)調(diào)單元發(fā)出的數(shù)據(jù)庫節(jié)點(diǎn)變化通知確定數(shù)據(jù)庫配置信息的變化,在監(jiān)聽到所述通知時,讀取ZooK^per 上保存的數(shù)據(jù)庫節(jié)點(diǎn)的配置信息,更新數(shù)據(jù)庫配置信息。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種實現(xiàn)分布式數(shù)據(jù)庫代理的方法,其特征在于,包括通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,更新所保存的數(shù)據(jù)庫配置信息,所述數(shù)據(jù)庫配置信息至少包括數(shù)據(jù)庫名稱、其對應(yīng)的IP地址和端口 ;接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱;若目標(biāo)數(shù)據(jù)庫名稱在所保存的數(shù)據(jù)庫配置信息中,根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述通過監(jiān)聽數(shù)據(jù)庫配置信息,更新所保存的數(shù)據(jù)庫配置信息具體實現(xiàn)為讀取所保存的數(shù)據(jù)庫配置信息;根據(jù)所述數(shù)據(jù)庫配置信息,訪問該數(shù)據(jù)庫;如果訪問失敗,刪除該數(shù)據(jù)庫配置信息;如果訪問正常,接收返回的更新數(shù)據(jù)庫配置信息,更新該數(shù)據(jù)庫配置信息。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,還包括獲得所保存的數(shù)據(jù)庫配置信息的步驟接收數(shù)據(jù)庫配置信息的注冊請求,所述數(shù)據(jù)庫配置信息至少包括數(shù)據(jù)庫名稱、IP地址和端口 ;為該數(shù)據(jù)庫配置信息分配存儲空間,保存該數(shù)據(jù)庫配置信息。
4.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述通過監(jiān)聽數(shù)據(jù)庫配置信息,更新所保存的數(shù)據(jù)庫配置信息具體實現(xiàn)為通過監(jiān)聽ZooK^per發(fā)出的數(shù)據(jù)庫節(jié)點(diǎn)變化的通知,確定數(shù)據(jù)庫配置信息的變化; 在監(jiān)聽到所述通知時,讀取ZooK^per上保存的數(shù)據(jù)庫節(jié)點(diǎn)的配置信息;更新數(shù)據(jù)庫配置信息。
5.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括若目標(biāo)數(shù)據(jù)庫名稱不在數(shù)據(jù)庫配置信息中,向客戶端返回數(shù)據(jù)庫信息不存在錯誤。
6.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接具體實現(xiàn)為查詢是否存在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池;如果存在,從目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中取出空閑連接,通過該空閑連接建立客戶端與目標(biāo)數(shù)據(jù)庫的連接,并且將該空閑連接狀態(tài)設(shè)置為繁忙,其中,所述空閑連接具體根據(jù)數(shù)據(jù)庫配置信息中該目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口創(chuàng)建;如果不存在,根據(jù)數(shù)據(jù)庫配置信息中該目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口創(chuàng)建目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池,其中所述連接池包含最小連接數(shù)個空閑連接,從該連接池中取出空閑連接,通過該空閑連接建立客戶端與目標(biāo)數(shù)據(jù)庫的連接,并且將該空閑連接狀態(tài)設(shè)為繁忙。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述從目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中取出空閑連接,具體實現(xiàn)為判斷目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中是否有空閑連接;如果有,從目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中取出空閑連接;如果沒有,判斷目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的連接池中的連接數(shù)是否小于最大連接數(shù)閾值,如果是,在該連接池中增加與目標(biāo)數(shù)據(jù)庫的空閑連接,從該連接池中取出空閑連接。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,在建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之后, 還包括接收客戶端斷開與目標(biāo)數(shù)據(jù)庫連接的請求;根據(jù)所述請求,斷開與客戶端的連接,將與目標(biāo)數(shù)據(jù)庫的連接放回目標(biāo)數(shù)據(jù)名稱對應(yīng)的連接池,并且將該連接狀態(tài)設(shè)置為空閑。
9.根據(jù)權(quán)利要求6-8任意一項所述的方法,其特征在于,還包括計算所述連接池內(nèi)的空閑連接的空閑時間;查詢出空閑時間超過預(yù)設(shè)空閑時間閾值的空閑連接;若所查詢出的空閑連接所在連接池內(nèi)的連接個數(shù)大于最小連接數(shù)閾值,則將所查詢出的空閑連接從連接池內(nèi)刪除。
10.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述數(shù)據(jù)庫配置信息還包括用戶名和密碼;所述接收客戶端對數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱時,還獲得客戶端的用戶名和密碼;在建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之前,還將客戶端的用戶名和密碼與數(shù)據(jù)庫配置信息中的用戶名和密碼進(jìn)行匹配;所述建立客戶端與目標(biāo)數(shù)據(jù)庫的連接具體在匹配正確時,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之后,還包括根據(jù)目標(biāo)數(shù)據(jù)庫協(xié)議,生成包含用戶名和密碼的認(rèn)證信息,發(fā)送給目標(biāo)數(shù)據(jù)庫的服務(wù)器;接收目標(biāo)數(shù)據(jù)庫的服務(wù)器返回的認(rèn)證通過信息,向客戶端返回認(rèn)證通過信息。
12.根據(jù)權(quán)利要求I所述的方法,其特征在于,還包括在所述數(shù)據(jù)庫配置信息中設(shè)置數(shù)據(jù)庫名稱對應(yīng)的IP白名單;在接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求時,還獲得客戶端的IP地址;所述建立客戶端與目標(biāo)數(shù)據(jù)庫的連接具體在客戶端的IP地址在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP白名單中時建立;若客戶端的IP地址不再目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP白名單中,向客戶端返回錯誤信息。
13.根據(jù)權(quán)利要求I所述的方法,其特征在于,在建立客戶端與目標(biāo)數(shù)據(jù)庫的連接之后,還包括接收客戶端對目標(biāo)數(shù)據(jù)庫的操作指令;將所述操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,還包括在所述數(shù)據(jù)庫配置信息中設(shè)置數(shù)據(jù)庫名稱對應(yīng)的指令白名單;還通過解析操作指令判斷該操作指令是否在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的指令白名單中; 所述將操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫具體在該操作指令在目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的指令白名單中時發(fā)送。
15.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述數(shù)據(jù)庫配置信息還包括數(shù)據(jù)庫名稱對應(yīng)讀操作或者寫操作的信息;還通過解析操作指令,判斷該操作指令為讀操作還是寫操作;如果是讀操作,所述將操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫具體發(fā)送到數(shù)據(jù)庫配置信息中目標(biāo)數(shù)據(jù)庫名稱對應(yīng)讀操作的IP地址和端口的目標(biāo)數(shù)據(jù)庫;如果是寫操作,所述將操作指令發(fā)送到目標(biāo)數(shù)據(jù)庫具體發(fā)送到數(shù)據(jù)庫配置信息中目標(biāo)數(shù)據(jù)庫名稱對應(yīng)寫操作的IP地址和端口的目標(biāo)數(shù)據(jù)庫。
16.一種實現(xiàn)分布式數(shù)據(jù)庫代理的裝置,其特征在于,包括配置信息更新單元用于通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,更新所保存的數(shù)據(jù)庫配置信息,所述數(shù)據(jù)庫配置信息至少包括數(shù)據(jù)庫名稱,其對應(yīng)的IP地址和端口 ;接收單元用于接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱;驗證單元用于判斷目標(biāo)數(shù)據(jù)庫名稱是否在所保存的數(shù)據(jù)庫配置信息中,如果在,根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接。
17.根據(jù)權(quán)利要求16所述的裝置,其特征在于,還包括=Z00Keeper分布式協(xié)調(diào)單元 用于保存數(shù)據(jù)庫配置信息,在數(shù)據(jù)庫節(jié)點(diǎn)變化時,向配置信息更新單元發(fā)出數(shù)據(jù)庫節(jié)點(diǎn)變化的通知;所述配置信息更新單元具體用于通過監(jiān)聽ZooK^per分布式協(xié)調(diào)單元發(fā)出的數(shù)據(jù)庫節(jié)點(diǎn)變化通知確定數(shù)據(jù)庫配置信息的變化,在監(jiān)聽到所述通知時,讀取ZooK^per上保存的數(shù)據(jù)庫節(jié)點(diǎn)的配置信息,更新數(shù)據(jù)庫配置信息。
全文摘要
本發(fā)明公開了一種實現(xiàn)分布式數(shù)據(jù)庫代理的方法及裝置以實現(xiàn)在數(shù)據(jù)庫變化時不影響客戶端訪問的目的,包括通過監(jiān)聽數(shù)據(jù)庫配置信息的變化,更新所保存的數(shù)據(jù)庫配置信息,所述配置信息至少包括數(shù)據(jù)庫名稱、其對應(yīng)的IP地址和端口;接收客戶端對目標(biāo)數(shù)據(jù)庫的連接請求,獲得目標(biāo)數(shù)據(jù)庫名稱;若目標(biāo)數(shù)據(jù)庫名稱在所保存的數(shù)據(jù)庫配置信息中,根據(jù)目標(biāo)數(shù)據(jù)庫名稱對應(yīng)的IP地址和端口,建立客戶端與目標(biāo)數(shù)據(jù)庫的連接,實現(xiàn)了在后端數(shù)據(jù)庫變化時,跟隨后端數(shù)據(jù)庫變化及時更新數(shù)據(jù)庫的配置信息,不影響客戶端的訪問。
文檔編號H04L29/06GK102982141SQ201210473158
公開日2013年3月20日 申請日期2012年11月20日 優(yōu)先權(quán)日2012年11月20日
發(fā)明者張輝華 申請人:北京搜狐新媒體信息技術(shù)有限公司