• / 11
  • 下載費用:30 金幣  

高并發請求下提高數據庫穩定性的方法、裝置及系統.pdf

摘要
申請專利號:

CN201610537733.8

申請日:

2016.07.08

公開號:

CN106257456A

公開日:

2016.12.28

當前法律狀態:

實審

有效性:

審中

法律詳情: 實質審查的生效IPC(主分類):G06F 17/30申請日:20160708|||公開
IPC分類號: G06F17/30 主分類號: G06F17/30
申請人: 北京京東尚科信息技術有限公司; 北京京東世紀貿易有限公司
發明人: 趙明; 蘭健
地址: 100195 北京市海淀區杏石口路65號西杉創意園四區11號樓東段1-4層西段1-4層
優先權:
專利代理機構: 中原信達知識產權代理有限責任公司 11219 代理人: 張一軍;趙靜
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201610537733.8

授權公告號:

|||

法律狀態公告日:

2017.01.25|||2016.12.28

法律狀態類型:

實質審查的生效|||公開

摘要

本發明提供一種高并發請求下提高數據庫穩定性的方法、裝置及系統,能夠在處理高并發請求時,通過阻塞請求,保證數據庫穩定運行;并且結合緩存技術,緩解訪問數據庫的壓力。該方法包括:步驟一:對所有請求進行攔截,然后根據請求策略判斷是否需對請求進行限流控制,若無需限流,則直接進行步驟四,若需要限流,則繼續進行步驟二;步驟二:將請求加入限流隊列中;步驟三:根據出隊規則選擇允許出隊執行的請求;步驟四:執行請求,其中,判斷緩存中是否存在所述請求需要的數據,若存在,則返回從緩存讀取的數據,若不存在,則返回從數據庫讀取的數據并且對所述數據進行緩存。

權利要求書

1.一種高并發請求下提高數據庫穩定性的方法,其特征在于,包括:
步驟一:對所有請求進行攔截,然后根據請求策略判斷是否需對請求進行限流控制,若
無需限流,則直接進行步驟四,若需要限流,則繼續進行步驟二;
步驟二:將請求加入限流隊列中;
步驟三:根據出隊規則選擇允許出隊執行的請求;
步驟四:執行請求,其中,判斷緩存中是否存在所述請求需要的數據,若存在,則返回從
緩存讀取的數據,若不存在,則返回從數據庫讀取的數據并且對所述數據進行緩存。
2.根據權利要求1所述的方法,其特征在于,所述請求策略是:判斷單位時間內請求量
是否大于請求量閾值,若大于,則進行限流控制。
3.根據權利要求1所述的方法,其特征在于,所述出隊規則是:判斷某請求是否位于限
流隊列中的出隊首位,以及判斷數據庫連接池中是否存在空閑的連接,若兩個條件同時滿
足,則允許該請求出隊執行,若兩個條件不同時滿足,則繼續阻塞該請求。
4.根據權利要求1所述的方法,其特征在于,所述方法還包括:若某請求在限流隊列中
阻塞時間超過時長閾值,則刪除該請求。
5.一種高并發請求下提高數據庫穩定性的裝置,其特征在于,包括:
攔截模塊,用于對所有請求進行攔截,然后根據請求策略判斷是否需對請求進行限流
控制,若無需限流,則直接由執行模塊執行請求,若需要限流,則繼續由入隊模塊進行操作;
入隊模塊,用于將請求加入限流隊列中;
選擇模塊,用于根據出隊規則選擇允許出隊執行的請求;
執行模塊,用于執行請求,其中,判斷緩存中是否存在所述請求需要的數據,若存在,則
返回從緩存讀取的數據,若不存在,則返回從數據庫讀取的數據并且對所述數據進行緩存。
6.根據權利要求5所述的裝置,其特征在于,所述請求策略是:判斷單位時間內請求量
是否大于請求量閾值,若大于,則進行限流控制。
7.根據權利要求5所述的裝置,其特征在于,所述出隊規則是:判斷某請求是否位于限
流隊列中的出隊首位,以及判斷數據庫連接池中是否存在空閑的連接,若兩個條件同時滿
足,則允許該請求出隊執行,若兩個條件不同時滿足,則繼續阻塞該請求。
8.根據權利要求5所述的裝置,其特征在于,所述選擇模塊還用于:若某請求在限流隊
列中阻塞時間超過時長閾值,則刪除該請求。
9.一種高并發請求下提高數據庫穩定性的系統,其特征在于,包括:
存儲器和處理器,其中,
所述存儲器存儲指令;
所述處理器被配置為根據所述指令執行下列步驟:
步驟一:對所有請求進行攔截,然后根據請求策略判斷是否需對請求進行限流控制,若
無需限流,則直接進行步驟四,若需要限流,則繼續進行步驟二;
步驟二:將請求加入限流隊列中;
步驟三:根據出隊規則選擇允許出隊執行的請求;
步驟四:執行請求,其中,判斷緩存中是否存在所述請求需要的數據,若存在,則返回從
緩存讀取的數據,若不存在,則返回從數據庫讀取的數據并且對所述數據進行緩存。
10.根據權利要求9所述的系統,其特征在于,所述請求策略是:判斷單位時間內請求量
是否大于請求量閾值,若大于,則進行限流控制。

