2016-07-25 50 views
0

我在尋找什麼是行業中常用/最佳實踐。如何處理連接數據庫時發生的問題?

假設以下假設的情景: 如果我的應用程序服務器接受200名用戶的請求,他們每個人都需要數據庫訪問。 但我的數據庫max_connections是100.

如果所有200個用戶同時請求,但我們只有100個max_connections,其他請求會發生什麼情況,哪些未被最大連接服務?

在現實世界中:

  1. 將剩餘的100個請求被存儲在某種隊列上的應用程序服務器,並一直在等待DB連接?

  2. 我們出錯了呢?

回答

0

基本上,如果你的數據庫服務器只能處理100個連接,以及所有的Web連接「需要訪問數據庫,」你必須確保不超過100個請求被允許爲活躍在任何一個瞬間。  這是此場景的「裁決約束」。  (這可能是很多的一個。)

您可以接受你的服務器上「多達200個併發連接」,但你必須排隊這些請求,使100所活躍請求的限制是不超標。

有很多種,可以使用很多方法做到這一點: 負載均衡器,應用服務器,甚至阿帕奇/ nginix指令。有時候,網頁只是許多不同服務器並行運行的流程的前端。無論你如何操作,都必須有一種方法來管理有多少請求處於活動狀態,並對餘數進行排隊。

還要注意的是,即使你可能有「 200活動連接」到Web服務器,這是極不可能的,這些客戶「的所有200在精確同時點擊自己的鼠標。 」  請求以隨機速率進入,因此可能永遠不會遇到任何類型的延遲。但是你的系統必須被設計來處理最壞的情況。