并發(fā)請求的控制方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種并發(fā)請求的控制方法及裝置,涉及互聯(lián)網(wǎng)【技術(shù)領(lǐng)域】,為解決因并發(fā)數(shù)限制導(dǎo)致的部分訪問請求被拒的問題而發(fā)明。本發(fā)明的方法包括:當(dāng)訪問請求的實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,對超出部分的訪問請求進(jìn)行緩存;定期查詢當(dāng)前的實(shí)際并發(fā)數(shù);若所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限,則加入所述緩存的訪問請求以進(jìn)行處理。本發(fā)明主要應(yīng)用于SQL數(shù)據(jù)庫系統(tǒng)中。
【專利說明】并發(fā)請求的控制方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)【技術(shù)領(lǐng)域】,尤其涉及一種并發(fā)請求的控制方法及裝置。
【背景技術(shù)】
[0002]在PostgresQL、MySQL等數(shù)據(jù)庫系統(tǒng)中,客戶端訪問數(shù)據(jù)庫的請求由介于客戶端與數(shù)據(jù)庫服務(wù)器之間的應(yīng)用服務(wù)器代為轉(zhuǎn)發(fā)。應(yīng)用服務(wù)器將客戶端發(fā)送的訪問請求發(fā)送給數(shù)據(jù)庫服務(wù)器,接收并向客戶端下發(fā)數(shù)據(jù)庫服務(wù)器返回的數(shù)據(jù)內(nèi)容。
[0003]通常,網(wǎng)內(nèi)客戶端的訪問請求是隨機(jī)發(fā)起的,當(dāng)同時發(fā)起訪問請求的客戶端過多時(例如同時發(fā)起500個請求),數(shù)據(jù)庫負(fù)荷較重,容易發(fā)生崩潰。因此,對訪問請求數(shù)量進(jìn)行合理控制就成為保障數(shù)據(jù)庫運(yùn)行效率的一種必然手段。
[0004]目前,實(shí)際應(yīng)用中主要通過設(shè)置并發(fā)數(shù)上限的方式對客戶端的訪問請求進(jìn)行限制。在數(shù)據(jù)庫系統(tǒng)啟動運(yùn)行時,網(wǎng)絡(luò)側(cè)加載人工設(shè)定的并發(fā)數(shù)上限(例如180),當(dāng)同一時刻上訪問請求的并發(fā)數(shù)超過并發(fā)數(shù)上限時,應(yīng)用服務(wù)器對超出部分的訪問請求予以拒絕。這種方式雖然可以對數(shù)據(jù)庫負(fù)荷進(jìn)行有效調(diào)節(jié),但是訪問請求被拒的客戶端將無法獲得請求的數(shù)據(jù)內(nèi)容。
【發(fā)明內(nèi)容】
[0005]鑒于上述問題,本發(fā)明提供了一種并發(fā)請求的控制方法及裝置,能夠解決現(xiàn)有技術(shù)中因并發(fā)數(shù)限制導(dǎo)致的部分訪問請求被拒的問題。
[0006]為解決上述技術(shù)問題,一方面,本發(fā)明提供了一種并發(fā)請求的控制方法,包括:
[0007]當(dāng)訪問請求的實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,對超出部分的訪問請求進(jìn)行緩存;
[0008]定期查詢當(dāng)前的實(shí)際并發(fā)數(shù);
[0009]若所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限,則加入所述緩存的訪問請求以進(jìn)行處理。
[0010]另一方面,本發(fā)明還提供了一種并發(fā)請求的控制裝置,包括:
[0011]存儲單元,用于當(dāng)訪問請求的實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,對超出部分的訪問請求進(jìn)行緩存;
[0012]查詢單元,用于定期查詢當(dāng)前的實(shí)際并發(fā)數(shù);
[0013]處理單元,用于當(dāng)所述查詢單元查詢所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入所述存儲單元緩存的訪問請求以進(jìn)行處理。
[0014]借由上述技術(shù)方案,本發(fā)明提供的并發(fā)請求的控制方法及裝置,能夠?qū)Τ霾l(fā)數(shù)上限的訪問請求進(jìn)行緩存,當(dāng)并發(fā)數(shù)空閑時,將緩存的訪問請求發(fā)送給數(shù)據(jù)庫服務(wù)器進(jìn)行處理。與現(xiàn)有技術(shù)中拒絕超出部分的訪問請求相比,本發(fā)明能夠?qū)⒉⑿刑幚淼拇罅吭L問請求分解到時序上進(jìn)行串行處理,從而保障每個客戶端的數(shù)據(jù)訪問權(quán)利。
[0015]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
【專利附圖】
【附圖說明】
[0016]通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0017]圖1示出了本發(fā)明實(shí)施例中一種并發(fā)請求的控制方法的流程圖;
[0018]圖2示出了本發(fā)明實(shí)施例中SQL語句列表的示意圖;
[0019]圖3示出了本發(fā)明實(shí)施例中另一種并發(fā)請求的控制方法的流程圖;
[0020]圖4示出了本發(fā)明實(shí)施例中訪問請求隨機(jī)搶占的示意圖;
[0021 ]圖5示出了本發(fā)明實(shí)施例中隨機(jī)選取訪問請求的示意圖;
[0022]圖6示出了本發(fā)明實(shí)施例中又一種并發(fā)請求的控制方法的流程圖;
[0023]圖7示出了本發(fā)明實(shí)施例中不同類型隊(duì)列的示意圖;
[0024]圖8示出了本發(fā)明實(shí)施例中一種并發(fā)請求的控制裝置的結(jié)構(gòu)示意圖;
[0025]圖9示出了本發(fā)明實(shí)施例中另一種并發(fā)請求的控制裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0026]下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0027]為防止超出并發(fā)數(shù)上限的訪問請求被拒絕,本發(fā)明實(shí)施例提供了一種并發(fā)請求的控制方法,如圖1所示,該方法包括:
[0028]101、當(dāng)訪問請求的實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,服務(wù)器對超出部分的訪問請求進(jìn)行緩存。
[0029]本方法的執(zhí)行主體為應(yīng)用服務(wù)器,后續(xù)簡稱服務(wù)器。在客戶端訪問數(shù)據(jù)庫的過程中,服務(wù)器查詢當(dāng)前時刻上的同時處理的訪問請求數(shù)量,獲得實(shí)際并發(fā)數(shù)。當(dāng)實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,表明數(shù)據(jù)庫的處理能力已達(dá)到飽和,此時服務(wù)器對超出部分的訪問請求進(jìn)行本地緩存。
[0030]示例性的,假設(shè)預(yù)設(shè)的并發(fā)數(shù)上限為180,即同一時刻上數(shù)據(jù)庫最多允許對不超過180條訪問請求同時進(jìn)行訪問。當(dāng)某一時刻上同時發(fā)起的訪問請求為210條時,服務(wù)器將其中的180條訪問請求轉(zhuǎn)發(fā)給數(shù)據(jù)庫進(jìn)行響應(yīng),而對于剩下的30條訪問請求,服務(wù)器將其保存在本地緩存中。
[0031]本實(shí)施例中所謂的數(shù)據(jù)庫處理能力飽和主要是指數(shù)據(jù)庫為處理訪問請求分配的處理資源(例如緩存)已被用滿。通常數(shù)據(jù)庫除響應(yīng)訪問請求外還具有數(shù)據(jù)讀寫、數(shù)據(jù)分析等其他功能,在分配處理資源時一般不會將數(shù)據(jù)庫的所有處理資源都分配給響應(yīng)訪問請求之用,因此本實(shí)施例中所指的處理能力飽和程度并不是真正意義上能夠使數(shù)據(jù)庫癱瘓的飽和程度。
[0032]本實(shí)施例中,在客戶端訪問數(shù)據(jù)庫之前,服務(wù)器需要首先開辟出專用于保存訪問請求的緩存空間。服務(wù)器可以在內(nèi)存中開辟該緩存空間,也可以在硬盤中開辟該緩存空間,本實(shí)施例對此不作限制。此外,緩存空間的大小可以由網(wǎng)管人員根據(jù)經(jīng)驗(yàn)值設(shè)定,也可以由服務(wù)器根據(jù)對局域網(wǎng)內(nèi)的日常請求數(shù)量或請求語句大小的統(tǒng)計(jì)結(jié)果,自行設(shè)定得出,本實(shí)施例對此同樣不做限制。
[0033]在緩存超出部分的訪問請求時,服務(wù)器可以依據(jù)不同的算法對超出部分的訪問請求進(jìn)行選取。一種可行的實(shí)現(xiàn)方式為,服務(wù)器從當(dāng)前的訪問請求中隨機(jī)選取并發(fā)數(shù)上限數(shù)量的訪問請求進(jìn)行處理,例如從210條訪問請求中隨機(jī)選擇180條訪問請求進(jìn)行處理,并對剩余30條訪問請求進(jìn)行緩存。或者,服務(wù)器也可以根據(jù)訪問請求的優(yōu)先級高低、語句長度或請求的數(shù)據(jù)類型對所有訪問請求進(jìn)行排序,并從排序后的訪問請求中選取并發(fā)數(shù)上限數(shù)量的訪問請求進(jìn)行處理。本實(shí)施例不對服務(wù)器選取訪問請求的規(guī)則進(jìn)行限定。
[0034]實(shí)際應(yīng)用中,各個客戶端上報(bào)訪問請求的時間點(diǎn)通常是隨機(jī)的,鮮有大量客戶端同時上報(bào)訪問請求的情況,因此更加適用于實(shí)際的請求選取方式為:服務(wù)器在接收到某條訪問請求時,只要當(dāng)前的實(shí)際并發(fā)數(shù)未達(dá)到并發(fā)數(shù)上限,服務(wù)器就對接收的訪問請求進(jìn)行處理,而當(dāng)當(dāng)前的實(shí)際并發(fā)數(shù)達(dá)到并發(fā)數(shù)上限時,服務(wù)器對接收的訪問請求進(jìn)行緩存,即月艮務(wù)器按照發(fā)起先后順序?qū)υL問請求進(jìn)行處理緩存。
[0035]需要說明的是,服務(wù)器接收到的訪問請求是由不同客戶端上報(bào)而來的,通常同一時刻上的一個客戶端只上報(bào)一條訪問請求,但實(shí)際應(yīng)用中也不排除客戶端啟動多線程同時上報(bào)多個訪問請求的情況,因此本實(shí)施例中訪問請求與客戶端之間的關(guān)系并非一定為一一映射。
[0036]102、服務(wù)器定期查詢當(dāng)前的實(shí)際并發(fā)數(shù)。
[0037]在對超出部分的訪問請求進(jìn)行緩存后,服務(wù)器定期查詢當(dāng)前的實(shí)際并發(fā)數(shù)。由于在執(zhí)行完步驟101后實(shí)際并發(fā)數(shù)已達(dá)到并發(fā)數(shù)上限,服務(wù)器無法及時對超出部分的訪問請求進(jìn)行加入處理,因此服務(wù)器需要定期對并發(fā)數(shù)的“飽和狀態(tài)”進(jìn)行檢查,即定期查詢當(dāng)前的實(shí)際并發(fā)數(shù)。如果當(dāng)前的實(shí)際并發(fā)數(shù)仍等于并發(fā)數(shù)上限,則服務(wù)器重復(fù)執(zhí)行步驟102,在下一時刻繼續(xù)進(jìn)行查詢,如果當(dāng)前的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限(例如因某些訪問請求響應(yīng)完畢或響應(yīng)失敗而釋放對應(yīng)的處理資源),則服務(wù)器執(zhí)行步驟103,利用釋放的處理資源對緩存的訪問請求進(jìn)行處理。
[0038]本實(shí)施例中所謂的定期查詢可以有不同的實(shí)現(xiàn)方式,例如服務(wù)器按照預(yù)設(shè)的時間間隔周期性查詢,或者根據(jù)網(wǎng)管人員下發(fā)的查詢指令進(jìn)行查詢,或者在緩存的訪問請求數(shù)量超過一定閾值時進(jìn)行查詢等。其中,對于周期性查詢的方式而言,本實(shí)施例并不對具體的時間間隔進(jìn)行限制,當(dāng)該時間間隔被設(shè)置為趨近于O時,服務(wù)器可以實(shí)現(xiàn)對實(shí)際并發(fā)數(shù)的實(shí)時查詢。
[0039]103、若當(dāng)前的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限,則服務(wù)器加入緩存的訪問請求以進(jìn)行處理。
[0040]若步驟102中查詢的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限,則表明本次查詢時數(shù)據(jù)庫釋放了部分處理資源,因此服務(wù)器執(zhí)行步驟103,從緩存中選取保存的訪問請求進(jìn)行處理。在從緩存中選取訪問請求后,服務(wù)器將其從緩存中清除。
[0041]在選取緩存的訪問請求時,服務(wù)器可以根據(jù)釋放的處理資源大小選取部分或全部訪問請求進(jìn)行處理。通常,數(shù)據(jù)庫在處理完一條訪問請求后,會立即釋放該訪問請求占用的處理資源,處理完的訪問請求越多釋放的處理資源也越多。因此從本質(zhì)上講,服務(wù)器從緩存中選取的訪問請求數(shù)量由服務(wù)器查詢實(shí)際并發(fā)數(shù)的間隔時間長短決定,間隔時間越長,數(shù)據(jù)庫釋放的處理資源越多,服務(wù)器從緩存中選取的訪問請求數(shù)量也就越多。
[0042]與步驟101類似的,在從緩存中選取訪問請求時,服務(wù)器也可以采用隨機(jī)選取或排序選取的方式進(jìn)行實(shí)現(xiàn),本步驟對此不再進(jìn)行贅述。
[0043]在執(zhí)行完本步驟之后,服務(wù)器重復(fù)執(zhí)行步驟102及步驟103,對緩存中的剩余訪問請求先后進(jìn)行處理,直至緩存中未再保存任何訪問請求為止。
[0044]實(shí)際應(yīng)用中,服務(wù)器在執(zhí)行上述步驟101至步驟103時,局域網(wǎng)內(nèi)的客戶端還會不斷上報(bào)新的訪問請求。對于此種情況,服務(wù)器將新接收的訪問請求直接保存到緩存中等待后續(xù)處理。
[0045]本實(shí)施例中處理訪問請求的過程涉及:將訪問請求轉(zhuǎn)發(fā)給數(shù)據(jù)庫,由數(shù)據(jù)庫對該請求進(jìn)行響應(yīng),查找其所請求的數(shù)據(jù)內(nèi)容,接收并向客戶端下發(fā)數(shù)據(jù)庫返回的數(shù)據(jù)內(nèi)容等。
[0046]本實(shí)施例提供的并發(fā)請求的控制方法,能夠?qū)Τ霾l(fā)數(shù)上限的訪問請求進(jìn)行緩存,當(dāng)并發(fā)數(shù)空閑時,將緩存的訪問請求發(fā)送給數(shù)據(jù)庫服務(wù)器進(jìn)行處理。與現(xiàn)有技術(shù)中拒絕超出部分的訪問請求相比,本實(shí)施例能夠?qū)⒉⑿刑幚淼拇罅吭L問請求分解到時序上進(jìn)行串行處理,從而保障每個客戶端的數(shù)據(jù)訪問權(quán)利。
[0047]進(jìn)一步的,作為圖1所示方法的一種實(shí)現(xiàn)方式,在本發(fā)明的另一實(shí)施例中,上述步驟101至步驟103的執(zhí)行可以由應(yīng)用服務(wù)器上的ngx模塊(ngx_lua_module)完成。ngx模塊中內(nèi)嵌有Iua解析器,支持高并發(fā)數(shù)、高性能、支持非阻塞的數(shù)據(jù)庫操作,可以用于Windows系統(tǒng)或Linux系統(tǒng)中。
[0048]在接收到客戶端上報(bào)的訪問請求后,ngx模塊為每個訪問請求分別建立一個協(xié)程,后續(xù)對請求的緩存及處理均基于協(xié)程進(jìn)行。與現(xiàn)有技術(shù)中通過線程發(fā)起訪問請求不同的是,本實(shí)施例中采用協(xié)程發(fā)起訪問請求,相對線程而言,協(xié)程只涉及一個主進(jìn)程,沒有額外的線程,不會像線程一樣占用服務(wù)器或數(shù)據(jù)庫的CPU資源,因此本實(shí)施例相對現(xiàn)有技術(shù)而言,不會因并發(fā)數(shù)的增加而影響到數(shù)據(jù)庫的處理效率。
[0049]進(jìn)一步的,作為對圖1步驟102的細(xì)化,在本發(fā)明的另一實(shí)施例中,服務(wù)器可以通過不同的方式實(shí)現(xiàn)對當(dāng)前實(shí)際并發(fā)數(shù)的查詢,具體的:
[0050]方式一
[0051]通過請求列表查詢
[0052]在對訪問請求進(jìn)行處理時,服務(wù)器會將訪問請求的語句寫入到請求列表中,當(dāng)該訪問請求處理完畢后,將該請求對應(yīng)的語句從請求列表中清除。因此服務(wù)器可以定期對請求列表中的語句數(shù)量進(jìn)行統(tǒng)計(jì),通過請求列表中記錄的語句數(shù)量獲得當(dāng)前的實(shí)際并發(fā)數(shù)。
[0053]實(shí)際應(yīng)用中,不同數(shù)據(jù)庫的請求語句通常不同,以PostgresQL或MySQL數(shù)據(jù)庫使用的SQL語句為例,服務(wù)器記錄的請求列表可以如圖2所示。需要說明的是,圖2僅用于對一種可能的實(shí)現(xiàn)方式進(jìn)行說明,其中的格式或具體參數(shù)均為示例性的,不作為對請求列表實(shí)際形式的限定。
[0054]方式二
[0055]通過計(jì)數(shù)器查詢
[0056]服務(wù)器可以為訪問請求的處理增加一個計(jì)數(shù)器,該計(jì)數(shù)器用于在實(shí)際并發(fā)數(shù)發(fā)生變化時進(jìn)行增減計(jì)數(shù)。當(dāng)一個新的訪問請求被加入處理時,該計(jì)數(shù)器加1,當(dāng)一個訪問請求處理完成時,該計(jì)數(shù)器減I。服務(wù)器可以通過對計(jì)數(shù)器的定期讀取,獲得當(dāng)前的實(shí)際并發(fā)數(shù)。
[0057]下面,本發(fā)明將通過其他幾個實(shí)施例對圖1中步驟103進(jìn)行說明。
[0058]在本發(fā)明的一個實(shí)施例中,當(dāng)數(shù)據(jù)庫釋放處理資源時,服務(wù)器可以通過隨機(jī)搶占的方式將緩存的訪問請求加入處理。如圖3所示,該方案包括:
[0059]301、服務(wù)器為每個緩存的訪問請求獨(dú)立查詢當(dāng)前的實(shí)際并發(fā)數(shù)。
[0060]作為對圖1步驟102的細(xì)化,服務(wù)器為緩存的每一個訪問請求分別單獨(dú)進(jìn)行定期查詢。如前所述,服務(wù)器為每一個訪問請求都單獨(dú)建立一個協(xié)程,本步驟中服務(wù)器即是基于各個訪問請求的協(xié)程實(shí)現(xiàn)查詢的,因此,實(shí)際并發(fā)數(shù)的查詢是以訪問請求為單位獨(dú)立進(jìn)行的。示例性的,假設(shè)服務(wù)器緩存有12條訪問請求,那么服務(wù)器每次需要分別進(jìn)行12次查詢。
[0061]對于周期性查詢的方式,服務(wù)器可以針對不同的訪問請求采用不同的時間間隔,也可以針對所有的訪問請求采用統(tǒng)一的時間間隔。本實(shí)施例中查詢時間間隔的取值范圍可以為Ims至100ms,其中,較為典型的取值包括:5ms、10ms、30ms、50ms、90ms等。
[0062]需要說明的是,對于不同的訪問請求,雖然服務(wù)器按照相同的時間間隔查詢,但是每個訪問請求的查詢時間點(diǎn)并不一定相同,這是由于:不同客戶端上報(bào)訪問請求的時間是隨機(jī)的,因此服務(wù)器接收不同訪問請求的時間點(diǎn)也是隨機(jī)的,由此各條訪問請求起始查詢的時間點(diǎn)就會有所不同。
[0063]302、當(dāng)當(dāng)前的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限時,服務(wù)器加入最先查詢實(shí)際并發(fā)數(shù)的訪問請求。
[0064]如前所述,每條訪問請求的查詢時間點(diǎn)是隨機(jī)確定的,因此在數(shù)據(jù)庫釋放處理資源后,服務(wù)器將最先進(jìn)行查詢的訪問請求進(jìn)行加入處理。采用這種實(shí)現(xiàn)方式加入的訪問請求完全是隨機(jī)的,因此這種方式也稱為隨機(jī)搶占。實(shí)際應(yīng)用中隨機(jī)搶占的加入方式無需建立隊(duì)列,相應(yīng)的,也就無需為隊(duì)列分配緩存和計(jì)數(shù)器等資源,因此實(shí)現(xiàn)起來較為簡單。
[0065]舉例進(jìn)行說明,如圖4所示,服務(wù)器按照50ms秒的時間間隔對2條訪問請求進(jìn)行搶占處理。在以O(shè)ms為起點(diǎn)的時間軸上,請求I分別在第0ms、第50ms、第100ms、第150ms、第200ms上進(jìn)行查詢,請求2則分別在第20ms、第70ms、第120ms、第170ms、第220ms上進(jìn)行查詢。如果數(shù)據(jù)庫在第95ms釋放一條請求,則在此之后最先進(jìn)行查詢的是請求I (第10ms查詢),因此服務(wù)器對請求I進(jìn)行加入處理。而如果數(shù)據(jù)庫在第160ms釋放一條請求,則服務(wù)器對請求2 (第170ms查詢)進(jìn)行加入處理。
[0066]需要說明的是,上述示例僅以數(shù)據(jù)庫釋放一條請求為例進(jìn)行的說明,這種情況下服務(wù)器隨機(jī)搶占的機(jī)會為一條請求。而在實(shí)際應(yīng)中,數(shù)據(jù)庫可能在幾乎相同的時刻上對多條請求進(jìn)行處理,如果這多條請求的處理時長相近,那么服務(wù)器可能會在幾乎相同的時刻上釋放多條請求。這種情況下緩存中會有多條訪問請求“搶占”成功。例如在圖4所示示例中,如果數(shù)據(jù)在第95ms釋放了 2條請求,那么分別在第10ms和第120ms進(jìn)行查詢的請求I及請求2均可以被加入處理。但需要注意的是,2條請求雖然都被服務(wù)器加入處理,但是兩者的起始處理時間仍由各自的查詢時刻決定,即請求I在第10ms被加入處理,而請求2則是在第120ms被加入處理。
[0067]同樣作為對圖1步驟103的說明,在本發(fā)明的另一實(shí)施例中,當(dāng)數(shù)據(jù)庫釋放處理資源時,服務(wù)器還可以通過隨機(jī)選取的方式將緩存的訪問請求加入處理。具體的,當(dāng)當(dāng)前的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限時,服務(wù)器加入從緩存的訪問請求中隨機(jī)選取出的訪問請求。例如,如圖5所示,當(dāng)數(shù)據(jù)庫釋放了 4條請求時,服務(wù)器在對實(shí)際并發(fā)數(shù)進(jìn)行查詢后,可以在緩存的15條訪問請求中隨機(jī)選取請求2、請求5、請求9及請求13進(jìn)行處理。
[0068]實(shí)際應(yīng)用中,服務(wù)器可以采用諸如哈希(Hash)算法等規(guī)則實(shí)現(xiàn)訪問請求的選取,或者服務(wù)器也可以對排序后的訪問請求進(jìn)行抽樣選取,例如“逢五抽一”或“逢時抽一”等,本實(shí)施例不對服務(wù)器采用的隨機(jī)算法進(jìn)行限制。
[0069]與上述實(shí)施例類似的,本實(shí)施例中服務(wù)器定期查詢的時間間隔也可被設(shè)置為Ims至10ms中的任一數(shù)值,其中,較為典型的取值包括:5ms、10ms、30ms、50ms、90ms等。但是與上述實(shí)施例不同的是,本實(shí)施例中,服務(wù)器不再針對訪問請求進(jìn)行查詢,而是進(jìn)行統(tǒng)一查詢。例如,在上述實(shí)施例中,對于12條訪問請求而言,服務(wù)器需要一次性進(jìn)行12次查詢操作(當(dāng)然并非一定是在同一時刻上完成);而在本實(shí)施例中,無論緩存了多少條訪問請求,服務(wù)器在每次時間間隔到達(dá)時僅進(jìn)行I次查詢操作。
[0070]同樣作為對圖1步驟103的說明,在本發(fā)明的再一實(shí)施例中,當(dāng)數(shù)據(jù)庫釋放處理資源時,服務(wù)器還可以根據(jù)訪問請求的排序?qū)υL問請求進(jìn)行順次選取。具體的,如圖6所示,該方案包括:
[0071 ] 601、對緩存的訪問請求進(jìn)行排隊(duì)。
[0072]本實(shí)施例中,服務(wù)器選取訪問請求的基礎(chǔ)在于,緩存的訪問請求能夠以一定的規(guī)則進(jìn)行排序。因此與前述實(shí)施例不同的是,本實(shí)施例中服務(wù)器首先需要按照一定的排序規(guī)則對訪問請求進(jìn)行排序。
[0073]在本實(shí)施例的一種實(shí)現(xiàn)方式中,服務(wù)器可以按照訪問請求優(yōu)先級由高到低的順序?qū)彺娴脑L問請求進(jìn)行排序,或者也可以按照請求語句由長到短的順序?qū)彺娴脑L問請求進(jìn)行排序,再或者,服務(wù)器還可以按照緩存的先后順序?qū)彺娴脑L問請求進(jìn)行排序。本實(shí)施例不對服務(wù)器采用的排序規(guī)則進(jìn)行具體限制。
[0074]在進(jìn)行排序時,服務(wù)器在內(nèi)存中開辟一塊緩存空間,建立一個足夠長的隊(duì)列(當(dāng)然也可以建立多個隊(duì)列),在對緩存的訪問請求做好排序后,服務(wù)器按照排序結(jié)果對訪問請求順序進(jìn)行入隊(duì)。
[0075]602、當(dāng)當(dāng)前的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限時,加入緩存隊(duì)列隊(duì)首的訪問請求。
[0076]當(dāng)數(shù)據(jù)庫釋放請求對應(yīng)處理資源時,服務(wù)器從隊(duì)列的隊(duì)首開始,順次選擇一條或多條訪問請求(由數(shù)據(jù)庫釋放的處理資源大小決定)進(jìn)行處理。
[0077]當(dāng)有新的訪問請求上報(bào)時,服務(wù)器可以采用兩種方式將其加入隊(duì)列:第一種,服務(wù)器對包括新請求在內(nèi)的所有請求重新進(jìn)行排序,獲得新的請求隊(duì)列。第二種,服務(wù)器不再進(jìn)行二次排序,直接將新請求加入到隊(duì)尾(本質(zhì)相當(dāng)于按照請求先后順序進(jìn)行排序)。
[0078]可選的,在本實(shí)施例的另一種實(shí)現(xiàn)方式中,服務(wù)器還可以從不同的維度對緩存的訪問請求分別進(jìn)行分類,并針對每種分類分別進(jìn)行排隊(duì)。例如,對于7條數(shù)據(jù)請求而言,月艮務(wù)器從“優(yōu)先級”、“語句長度”以及“請求發(fā)起順序”3個維度對7條訪問請求獨(dú)立進(jìn)行排序,得到如圖7所示的3條隊(duì)列。
[0079]在進(jìn)行實(shí)際并發(fā)數(shù)查詢時,服務(wù)器按照前述“隨機(jī)搶占”的方式分別為3條隊(duì)列發(fā)起查詢,當(dāng)數(shù)據(jù)庫釋放一條請求時,服務(wù)器對最先搶占到的隊(duì)列的隊(duì)首請求加入進(jìn)行處理操作。需要說明的是,由于3條隊(duì)列是對同一批訪問請求在不同緯度上的分類,因此為避免不同隊(duì)列對同一訪問請求的重復(fù)處理,在某條隊(duì)列中的某個訪問請求出隊(duì)進(jìn)行處理后,月艮務(wù)器需要刪除其他隊(duì)列中的相同訪問請求。例如在如7中,當(dāng)隊(duì)列I中的訪問請求5出隊(duì)進(jìn)行處理時,服務(wù)器需要分別刪除隊(duì)列2和隊(duì)列3中的訪問請求5。
[0080]進(jìn)一步的,作為與上述各實(shí)施例的結(jié)合,在本發(fā)明的另一實(shí)施例中,服務(wù)器還可以對訪問請求的緩存時間進(jìn)行限制。實(shí)際應(yīng)用中,如果訪問請求緩存時間過長,則客戶端側(cè)請求響應(yīng)的時間也會相應(yīng)延長,過長的響應(yīng)時間會降低客戶端側(cè)的服務(wù)質(zhì)量(Quality ofService,簡稱QoS)。同時,訪問請求緩存過久也會對服務(wù)器有限的內(nèi)存空間造成過度占用,增加服務(wù)器的負(fù)荷。因此在緩存超過一定時間后,對訪問請求進(jìn)行及時處理,對于服務(wù)器的穩(wěn)定運(yùn)行就顯得至關(guān)重要。在本實(shí)施例中,服務(wù)器可以預(yù)先獲取設(shè)定的計(jì)時時長,在對訪問請求進(jìn)行緩存后,服務(wù)器啟動對訪問請求的計(jì)時。若訪問請求在計(jì)時超時前得到處理,則服務(wù)器從緩存清除該訪問請求,并對計(jì)時器進(jìn)行清零。若訪問請求在計(jì)時超時時仍未得到處理,則服務(wù)器直接對緩存的訪問請求進(jìn)行清除,其作用相當(dāng)于現(xiàn)有技術(shù)中的請求被拒,同時,服務(wù)器通知客戶端數(shù)據(jù)請求失敗。
[0081]需要說明的是,本方案是以客戶端側(cè)的響應(yīng)時長為首要因素進(jìn)行的設(shè)計(jì),而當(dāng)首要因素發(fā)生改變時,服務(wù)器也可以對應(yīng)改變相應(yīng)的策略。例如,當(dāng)首要因素改變?yōu)樵L問請求的成功率時,服務(wù)器可以在計(jì)時超時時,對訪問請求進(jìn)行計(jì)時清零,使其重新進(jìn)行計(jì)時,由此保證訪問請求在得到處理前不會被清除出緩存。當(dāng)然,針對后者實(shí)現(xiàn)方式而言,更為簡便的做法可以是直接取消對訪問請求的計(jì)時。
[0082]此外,當(dāng)緩存的訪問請求加入失敗時,服務(wù)器也可以對緩存的訪問請求進(jìn)行計(jì)時清零,以保證緩存的剩余訪問請求有足夠長的時間等待處理。本方式是針對訪問請求加入失敗時進(jìn)行的計(jì)時清零,例如在隨機(jī)搶占失敗時,服務(wù)器對緩存中剩余的訪問請求進(jìn)行計(jì)時清零。與上述計(jì)時超時清零不同,服務(wù)器在對請求進(jìn)行計(jì)時清零時,訪問請求的計(jì)時尚未超時。
[0083]實(shí)際應(yīng)用中,上述計(jì)時時長的設(shè)定范圍可以是Is至10s,其中較為典型的設(shè)定包括 3s、5s 及 8s。
[0084]進(jìn)一步的,作為與上述各實(shí)施例的結(jié)合,在本發(fā)明的另一實(shí)施例中,服務(wù)器還可以對并發(fā)數(shù)上限進(jìn)行設(shè)置?,F(xiàn)有技術(shù)中的并發(fā)數(shù)上限通常時固定的,當(dāng)并發(fā)數(shù)上限過大時,月艮務(wù)器與數(shù)據(jù)庫的資源占用過多,會降低系統(tǒng)的運(yùn)行效率;當(dāng)并發(fā)數(shù)上限過小時,無法滿足網(wǎng)絡(luò)的業(yè)務(wù)需求,數(shù)據(jù)請求的失敗率會大大增加。而在本實(shí)施例中,服務(wù)器可以根據(jù)不同的參數(shù)獲得合適的并發(fā)數(shù)上限,由此在保證系統(tǒng)運(yùn)行效率的基礎(chǔ)上降低請求訪問的失敗率。
[0085]在本實(shí)施例的一種實(shí)現(xiàn)方式中,服務(wù)器可以根據(jù)后端的處理參數(shù)設(shè)置并發(fā)數(shù)上限。本實(shí)現(xiàn)方式中的后端主要是指數(shù)據(jù)庫服務(wù)器,其處理參數(shù)包括但不限于是=CPU占例、內(nèi)存占例、內(nèi)存大小、網(wǎng)卡速度、硬盤速度、硬盤大小、網(wǎng)絡(luò)帶寬、(PU緩存大小及CPU寄存器寬度。當(dāng)數(shù)據(jù)庫的處理負(fù)荷較大(例如內(nèi)存占例過高或CPU寄存器寬度較小)時,可以適當(dāng)調(diào)小并發(fā)數(shù)上限。
[0086]在本實(shí)施例的另一種實(shí)現(xiàn)方式中,服務(wù)器還可以根后端處理訪問請求的時長設(shè)置并發(fā)數(shù)上限。數(shù)據(jù)庫響應(yīng)訪問請求的時間長短也可以反映數(shù)據(jù)庫的負(fù)荷大小(或處理能力大小)。當(dāng)數(shù)據(jù)庫響應(yīng)請求的時長過長時,服務(wù)器可以適當(dāng)調(diào)小并發(fā)數(shù)上限。
[0087]實(shí)際應(yīng)用中,可以根據(jù)隨機(jī)抽樣出的訪問請求的響應(yīng)時長設(shè)定并發(fā)數(shù)上限,也可以對多個訪問請求的響應(yīng)時長取平均值,并據(jù)此均值設(shè)定并發(fā)數(shù)上限。
[0088]在本實(shí)施例的另一種實(shí)現(xiàn)方式中,服務(wù)器還可以根據(jù)后端的緩存大小及訪問請求的語句長度設(shè)置并發(fā)數(shù)上限。通常數(shù)據(jù)庫會為訪問請求的響應(yīng)分配一定的緩存空間,而不同語句長度的訪問請求會占用不同大小的緩存空間,因此,服務(wù)器可以據(jù)此計(jì)算出并發(fā)數(shù)上限。示例性的,若數(shù)據(jù)庫分配的緩存大小為32M、每條訪問請求的語句長度均為500K,則服務(wù)器設(shè)置的并發(fā)數(shù)上限為32M/500K = 64。當(dāng)然,實(shí)際應(yīng)用中,為使數(shù)據(jù)庫緩存保持一定冗余,設(shè)定的并發(fā)數(shù)上限也可以稍少于64。
[0089]通常,客戶端上報(bào)訪問請求的語句長短不盡相同,從幾K到幾百M(fèi)不等。因此在設(shè)置并發(fā)數(shù)上限時,服務(wù)器可以采用較為典型的語句長度進(jìn)行計(jì)算,例如絕大多數(shù)訪問請求的語句長度處于百K級別,因此可以采用該級別長度數(shù)值進(jìn)行計(jì)算;或者,服務(wù)器也可以對一段時間內(nèi)處理過的訪問請求進(jìn)行統(tǒng)計(jì),獲得其語句長度的平均值,參與上述計(jì)算。
[0090]以上幾種實(shí)現(xiàn)方式僅作為對設(shè)置并發(fā)數(shù)上限的示例性說明,實(shí)際應(yīng)用中,服務(wù)器還可以但不限于根據(jù)網(wǎng)絡(luò)中的客戶端數(shù)量或其他具體參數(shù)設(shè)置并發(fā)數(shù)上限,本實(shí)施例對此不作限制。
[0091]此外,在設(shè)置并發(fā)數(shù)上限的時機(jī)上,服務(wù)器可以在系統(tǒng)啟動運(yùn)行時對并發(fā)數(shù)上限進(jìn)行初始化設(shè)置,也可以在系統(tǒng)運(yùn)行過程中對并發(fā)數(shù)上限進(jìn)行動態(tài)設(shè)置,本實(shí)施例對此同樣不作限制。
[0092]本實(shí)施例提供的用于設(shè)置并發(fā)數(shù)上限的方案,能夠根據(jù)網(wǎng)絡(luò)的實(shí)際參數(shù)對并發(fā)數(shù)上限進(jìn)行設(shè)定,在保證滿足客戶端業(yè)務(wù)需求的同時盡量減小數(shù)據(jù)庫的負(fù)荷。并且,與現(xiàn)有技術(shù)中并發(fā)數(shù)上限過大相比,本實(shí)施例由于降低了并發(fā)數(shù)上限,因此能夠節(jié)省數(shù)據(jù)庫的處理資源,縮短數(shù)據(jù)庫響應(yīng)訪問請求的時間,進(jìn)而在并發(fā)數(shù)上限降低的情況下提高系統(tǒng)處理訪問請求的吞吐量。
[0093]進(jìn)一步的,作為對上述各方法實(shí)施例的實(shí)現(xiàn),本發(fā)明另一實(shí)施例還提供了一種并發(fā)請求的控制裝置。如圖8所示,該裝置包括:存儲單元81、查詢單元82以及處理單元83,其中,
[0094]存儲單元81,用于當(dāng)訪問請求的實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,對超出部分的訪問請求進(jìn)行緩存;
[0095]查詢單元82,用于定期查詢當(dāng)前的實(shí)際并發(fā)數(shù);
[0096]處理單元83,用于當(dāng)查詢單元82查詢當(dāng)前的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限時,加入存儲單元81緩存的訪問請求以進(jìn)行處理。
[0097]進(jìn)一步的,如圖9所示,該裝置還包括:
[0098]建立單元84,用于在存儲單元81對超出部分的訪問請求進(jìn)行緩存之前,為每個訪問請求獨(dú)立建立協(xié)程。
[0099]進(jìn)一步的,如圖9所示,查詢單元82包括:
[0100]第一查詢模塊821,用于定期對請求列表中的語句數(shù)量進(jìn)行統(tǒng)計(jì),請求列表用于記錄當(dāng)前正在處理的訪問請求。
[0101]進(jìn)一步的,如圖9所示,查詢單元82包括:
[0102]第二查詢模塊822,用于定期讀取當(dāng)前計(jì)數(shù)器中記錄的實(shí)際并發(fā)數(shù),計(jì)數(shù)器用于在實(shí)際并發(fā)數(shù)發(fā)生變化時進(jìn)行增減計(jì)數(shù)。
[0103]進(jìn)一步的,如圖9所示,處理單元83,包括:第一處理模塊831 ;
[0104]查詢單元82,用于為每個緩存的訪問請求獨(dú)立查詢當(dāng)前的實(shí)際并發(fā)數(shù);
[0105]第一處理模塊831,用于當(dāng)當(dāng)前的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限時,加入最先查詢實(shí)際并發(fā)數(shù)的訪問請求。
[0106]進(jìn)一步的,如圖9所示,處理單元83,包括:
[0107]第二處理模塊832,用于當(dāng)當(dāng)前的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限時,加入從緩存的訪問請求中隨機(jī)選取出的訪問請求。
[0108]進(jìn)一步的,如圖9所示,處理單元83,包括:
[0109]第三處理模塊833,用于對緩存的訪問請求進(jìn)行排隊(duì),當(dāng)當(dāng)前的實(shí)際并發(fā)數(shù)小于并發(fā)數(shù)上限時,加入緩存隊(duì)列隊(duì)首的訪問請求。
[0110]進(jìn)一步的,如圖9所示,該裝置還包括:
[0111]計(jì)時單元85,用于在存儲單元81對超出部分的訪問請求進(jìn)行緩存之后,啟動對存儲單元81緩存的訪問請求的計(jì)時;
[0112]存儲單元81,還用于當(dāng)計(jì)時單元85檢測到緩存的訪問請求的計(jì)時超時時,清除緩存的訪問請求。
[0113]進(jìn)一步的,計(jì)時單元85,用于當(dāng)處理單元83對緩存的訪問請求加入失敗時,對存儲單元81緩存的訪問請求進(jìn)行計(jì)時清零。
[0114]進(jìn)一步的,如圖9所示,該裝置還包括:
[0115]設(shè)置單元86,用于設(shè)置并發(fā)數(shù)上限。
[0116]進(jìn)一步的,如圖9所示,設(shè)置單元86,包括:
[0117]第一設(shè)置模塊861,用于根據(jù)后端的處理參數(shù)設(shè)置并發(fā)數(shù)上限;
[0118]第二設(shè)置模塊862,用于根據(jù)后端處理訪問請求的時長設(shè)置并發(fā)數(shù)上限;
[0119]第三設(shè)置模塊863,用于根據(jù)后端的緩存大小及訪問請求的語句長度設(shè)置并發(fā)數(shù)上限。
[0120]進(jìn)一步的設(shè)置單元86,用于在系統(tǒng)啟動運(yùn)行時,對并發(fā)數(shù)上限進(jìn)行初始化設(shè)置;
[0121]設(shè)置單元86,還用于在系統(tǒng)運(yùn)行過程中,對并發(fā)數(shù)上限進(jìn)行動態(tài)設(shè)置。
[0122]本實(shí)施例提供的并發(fā)請求的控制裝置,能夠?qū)Τ霾l(fā)數(shù)上限的訪問請求進(jìn)行緩存,當(dāng)并發(fā)數(shù)空閑時,將緩存的訪問請求發(fā)送給數(shù)據(jù)庫服務(wù)器進(jìn)行處理。與現(xiàn)有技術(shù)中拒絕超出部分的訪問請求相比,本實(shí)施例提供的并發(fā)請求的控制裝置能夠?qū)⒉⑿刑幚淼拇罅吭L問請求分解到時序上進(jìn)行串行處理,從而保障每個客戶端的數(shù)據(jù)訪問權(quán)利。
[0123]本發(fā)明的實(shí)施例公開了:
[0124]Al、一種并發(fā)請求的控制方法,所述方法適用于數(shù)據(jù)庫服務(wù)器對并發(fā)請求進(jìn)行控制,其特征在于,所述方法包括:
[0125]當(dāng)訪問請求的實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,對超出部分的訪問請求進(jìn)行緩存;
[0126]定期查詢當(dāng)前的實(shí)際并發(fā)數(shù);
[0127]若所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限,則加入所述緩存的訪問請求以進(jìn)行處理。
[0128]A2、根據(jù)權(quán)利要求Al所述的方法,其特征在于,在所述對超出部分的訪問請求進(jìn)行緩存之前,所述方法進(jìn)一步包括:
[0129]為每個訪問請求獨(dú)立建立協(xié)程。
[0130]A3、根據(jù)權(quán)利要求Al所述的方法,其特征在于,所述定期查詢當(dāng)前的實(shí)際并發(fā)數(shù),包括:
[0131]定期對請求列表中的語句數(shù)量進(jìn)行統(tǒng)計(jì),所述請求列表用于記錄當(dāng)前正在處理的訪問請求。
[0132]A4、根據(jù)權(quán)利要求Al所述的方法,其特征在于,所述定期查詢當(dāng)前的實(shí)際并發(fā)數(shù),包括:
[0133]定期讀取當(dāng)前計(jì)數(shù)器中記錄的實(shí)際并發(fā)數(shù),所述計(jì)數(shù)器用于在所述實(shí)際并發(fā)數(shù)發(fā)生變化時進(jìn)行增減計(jì)數(shù)。
[0134]A5、根據(jù)權(quán)利要求A3或A4所述的方法,其特征在于,所述定期查詢當(dāng)前的實(shí)際并發(fā)數(shù),包括:
[0135]為每個緩存的訪問請求獨(dú)立查詢當(dāng)前的實(shí)際并發(fā)數(shù);
[0136]所述加入所述緩存的訪問請求以進(jìn)行處理,包括:
[0137]當(dāng)所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入最先查詢實(shí)際并發(fā)數(shù)的訪問請求。
[0138]A6、根據(jù)權(quán)利要求A3或A4所述的方法,其特征在于,所述加入所述緩存的訪問請求以進(jìn)行處理,包括:
[0139]當(dāng)所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入從所述緩存的訪問請求中隨機(jī)選取出的訪問請求。
[0140]A7、根據(jù)權(quán)利要求A3或A4所述的方法,其特征在于,所述加入所述緩存的訪問請求以進(jìn)行處理,包括:
[0141]對所述緩存的訪問請求進(jìn)行排隊(duì);
[0142]當(dāng)所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入所述緩存隊(duì)列隊(duì)首的訪問請求。
[0143]AS、根據(jù)權(quán)利要求Al所述的方法,其特征在于,在所述對超出部分的訪問請求進(jìn)行緩存之后,所述方法進(jìn)一步包括:
[0144]啟動對所述緩存的訪問請求的計(jì)時;
[0145]當(dāng)所述緩存的訪問請求的計(jì)時超時時,清除所述緩存的訪問請求。
[0146]A9、根據(jù)權(quán)利要求AS所述的方法,其特征在于,當(dāng)所述緩存的訪問請求加入失敗時,所述方法進(jìn)一步包括:
[0147]對所述緩存的訪問請求進(jìn)行計(jì)時清零。
[0148]A10、根據(jù)權(quán)利要求Al所述的方法,其特征在于,所述方法進(jìn)一步包括:
[0149]設(shè)置所述并發(fā)數(shù)上限。
[0150]All、根據(jù)權(quán)利要求AlO所述的方法,其特征在于,所述設(shè)置所述并發(fā)數(shù)上限,包括:
[0151]根據(jù)后端的處理參數(shù)設(shè)置所述并發(fā)數(shù)上限;
[0152]或者,根據(jù)后端處理訪問請求的時長設(shè)置所述并發(fā)數(shù)上限;
[0153]或者,根據(jù)后端的緩存大小及訪問請求的語句長度設(shè)置所述并發(fā)數(shù)上限。
[0154]A12、根據(jù)權(quán)利要求AlO或All所述的方法,其特征在于,所述設(shè)置所述并發(fā)數(shù)上限,包括:
[0155]在系統(tǒng)啟動運(yùn)行時,對所述并發(fā)數(shù)上限進(jìn)行初始化設(shè)置;
[0156]或者,在系統(tǒng)運(yùn)行過程中,對所述并發(fā)數(shù)上限進(jìn)行動態(tài)設(shè)置。
[0157]B13、一種并發(fā)請求的控制裝置,適用于數(shù)據(jù)庫服務(wù)器對并發(fā)請求進(jìn)行控制,其特征在于,所述裝置包括:
[0158]存儲單元,用于當(dāng)訪問請求的實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,對超出部分的訪問請求進(jìn)行緩存;
[0159]查詢單元,用于定期查詢當(dāng)前的實(shí)際并發(fā)數(shù);
[0160]處理單元,用于當(dāng)所述查詢單元查詢所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入所述存儲單元緩存的訪問請求以進(jìn)行處理。
[0161]B14、根據(jù)權(quán)利要求B13所述的裝置,其特征在于,所述裝置還包括:
[0162]建立單元,用于在所述存儲單元對超出部分的訪問請求進(jìn)行緩存之前,為每個訪問請求獨(dú)立建立協(xié)程。
[0163]B15、根據(jù)權(quán)利要求B13所述的裝置,其特征在于,所述查詢單元包括:
[0164]第一查詢模塊,用于定期對請求列表中的語句數(shù)量進(jìn)行統(tǒng)計(jì),所述請求列表用于記錄當(dāng)前正在處理的訪問請求。
[0165]B16、根據(jù)權(quán)利要求B13所述的裝置,其特征在于,所述查詢單元包括:
[0166]第二查詢模塊,用于定期讀取當(dāng)前計(jì)數(shù)器中記錄的實(shí)際并發(fā)數(shù),所述計(jì)數(shù)器用于在所述實(shí)際并發(fā)數(shù)發(fā)生變化時進(jìn)行增減計(jì)數(shù)。
[0167]B17、根據(jù)權(quán)利要求B15或B16所述的裝置,其特征在于,所述處理單元,包括:第一處理模塊;
[0168]所述查詢單元,用于為每個緩存的訪問請求獨(dú)立查詢當(dāng)前的實(shí)際并發(fā)數(shù);
[0169]所述第一處理模塊,用于當(dāng)所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入最先查詢實(shí)際并發(fā)數(shù)的訪問請求。
[0170]B18、根據(jù)權(quán)利要求B15或B16所述的裝置,其特征在于,所述處理單元,包括:
[0171]第二處理模塊,用于當(dāng)所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入從所述緩存的訪問請求中隨機(jī)選取出的訪問請求。
[0172]B19、根據(jù)權(quán)利要求B15或B16所述的裝置,其特征在于,所述處理單元,包括:
[0173]第三處理模塊,用于對所述緩存的訪問請求進(jìn)行排隊(duì),當(dāng)所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入所述緩存隊(duì)列隊(duì)首的訪問請求。
[0174]B20、根據(jù)權(quán)利要求B13所述的裝置,其特征在于,所述裝置還包括:
[0175]計(jì)時單元,用于在所述存儲單元對超出部分的訪問請求進(jìn)行緩存之后,啟動對所述存儲單元緩存的訪問請求的計(jì)時;
[0176]所述存儲單元,還用于當(dāng)所述計(jì)時單元檢測到所述緩存的訪問請求的計(jì)時超時時,清除所述緩存的訪問請求。
[0177]B21、根據(jù)權(quán)利要求B20所述的裝置,其特征在于,所述計(jì)時單元,用于當(dāng)所述處理單元對所述緩存的訪問請求加入失敗時,對所述存儲單元緩存的訪問請求進(jìn)行計(jì)時清零。
[0178]B22、根據(jù)權(quán)利要求B13所述的裝置,其特征在于,所述裝置還包括:
[0179]設(shè)置單元,用于設(shè)置所述并發(fā)數(shù)上限。
[0180]B23、根據(jù)權(quán)利要求B22所述的裝置,其特征在于,所述設(shè)置單元,包括:
[0181]第一設(shè)置模塊,用于根據(jù)后端的處理參數(shù)設(shè)置所述并發(fā)數(shù)上限;
[0182]第二設(shè)置模塊,用于根據(jù)后端處理訪問請求的時長設(shè)置所述并發(fā)數(shù)上限;
[0183]第三設(shè)置模塊,用于根據(jù)后端的緩存大小及訪問請求的語句長度設(shè)置所述并發(fā)數(shù)上限。
[0184]B24、根據(jù)權(quán)利要求B22或B23所述的裝置,其特征在于:
[0185]所述設(shè)置單元,用于在系統(tǒng)啟動運(yùn)行時,對所述并發(fā)數(shù)上限進(jìn)行初始化設(shè)置;
[0186]所述設(shè)置單元,還用于在系統(tǒng)運(yùn)行過程中,對所述并發(fā)數(shù)上限進(jìn)行動態(tài)設(shè)置。
[0187]在上述實(shí)施例中,對各個實(shí)施例的描述都各有側(cè)重,某個實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
[0188]可以理解的是,上述方法及裝置中的相關(guān)特征可以相互參考。另外,上述實(shí)施例中的“第一”、“第二”等是用于區(qū)分各實(shí)施例,而并不代表各實(shí)施例的優(yōu)劣。
[0189]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。
[0190]在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
[0191]在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
[0192]類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實(shí)施例的所有特征。因此,遵循【具體實(shí)施方式】的權(quán)利要求書由此明確地并入該【具體實(shí)施方式】,其中每個權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
[0193]本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個或多個設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
[0194]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
[0195]本發(fā)明的各個部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個或者多個處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的發(fā)明名稱(如確定網(wǎng)站內(nèi)鏈接等級的裝置)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
[0196]應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
【權(quán)利要求】
1.一種并發(fā)請求的控制方法,所述方法適用于數(shù)據(jù)庫服務(wù)器對并發(fā)請求進(jìn)行控制,其特征在于,所述方法包括: 當(dāng)訪問請求的實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,對超出部分的訪問請求進(jìn)行緩存; 定期查詢當(dāng)前的實(shí)際并發(fā)數(shù); 若所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限,則加入所述緩存的訪問請求以進(jìn)行處理。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述對超出部分的訪問請求進(jìn)行緩存之前,所述方法進(jìn)一步包括: 為每個訪問請求獨(dú)立建立協(xié)程。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述定期查詢當(dāng)前的實(shí)際并發(fā)數(shù),包括: 定期對請求列表中的語句數(shù)量進(jìn)行統(tǒng)計(jì),所述請求列表用于記錄當(dāng)前正在處理的訪問請求。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述定期查詢當(dāng)前的實(shí)際并發(fā)數(shù),包括: 定期讀取當(dāng)前計(jì)數(shù)器中記錄的實(shí)際并發(fā)數(shù),所述計(jì)數(shù)器用于在所述實(shí)際并發(fā)數(shù)發(fā)生變化時進(jìn)行增減計(jì)數(shù)。
5.根據(jù)權(quán)利要求3或4所述的方法,其特征在于,所述定期查詢當(dāng)前的實(shí)際并發(fā)數(shù),包括: 為每個緩存的訪問請求獨(dú)立查詢當(dāng)前的實(shí)際并發(fā)數(shù); 所述加入所述緩存的訪問請求以進(jìn)行處理,包括: 當(dāng)所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入最先查詢實(shí)際并發(fā)數(shù)的訪問請求。
6.根據(jù)權(quán)利要求3或4所述的方法,其特征在于,所述加入所述緩存的訪問請求以進(jìn)行處理,包括: 當(dāng)所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入從所述緩存的訪問請求中隨機(jī)選取出的訪問請求。
7.根據(jù)權(quán)利要求3或4所述的方法,其特征在于,所述加入所述緩存的訪問請求以進(jìn)行處理,包括: 對所述緩存的訪問請求進(jìn)行排隊(duì); 當(dāng)所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入所述緩存隊(duì)列隊(duì)首的訪問請求。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述對超出部分的訪問請求進(jìn)行緩存之后,所述方法進(jìn)一步包括: 啟動對所述緩存的訪問請求的計(jì)時; 當(dāng)所述緩存的訪問請求的計(jì)時超時時,清除所述緩存的訪問請求。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,當(dāng)所述緩存的訪問請求加入失敗時,所述方法進(jìn)一步包括: 對所述緩存的訪問請求進(jìn)行計(jì)時清零。
10.一種并發(fā)請求的控制裝置,適用于數(shù)據(jù)庫服務(wù)器對并發(fā)請求進(jìn)行控制,其特征在于,所述裝置包括: 存儲單元,用于當(dāng)訪問請求的實(shí)際并發(fā)數(shù)達(dá)到預(yù)設(shè)的并發(fā)數(shù)上限時,對超出部分的訪問請求進(jìn)行緩存; 查詢單元,用于定期查詢當(dāng)前的實(shí)際并發(fā)數(shù); 處理單元,用于當(dāng)所述查詢單元查詢所述當(dāng)前的實(shí)際并發(fā)數(shù)小于所述并發(fā)數(shù)上限時,加入所述存儲單元緩存的訪問請求以進(jìn)行處理。
【文檔編號】G06F17/30GK104408088SQ201410642791
【公開日】2015年3月11日 申請日期:2014年11月11日 優(yōu)先權(quán)日:2014年11月11日
【發(fā)明者】王院生 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司