說明書

高并發請求下提高數據庫穩定性的方法、裝置及系統

技術領域

本發明涉及計算機技術及軟件領域,尤其涉及一種高并發請求下提高數據庫穩定
性的方法、裝置及系統。

背景技術

隨著互聯網行業的高速發展,高并發請求成為傳統系統的技術瓶頸。為了解決這
一問題,現有技術中使用緩存來存儲數據,提升響應速度,提高用戶體驗,減少數據庫訪問
壓力。然而在實際應用過程中,一旦緩存系統出現問題,例如緩存服務器可能宕機,將面對
所有數據請求直接訪問數據庫服務器,造成數據庫服務器壓力過大。

因此,現有技術中往往采用以下措施避免緩存服務器可能宕機:

1、緩存服務器自身的數據持久化策略進行恢復。當有服務器宕機重啟后,通過數
據持久化的配置策略,對數據進行恢復;

2、同步緩存服務器數據。當服務器宕機重啟,通過程序從數據庫中讀取需要加入
緩存中的數據,同步到緩存服務器中;

3、應用程序控制。先判斷緩存中是否存在請求需要的數據,如果不存在,則調用數
據庫,通過數據庫讀取數據,將數據同步到緩存。

然而,上述避免緩存服務器宕機的措施并不足以達到高并發請求時減少數據庫訪
問壓力的目的:

1、緩存服務器數據持久化的配置策略,通常是通過本服務器記錄的日志或者數據
存儲文件進行恢復。但是恢復的數據只能是在服務器宕機的那一個時刻的數據快照,如果
在宕機期間有新的緩存數據產生,則無法同步到緩存中;

2、同步可能會有一定延時,數據實時一致性無法保證;

3、緩存中無數據時,請求數據的壓力全部都集中在數據庫層面,容易造成數據庫
服務器宕機;

4、在高并發寫入操作并發量大的情況下,增加緩存的方式也無法分擔數據庫的壓
力,瞬間增大的寫入操作會導致數據庫服務器宕機。

發明內容

有鑒于此,本發明提供一種高并發請求下提高數據庫穩定性的方法、裝置及系統,
能夠在處理高并發請求時,通過阻塞請求,保證數據庫穩定運行;并且結合緩存技術,緩解
訪問數據庫的壓力。

為實現上述目的,根據本發明的一個方面,提供了一種高并發請求下提高數據庫
穩定性的方法。

本發明的一種高并發請求下提高數據庫穩定性的方法包括:步驟一:對所有請求
進行攔截,然后根據請求策略判斷是否需對請求進行限流控制,若無需限流,則直接進行步
驟四,若需要限流,則繼續進行步驟二;步驟二:將請求加入限流隊列中;步驟三:根據出隊
規則選擇允許出隊執行的請求;步驟四:執行請求,其中,判斷緩存中是否存在所述請求需
要的數據,若存在,則返回從緩存讀取的數據,若不存在,則返回從數據庫讀取的數據并且
對所述數據進行緩存。

可選地,所述請求策略是:判斷單位時間內請求量是否大于請求量閾值,若大于,
則進行限流控制。

可選地,所述出隊規則是:判斷某請求是否位于限流隊列中的出隊首位,以及判斷
數據庫連接池中是否存在空閑的連接,若兩個條件同時滿足,則允許該請求出隊執行,若兩
個條件不同時滿足,則繼續阻塞該請求。

