Apache-2.2
防止繁重的伺服器查詢使 Apache/Mysql 過載
我有一些關於理解高伺服器負載和在常見場景中使用 Apache、MySQL 和 PHP 5 等解決方案實現某種類型的負載平衡的問題。
我在這件事上很喜歡你的意見,因為我讀了很多書,我完全迷失在可能的產品或技術中,以實現一個簡單的,如果可能的話,一個免費的解決方案:
https://blogs.oracle.com/oswald/entry/easy_http_load_balancing_with
想像一個簡單的例子,只有一台伺服器和兩個使用者同時連接,使用者 A和使用者 B。
- 使用者 A 進行查詢並請求大量數據,該查詢可能會使 MySQL 伺服器過載幾分鐘。IE:
選擇 * FROM ’table_with_10GB_of_data';
- 使用者 B 請求另一個小型快速查詢,但 MySQL 伺服器仍在忙於第一個查詢。
上面的例子只是一個不真實的場景,有一個糟糕的數據庫表模式,以及一個可怕的查詢,目的是詢問在這些情況下 MySQL 和 Apache 會發生什麼。
我想知道他們如何處理或解決它,以及如何平衡其負載,以便 MySQL 和 Apache 伺服器永遠不會因來自單個使用者的錯誤或緩慢查詢而掛起,同時他們仍然可以處理來自其他使用者的其他查詢。
非常感謝,如果我的問題在某些概念上是錯誤的,我們深表歉意。請隨時添加任何提示、有用的書籍或您自己對伺服器和應用程序的經驗。
**簡短回答:**如果您想防止伺服器因愚蠢查詢而過載,只需防止愚蠢查詢即可。
長答案:
正如您所提到的,負載平衡在具有大量獨立查詢的環境中效率更高。大型、繁重的查詢總是會使伺服器超載。但是您可以通過設置配額來限制使用者的發生率。對 Apache 進行搜尋,或返回此處獲取更多資訊。
但最好的解決方案仍然是分析查詢並為每個查詢決定是否:
- 它應該在沒有任何進一步操作的情況下執行
- 應該跳過它並顯示錯誤消息
- 它應該被發送到另一台伺服器;這是一種預測平衡
現在,為了更詳細地幫助您,您可以與我們分享更多細節,例如數據庫結構、查詢類型等。我們可以找到一些算法在這 3 種情況之間切換。