本發(fā)明涉及數(shù)據(jù)庫訪問技術(shù)領域,更具體地說,涉及一種數(shù)據(jù)庫訪問裝置、系統(tǒng)及方法。
背景技術(shù):
目前客戶端程序?qū)?shù)據(jù)庫的連接和操作,一般由實現(xiàn)數(shù)據(jù)庫協(xié)議的驅(qū)動程序來實現(xiàn)??蛻舳顺绦蛘{(diào)用數(shù)據(jù)庫驅(qū)動程序接口,即可很方便地對數(shù)據(jù)庫進行增、刪、改、查。當用戶訪問量增加,就會產(chǎn)生大量數(shù)據(jù)庫連接,如果連接達到數(shù)據(jù)庫連接上限,客戶端則會出現(xiàn)等待,如在一定的時間仍未連接上,客戶端則出現(xiàn)超時。雖然可以采取增加機器性能、數(shù)據(jù)庫讀寫分離、增加多個數(shù)據(jù)庫實例、使用內(nèi)存緩存等方式解決大并發(fā),但還是可能被大量正常或惡意的訪問造成系統(tǒng)繁忙或宕機。特別是在企業(yè)發(fā)展初期或產(chǎn)品推出初期,使用的系統(tǒng)相對簡單,擴展性差,難于評估用戶訪問量,無法抵擋突然大量用戶的訪問而影響系統(tǒng)的使用。
因此,如何在對數(shù)據(jù)庫訪問的基礎上,減少由于大量或者惡意的訪問造成系統(tǒng)繁忙或者宕機是本領域技術(shù)人員需要解決的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種數(shù)據(jù)庫訪問裝置、系統(tǒng)及方法,以實現(xiàn)在對數(shù)據(jù)庫訪問的基礎上,減少由于大量或者惡意的訪問造成系統(tǒng)繁忙或者宕機。
為實現(xiàn)上述目的,本發(fā)明實施例提供了如下技術(shù)方案:
一種數(shù)據(jù)庫訪問裝置,包括:
接口模塊,用于接收業(yè)務邏輯發(fā)送的訪問請求及目標策略,調(diào)用策略應用模塊獲取所述訪問請求的執(zhí)行結(jié)果,根據(jù)所述執(zhí)行結(jié)果調(diào)用數(shù)據(jù)庫訪問模塊訪問數(shù)據(jù)庫;
策略應用模塊,用于收集實時監(jiān)控指標數(shù)據(jù),根據(jù)實時監(jiān)控指標數(shù)據(jù)及所述目標策略確定所述訪問請求的執(zhí)行結(jié)果,并將所述執(zhí)行結(jié)果發(fā)送至所述接口模塊;
所述數(shù)據(jù)庫訪問模塊,用于根據(jù)所述接口模塊的調(diào)用,對數(shù)據(jù)庫進行訪問。
其中,所述策略應用模塊包括:
執(zhí)行結(jié)果確定子模塊,用于根據(jù)實時監(jiān)控指標數(shù)據(jù)及所述目標策略判定所述訪問請求的執(zhí)行結(jié)果;其中所述目標策略包括:單項指標判定策略或者綜合指標判定策略。
其中,所述策略應用模塊包括:
監(jiān)控指標收集子模塊,用于實時收集數(shù)據(jù)庫訪問信息、數(shù)據(jù)庫運行信息及數(shù)據(jù)庫所在服務器的性能信息中的至少一者。
其中,所述數(shù)據(jù)庫訪問模塊包括:
數(shù)據(jù)庫訪問監(jiān)控子模塊,用于收集數(shù)據(jù)庫訪問信息,并將所述數(shù)據(jù)庫訪問信息發(fā)送至所述監(jiān)控指標收集子模塊,所述數(shù)據(jù)庫訪問信息包括:當前調(diào)用使用連接數(shù)信息、平均每秒連接數(shù)信息和平均響應時間信息。
一種數(shù)據(jù)庫訪問系統(tǒng),包括:上述任意一項所述的數(shù)據(jù)庫訪問裝置,以及監(jiān)控裝置;
所述監(jiān)控裝置用于實時收集數(shù)據(jù)庫運行信息及數(shù)據(jù)庫所在服務器的性能信息,并將所述運行信息及所述性能信息發(fā)送至所述策略應用模塊。
其中,所述監(jiān)控裝置包括:
數(shù)據(jù)庫監(jiān)控模塊,用于獲取數(shù)據(jù)庫的運行信息,并將所述運行信息發(fā)送至監(jiān)控匯總模塊;所述運行信息包括:當前數(shù)據(jù)庫連接數(shù)信息、剩余數(shù)據(jù)庫連接數(shù)信息和內(nèi)存占用信息;
服務器監(jiān)控模塊,用于獲取數(shù)據(jù)庫所在服務器的性能信息,并將所述性能信息發(fā)送至監(jiān)控匯總模塊;所述性能信息包括:CPU使用率信息、IO性能信息和內(nèi)存使用情況信息;
監(jiān)控匯總模塊,用于將所述運行信息和所述性能信息發(fā)送至所述策略應用模塊。
其中,所述數(shù)據(jù)庫訪問裝置為應用程序內(nèi)的SDK。
一種數(shù)據(jù)庫訪問方法,包括:
收集實時監(jiān)控指標數(shù)據(jù);
接收業(yè)務邏輯發(fā)送的訪問請求及目標策略;
根據(jù)實時監(jiān)控指標數(shù)據(jù)及所述目標策略,確定所述訪問請求的執(zhí)行結(jié)果;
利用所述執(zhí)行結(jié)果響應所述訪問請求,實現(xiàn)對數(shù)據(jù)庫的訪問。
其中,所述目標策略包括:單項指標判定策略或者綜合指標判定策略。
其中,所述收集實時監(jiān)控指標數(shù)據(jù),包括:
實時收集數(shù)據(jù)庫訪問信息、數(shù)據(jù)庫運行信息及數(shù)據(jù)庫所在服務器的性能信息中的至少一者。
通過以上方案可知,本發(fā)明實施例提供的一種數(shù)據(jù)庫訪問裝置,包括:接口模塊,用于接收業(yè)務邏輯發(fā)送的訪問請求及目標策略,調(diào)用策略應用模塊獲取所述訪問請求的執(zhí)行結(jié)果,根據(jù)所述執(zhí)行結(jié)果調(diào)用數(shù)據(jù)庫訪問模塊訪問數(shù)據(jù)庫;策略應用模塊,用于收集實時監(jiān)控指標數(shù)據(jù),根據(jù)實時監(jiān)控指標數(shù)據(jù)及所述目標策略確定所述訪問請求的執(zhí)行結(jié)果,并將所述執(zhí)行結(jié)果發(fā)送至所述接口模塊;所述數(shù)據(jù)庫訪問模塊,用于根據(jù)所述接口模塊的調(diào)用,對數(shù)據(jù)庫進行訪問;
可見,在本方案中,業(yè)務邏輯發(fā)送訪問請求時會將與訪問請求對于的目標策略一同發(fā)送,通過數(shù)據(jù)庫訪問裝置根據(jù)實時監(jiān)控指標數(shù)據(jù)及目標策略,對訪問請求進行判斷,得到相應的執(zhí)行結(jié)果,根據(jù)該執(zhí)行結(jié)果響應訪問請求,從而對數(shù)據(jù)庫的訪問進行控制,避免由于大量或者惡意的訪問造成系統(tǒng)繁忙或者宕機;本發(fā)明還公開了一種數(shù)據(jù)庫訪問系統(tǒng)及方法,同樣能實現(xiàn)上述技術(shù)效果。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例公開的一種數(shù)據(jù)庫訪問裝置結(jié)構(gòu)示意圖;
圖2為本發(fā)明實施例公開的一種數(shù)據(jù)庫訪問系統(tǒng)結(jié)構(gòu)示意圖;
圖3為本發(fā)明實施例公開的另一種數(shù)據(jù)庫訪問系統(tǒng)結(jié)構(gòu)示意圖;
圖4為本發(fā)明實施例公開的一種數(shù)據(jù)庫訪問方法流程圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例公開了一種數(shù)據(jù)庫訪問裝置、系統(tǒng)及方法,以實現(xiàn)對數(shù)據(jù)庫的訪問的基礎上,減少由于大量或者惡意的訪問造成系統(tǒng)繁忙或者宕機。
參見圖1,本發(fā)明實施例提供的一種數(shù)據(jù)庫訪問裝置100,包括:
接口模塊101,用于接收業(yè)務邏輯發(fā)送的訪問請求及目標策略,調(diào)用策略應用模塊獲取所述訪問請求的執(zhí)行結(jié)果,根據(jù)所述執(zhí)行結(jié)果調(diào)用數(shù)據(jù)庫訪問模塊訪問數(shù)據(jù)庫;
具體的,本實施例中的接口模塊101將對數(shù)據(jù)庫的訪問調(diào)用封裝成接口的方法,給程序的業(yè)務邏輯調(diào)用,同時根據(jù)調(diào)用方對所選指標的目標策略進行預設,調(diào)用策略應用模塊102,判斷是否達到預設條件,最后根據(jù)判斷結(jié)果調(diào)用數(shù)據(jù)庫訪問模塊103訪問數(shù)據(jù)庫。業(yè)務邏輯在調(diào)用接口模塊101時,可以設置單項指標、綜合性能指標。比如,接口模塊提供的設置指標的方法:
setStrategy(單項指標1,單項指標1值)
setStrategy(綜合指標1,綜合指標1值)
setStrategy(單項指標1,單項指標1值,單項指標2,單項指標2值,綜合指標1,綜合指標1值,……)。
業(yè)務邏輯設置完指標策略后,調(diào)用接口模塊101提供的select/update/delete等數(shù)據(jù)庫操作方法,并返回狀態(tài)或數(shù)據(jù)庫返回結(jié)果。這里的狀態(tài)可能是1.策略阻斷,未進行數(shù)據(jù)庫操作;2.數(shù)據(jù)庫連接異常。程序的業(yè)務邏輯可以根據(jù)返回狀態(tài)或結(jié)果進行相應處理。
策略應用模塊102,用于收集實時監(jiān)控指標數(shù)據(jù),根據(jù)實時監(jiān)控指標數(shù)據(jù)及所述目標策略確定所述訪問請求的執(zhí)行結(jié)果,并將所述執(zhí)行結(jié)果發(fā)送至所述接口模塊;
其中,所述策略應用模塊包括:
監(jiān)控指標收集子模塊,用于實時收集數(shù)據(jù)庫訪問信息、數(shù)據(jù)庫運行信息及數(shù)據(jù)庫所在服務器的性能信息中的至少一者;
執(zhí)行結(jié)果確定子模塊,用于根據(jù)實時監(jiān)控指標數(shù)據(jù)及所述目標策略判定所述訪問請求的執(zhí)行結(jié)果;其中所述目標策略包括:單項指標判定策略或者綜合指標判定策略。
具體的,本實施例中的策略應用模塊中收集的數(shù)據(jù)包括數(shù)據(jù)庫訪問信息、數(shù)據(jù)庫運行信息及數(shù)據(jù)庫所在服務器的性能信息中的至少一者;策略應用模塊接收到接口模塊101的調(diào)用請求時,根據(jù)監(jiān)控指標數(shù)據(jù)以及業(yè)務邏輯發(fā)送的目標策略,對訪問請求進行進行分析,得到執(zhí)行結(jié)果,這里對訪問請求進行分析判斷時,有單項指標的判斷,也有綜合指標的判斷,綜合指標是對多個單項指標的綜合計算到出的結(jié)果值,有利于綜合評估,防止忽略個別指標。
具體的,策略應用模塊102接收到監(jiān)控指標數(shù)據(jù)時,會維護一個實時的指標監(jiān)控信息映射表,由數(shù)據(jù)庫訪問模塊103和在服務器中的監(jiān)控裝置實時匯總更新,或者由單項的指標進行綜合計算得出。比如,映射表是一個MAP數(shù)據(jù)結(jié)構(gòu),key=單項指標或綜合指標名,value=指標對應的當前值,其數(shù)據(jù)結(jié)構(gòu)如:
CPU使用率:40
服務器剩余內(nèi)存:600(單位MB)
當前數(shù)據(jù)庫連接數(shù):90
剩余數(shù)據(jù)庫連接數(shù):10
剩余數(shù)據(jù)庫連接數(shù)百分比:40
平均響應時間:100(單位毫秒)
綜合指標1:90(100分為最好,0分為最差)
其中,CPU使用率、服務器剩余內(nèi)存、當前數(shù)據(jù)庫連接數(shù)、剩余數(shù)據(jù)庫連接數(shù)、剩余數(shù)據(jù)庫連接數(shù)百分比可由監(jiān)控裝置獲得,平均響應時間可由數(shù)據(jù)庫訪問模塊獲得。
所述數(shù)據(jù)庫訪問模塊103,用于根據(jù)所述接口模塊的調(diào)用,對數(shù)據(jù)庫進行訪問。
其中,所述數(shù)據(jù)庫訪問模塊包括:
數(shù)據(jù)庫訪問監(jiān)控子模塊,用于收集數(shù)據(jù)庫訪問信息,并將所述數(shù)據(jù)庫訪問信息發(fā)送至所述監(jiān)控指標收集子模塊,所述數(shù)據(jù)庫訪問信息包括:當前調(diào)用使用連接數(shù)信息、平均每秒連接數(shù)信息和平均響應時間信息。
具體的,本實施例中的數(shù)據(jù)庫訪問模塊103由接口模塊101調(diào)用,連接并訪問數(shù)據(jù)庫,同時統(tǒng)計數(shù)據(jù)庫的訪問信息,包括當前調(diào)用使用連接數(shù)、平均每秒連接數(shù)、平均響應時間等,上報給策略應用模塊。數(shù)據(jù)庫訪問模塊實現(xiàn)數(shù)據(jù)庫的連接訪問協(xié)議,能夠連接并訪問數(shù)據(jù)庫。
具體的,本方案中的數(shù)據(jù)訪問裝置給具體的業(yè)務邏輯調(diào)用,業(yè)務邏輯根據(jù)業(yè)務特點和數(shù)據(jù)訪問裝置可選的監(jiān)控指標數(shù)據(jù)和策略,預設對數(shù)據(jù)庫的訪問要求,即本實施例中業(yè)務邏輯發(fā)送的目標策略。這里的監(jiān)控指標數(shù)據(jù)包括:數(shù)據(jù)庫剩余連接和總連接數(shù)百分比、數(shù)據(jù)庫所在服務器的CPU使用率,IO性能等。
并且,業(yè)務邏輯預設的策略包括但不限于:1.當CPU使用率超過60%,不對數(shù)據(jù)庫進行操作;2.當CPU使用率超過60%,30%的調(diào)用進行數(shù)據(jù)庫的操作,當CPU使用率超過80%,所有調(diào)用不對數(shù)據(jù)庫進行操作;3.當連接數(shù)剩余30%時,不對數(shù)據(jù)庫進行操作;4.綜合指標小于30分時(100分為最好,0分為最差)。
下面對本發(fā)明實施例提供的數(shù)據(jù)庫訪問系統(tǒng)進行介紹,下文描述的數(shù)據(jù)庫訪問系統(tǒng)與上文描述的數(shù)據(jù)庫訪問裝置可以相互參照。
參見圖2,本發(fā)明實施例提供的一種數(shù)據(jù)庫訪問系統(tǒng),包括上述實施例所述的數(shù)據(jù)庫訪問裝置100,以及監(jiān)控裝置200;
所述監(jiān)控裝置200用于實時收集數(shù)據(jù)庫運行信息及數(shù)據(jù)庫所在服務器的性能信息,并將所述運行信息及所述性能信息發(fā)送至所述策略應用模塊。
具體的,本實施例中的數(shù)據(jù)庫訪問系統(tǒng)可包括數(shù)據(jù)訪問裝置和監(jiān)控裝置;數(shù)據(jù)訪問裝置給應用程序中的業(yè)務邏輯調(diào)用,在通常的軟件設計中,具體是由數(shù)據(jù)訪問層來調(diào)用數(shù)據(jù)訪問裝置,對數(shù)據(jù)庫進行讀寫等操作。監(jiān)控裝置用于收集和監(jiān)控數(shù)據(jù)庫及數(shù)據(jù)庫所在的服務器的運行數(shù)據(jù)、性能數(shù)據(jù),并反饋給數(shù)據(jù)訪問裝置,數(shù)據(jù)訪問裝置根據(jù)監(jiān)控裝置的反饋結(jié)果,以及業(yè)務邏輯中對數(shù)據(jù)的訪問策略,執(zhí)行對數(shù)據(jù)庫的操作。
需要說明的是,本實施例中的監(jiān)控裝置200可以為運行在數(shù)據(jù)庫所在服務器的程序,用于監(jiān)控和收集數(shù)據(jù)庫運行信息和服務器系統(tǒng)信息,這些信息將反饋給數(shù)據(jù)訪問裝置,作為數(shù)據(jù)庫的訪問策略。
基于上述實施例,參見圖3,在本實施例中所述監(jiān)控裝置200包括:
數(shù)據(jù)庫監(jiān)控模塊201,用于獲取數(shù)據(jù)庫的運行信息,并將所述運行信息發(fā)送至監(jiān)控匯總模塊;所述運行信息包括:當前數(shù)據(jù)庫連接數(shù)信息、剩余數(shù)據(jù)庫連接數(shù)信息和內(nèi)存占用信息;
具體的,本方案中的數(shù)據(jù)庫監(jiān)控模塊201:通過shell腳本、數(shù)據(jù)庫命令,實時或定期獲取數(shù)據(jù)庫的運行信息,然后將獲取的信息上報給監(jiān)控匯總模塊。數(shù)據(jù)庫運行信息包括數(shù)據(jù)庫的連接數(shù),內(nèi)存占用等。通常情況下,數(shù)據(jù)庫會收集統(tǒng)計與數(shù)據(jù)庫運行相關(guān)的信息,并提供相應的工具或者命令進行查看。
服務器監(jiān)控模塊202,用于獲取數(shù)據(jù)庫所在服務器的性能信息,并將所述性能信息發(fā)送至監(jiān)控匯總模塊;所述性能信息包括:CPU使用率信息、IO性能信息和內(nèi)存使用情況信息;
具體的,本方案中的服務器監(jiān)控模塊202:通過shell腳本、操作系統(tǒng)命令和工具,實時或定期獲取服務器的信息,然后將獲取的信息上報給監(jiān)控匯總模塊。服務器信息包括CPU使用率、IO性能、內(nèi)存使用情況等,可以通過系統(tǒng)命令獲取到。
監(jiān)控匯總模塊203,用于將所述運行信息和所述性能信息發(fā)送至所述策略應用模塊。
具體的,本方案中監(jiān)控匯總模塊203可將獲取的信息推送給數(shù)據(jù)訪問裝置100,或者由數(shù)據(jù)訪問裝置100主動獲取。
其中,所述數(shù)據(jù)庫訪問裝置為應用程序內(nèi)的SDK。
需要說明的是,本實施例中的數(shù)據(jù)訪問裝置100是一個可獨立運行的程序,也可以是一個SDK(Software Development Kit,軟件開發(fā)工具包)。如果是獨立運行的程序,那么數(shù)據(jù)訪問裝置部署于應用程序之外,業(yè)務邏輯通過接口(rpc、http/json等訪問協(xié)議)進行調(diào)用。但通常情況下,數(shù)據(jù)訪問模塊會根據(jù)不同的開發(fā)語言,封裝成SDK,由程序進行本地方法調(diào)用。因此,本發(fā)明中的數(shù)據(jù)訪問裝置將作為SDK進行描述說明。
下面對本發(fā)明實施例提供的數(shù)據(jù)庫訪問方法進行介紹,下文描述的數(shù)據(jù)庫訪問方法與上文描述的數(shù)據(jù)庫訪問裝置可以相互參照。
參見圖4,本發(fā)明實施例提供的一種數(shù)據(jù)庫訪問方法,包括:
S101、收集實時監(jiān)控指標數(shù)據(jù);
S102、接收業(yè)務邏輯發(fā)送的訪問請求及目標策略;
S103、根據(jù)實時監(jiān)控指標數(shù)據(jù)及所述目標策略,確定所述訪問請求的執(zhí)行結(jié)果;
S104、利用所述執(zhí)行結(jié)果響應所述訪問請求,實現(xiàn)對數(shù)據(jù)庫的訪問。
其中,所述目標策略包括:單項指標判定策略或者綜合指標判定策略。
基于上述實施例,所述收集實時監(jiān)控指標數(shù)據(jù),包括:
實時收集數(shù)據(jù)庫訪問信息、數(shù)據(jù)庫運行信息及數(shù)據(jù)庫所在服務器的性能信息中的至少一者。
在本實施例中,根據(jù)過載保護設計思想,結(jié)合對應用系統(tǒng)的業(yè)務分析,提前對數(shù)據(jù)庫的操作進行設置,在出現(xiàn)大量訪問、數(shù)據(jù)庫繁忙時,在連接數(shù)、CPU使用率、IO性能或綜合指標達到一定的閥值時,對一些不重要的業(yè)務放棄或減少對數(shù)據(jù)庫的操作,而盡量滿足重要業(yè)務對數(shù)據(jù)庫的操作。從而最大限度的利用有限的數(shù)據(jù)庫資源為應用和產(chǎn)品提供較大量較可靠的訪問,而不至于宕機以致完全影響用戶使用。
需要說明的是,這里指的不重要的業(yè)務,是需要對業(yè)務進行分析的,不同的產(chǎn)品的場景不一樣。比如微博產(chǎn)品時間線的刷新,也就是獲取最新的微博內(nèi)容,這種讀取操作比較頻繁,當數(shù)據(jù)庫訪問繁忙時,可以不查數(shù)據(jù)庫而直接返回,并在界面上告訴用戶沒有新內(nèi)容或直接提示系統(tǒng)繁忙,請稍候再試。再比如一些更新數(shù)據(jù)庫操作,系統(tǒng)中用戶每次點擊操作都更新最近操作時間的場景,當數(shù)據(jù)庫繁忙時,就可以不進行更新操作。
本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。
對所公開的實施例的上述說明,使本領域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。