可選地,所述方法還包括:若某請求在限流隊列中阻塞時間超過時長閾值,則刪除
該請求。

為實現上述目的,根據本發明的另一方面,提供了一種高并發請求下提高數據庫
穩定性的裝置。

本發明的一種高并發請求下提高數據庫穩定性的裝置包括:攔截模塊,用于對所
有請求進行攔截,然后根據請求策略判斷是否需對請求進行限流控制,若無需限流,則直接
由執行模塊執行請求,若需要限流,則繼續由入隊模塊進行操作;入隊模塊,用于將請求加
入限流隊列中;選擇模塊,用于根據出隊規則選擇允許出隊執行的請求;執行模塊,用于執
行請求,其中,判斷緩存中是否存在所述請求需要的數據,若存在,則返回從緩存讀取的數
據,若不存在,則返回從數據庫讀取的數據并且對所述數據進行緩存。

可選地,所述請求策略是:判斷單位時間內請求量是否大于請求量閾值,若大于,
則進行限流控制。

可選地,所述出隊規則是:判斷某請求是否位于限流隊列中的出隊首位,以及判斷
數據庫連接池中是否存在空閑的連接,若兩個條件同時滿足,則允許該請求出隊執行,若兩
個條件不同時滿足,則繼續阻塞該請求。

可選地,所述選擇模塊還用于:若某請求在限流隊列中阻塞時間超過時長閾值,則
刪除該請求。

為實現上述目的,根據本發明的再一方面,提供了一種高并發請求下提高數據庫
穩定性的系統。

本發明的一種高并發請求下提高數據庫穩定性的系統包括:存儲器和處理器,其
中,所述存儲器存儲指令;所述處理器被配置為根據所述指令執行下列步驟:步驟一:對所
有請求進行攔截,然后根據請求策略判斷是否需對請求進行限流控制,若無需限流,則直接
進行步驟四,若需要限流,則繼續進行步驟二;步驟二:將請求加入限流隊列中;步驟三:根
據出隊規則選擇允許出隊執行的請求;步驟四:執行請求,其中,判斷緩存中是否存在所述
請求需要的數據,若存在,則返回從緩存讀取的數據,若不存在,則返回從數據庫讀取的數
據并且對所述數據進行緩存。

可選地,所述請求策略是:判斷單位時間內請求量是否大于請求量閾值,若大于,
則進行限流控制。

根據本發明的技術方案,通過在處理高并發請求時,攔截請求,并根據數據庫連接
狀態判斷是否執行請求,從而可以保證數據庫穩定運行,并且通過結合緩存技術,達到緩解
數據庫的訪問壓力的目的;通過在將請求加入限流隊列之前,根據請求策略判斷是否需對
請求進行限流控制,從而可以靈活判斷是否對請求進行限流操作,若無限制必要則執行請
求而無須將請求加入限流隊列中排隊等候,從而可以根據數據庫訪問的情形靈活執行請
求;通過判斷請求阻塞時間是否超過閾值,可以及時判斷是否放棄請求,及時返回請求執行
情況,從而可以提高用戶的訪問體驗。

附圖說明

附圖用于更好地理解本發明,不構成對本發明的不當限定。其中:

圖1是根據本發明實施例的高并發請求下提高數據庫穩定性的方法的主要步驟的
示意圖;

圖2是根據本發明實施例的高并發請求下提高數據庫穩定性的方法的主要流程的
示意圖;

圖3是根據本發明實施例的高并發請求下提高數據庫穩定性的裝置的主要模塊的
示意圖;

圖4是根據本發明實施例的高并發請求下提高數據庫穩定性的系統的主要部分的
示意圖。

具體實施方式

以下結合附圖對本發明的示范性實施例做出說明,其中包括本發明實施例的各種
細節以助于理解,應當將它們認為僅僅是示范性的。因此,本領域普通技術人員應當認識
到,可以對這里描述的實施例做出各種改變和修改,而不會背離本發明的范圍和精神。同
樣,為了清楚和簡明,以下的描述中省略了對公知功能和結構的描述。

隨著大量請求訪問應用系統的需求的不斷增加,簡單通過緩存服務器并不能達到
預期的緩解數據庫訪問壓力的目的,本發明實施例中利用隊列機制,通過阻塞限流的方式,
實現一種動態的數據庫訪問限制,保證數據庫穩定運行。

圖1是根據本發明實施例的高并發請求下提高數據庫穩定性的方法的主要步驟的
示意圖。

如圖1所示,本發明實施例的高并發請求下提高數據庫穩定性的方法主要包括如
下步驟:

步驟一:對所有請求進行攔截,然后根據請求策略判斷是否需對請求進行限流控
制,若無需限流,則直接進行步驟四,若需要限流,則繼續進行步驟二。本步驟的目的在于,
將大量并發請求進行攔截,然后根據數據庫的訪問狀態判斷是否對請求進行限流操作。

本發明實施例中,首先將所有請求進行攔截,根據請求策略判斷是否需要進行限
流控制。其中請求策略是根據數據庫可承載的訪問量及資源利用率進行確定,通過人工配
置單位時間(例如但不限于每秒)內的請求量閾值,然后判斷單位時間內的請求量是否大于
請求量閾值,若大于,則進行限流操作,若不大于,則不予以限流,直接執行請求。

本步驟的判斷之后,若需要進行限流操作,則從步驟二開始處理。

步驟二:將請求加入限流隊列中。如果需要進行流量控制,則給請求分配身份(即
分配唯一身份標識),將請求加入限流隊列中。

具體而言,本發明實施例中,給請求分配唯一身份標識相當于映射(Map)中的鍵
(Key),加入隊列后分配唯一的身份標識是為了在輪循訪問緩存服務器的時候,能夠知道某
請求在隊列中的位置,判斷其是否可以出隊。

此外,本發明實施例中可以使用Redis作為分布式隊列,當然也可以但不限于利用
Memcached這類獨立的緩存服務器代替Redis,主要是用原理是利用它們隊列及高速訪問的
功能。但諸如ActiveMQ、Kafka等,其主要是為了傳輸消息,雖然內部對消息有隊列,但是并
沒有提供訪問隊列的功能。因此,在本發明實施例中并不適用。

步驟三:根據出隊規則選擇允許出隊執行的請求。將攔截的請求加入先入先出隊
列之后,根據出隊順序判斷是否可以執行請求。

具體而言,判斷某請求是否為隊列中出隊首位以及判斷當前的數據庫連接池中是
否存在空閑的連接,滿足上述兩個條件時,則允許請求出隊,執行請求;若不同時滿足判斷
條件,則繼續阻塞該請求。若某請求在限流隊列中阻塞時間超過預設的時長閾值,則刪除該
請求。

步驟四:執行請求,其中,判斷緩存中是否存在所述請求需要的數據,若存在,則返
回從緩存讀取的數據,若不存在,則返回從數據庫讀取的數據并且對所述數據進行緩存。

圖2是根據本發明實施例的高并發請求下提高數據庫穩定性的方法的主要流程的
示意圖。該方法的具體流程可參閱圖2。

具體而言,本發明實施例的高并發請求下提高數據庫穩定性的方法的主要流程包
括:

1、大量請求訪問,對所有請求進行攔截;

2、讀取請求策略,獲取請求量閾值;

3、根據當前單位時間內請求量與請求量閾值的大小進行判斷,是否需要進行限流
操作。如果需要,則給請求分配唯一身份標識,并將其加入限流隊列等待處理;否則執行請
求;

4、在限流隊列中,根據當前請求的唯一身份標識判斷其是否位于隊列中出隊首
位,并且是否有可用數據庫連接;若兩條件同時滿足則根據唯一身份標識刪除隊列中的請
求,允許請求出隊執行;否則判斷當前請求的阻塞時長是否超時,如果是,則放棄本次請求,
并根據身份刪除隊列中的請求,如果否,則繼續進行4的判斷;

5、執行請求:判斷請求的內容在緩存中是否存在,如果存在則直接返回結果,如果
不存在則執行當前請求對數據庫的操作,如果是讀操作將結果寫入緩存。

根據本發明實施例的高并發請求下提高數據庫穩定性的方法可以看出,通過在處
理高并發請求時,攔截請求,并根據數據庫連接狀態判斷是否執行請求,從而可以保證數據
庫穩定運行,并且通過結合緩存技術,達到緩解數據庫的訪問壓力的目的;通過在將請求加
入限流隊列之前,根據請求策略判斷是否需對請求進行限流控制,從而可以靈活判斷是否
對請求進行限流操作,若無限制必要則執行請求而無須將請求加入限流隊列中排隊等候,
從而可以根據數據庫訪問的情形靈活執行請求;通過判斷請求阻塞時間是否超過閾值,可
以及時判斷是否放棄請求,及時返回請求執行情況,從而可以提高用戶的訪問體驗。

圖3是根據本發明實施例的高并發請求下提高數據庫穩定性的裝置的主要模塊的
示意圖。

如圖3所示,本發明實施例的高并發請求下提高數據庫穩定性的裝置30主要包括
如下模塊:攔截模塊301、入隊模塊302、選擇模塊303以及執行模塊304,其中,

攔截模塊301用于對所有請求進行攔截,然后根據請求策略判斷是否需對請求進
行限流控制,若無需限流,則直接由執行模塊304執行請求,若需要限流,則繼續由入隊模塊
302進行操作;入隊模塊302用于將請求加入限流隊列中;選擇模塊303用于根據出隊規則選
擇允許出隊執行的請求;執行模塊304用于執行請求,其中,判斷緩存中是否存在所述請求
需要的數據,若存在,則返回從緩存讀取的數據,若不存在,則返回從數據庫讀取的數據并
且對所述數據進行緩存。

其中,請求策略可以是:判斷單位時間內(例如但不限于每秒)請求量是否大于請
求量閾值,若大于,則進行限流控制。

出隊規則可以是:判斷某請求是否位于限流隊列中的出隊首位,以及判斷數據庫
連接池中是否存在空閑的連接,若兩個條件同時滿足,則允許該請求出隊執行,若兩個條件
不同時滿足,則繼續阻塞該請求。

另外,選擇模塊303還可用于:若某請求在限流隊列中阻塞時間超過時長閾值,則
刪除該請求。

圖4是根據本發明實施例的高并發請求下提高數據庫穩定性的系統的主要部分的
示意圖。

如圖4所示,本發明實施例的高并發請求下提高數據庫穩定性的系統40主要包括
如下部分:存儲器401和處理器402,其中,

存儲器401存儲指令;

處理器402被配置為根據所述指令執行下列步驟:

步驟一:對所有請求進行攔截,然后根據請求策略判斷是否需對請求進行限流控
制,若無需限流,則直接進行步驟四,若需要限流,則繼續進行步驟二;

步驟二:將請求加入限流隊列中;

步驟三:根據出隊規則選擇允許出隊執行的請求;

步驟四:執行請求,其中,判斷緩存中是否存在所述請求需要的數據,若存在,則返
回從緩存讀取的數據,若不存在,則返回從數據庫讀取的數據并且對所述數據進行緩存。

其中,請求策略可以是:判斷單位時間內請求量是否大于請求量閾值,若大于,則
進行限流控制。

從以上描述可以看出,通過在處理高并發請求時,攔截請求,并根據數據庫連接狀
態判斷是否執行請求,從而可以保證數據庫穩定運行,并且通過結合緩存技術,達到緩解數
據庫的訪問壓力的目的;通過在將請求加入限流隊列之前,根據請求策略判斷是否需對請
求進行限流控制,從而可以靈活判斷是否對請求進行限流操作,若無限制必要則執行請求
而無須將請求加入限流隊列中排隊等候,從而可以根據數據庫訪問的情形靈活執行請求;
通過判斷請求阻塞時間是否超過閾值,可以及時判斷是否放棄請求,及時返回請求執行情
況,從而可以提高用戶的訪問體驗。

上述具體實施方式,并不構成對本發明保護范圍的限制。本領域技術人員應該明
白的是,取決于設計要求和其他因素,可以發生各種各樣的修改、組合、子組合和替代。任何
在本發明的精神和原則之內所作的修改、等同替換和改進等,均應包含在本發明保護范圍
之內。

關 鍵 詞:
并發 請求 提高 數據庫 穩定性 方法 裝置 系統
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:高并發請求下提高數據庫穩定性的方法、裝置及系統.pdf
鏈接地址:http://www.rgyfuv.icu/p-6100783.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
山东11选5中奖结果走势图