Web-Server

您如何為網站進行負載測試和容量規劃?

  • March 20, 2018

這是關於網站容量規劃的典型問題。

有關的:

有哪些推薦的網站和 Web 應用程序容量規劃工具和方法?

請隨意描述針對不同 Web 伺服器、框架等的不同工具和技術,以及一般適用於 Web 伺服器的最佳實踐。

簡短的回答是:除了你,沒有人能回答這個問題。

長答案是,對特定工作量進行基準測試是您需要自己承擔的事情,因為這有點像問“一根繩子有多長?”。

一個簡單的單頁靜態網站可以託管在 Pentium Pro 150 上,並且每天仍然提供數千次展示。

回答這個問題需要採取的基本方法是嘗試一下,看看會發生什麼。有很多工具可以用來人為地將系統置於壓力之下,以查看它在哪裡彎曲。

對此的簡要概述是:

  • 把你的場景放在適當的位置
  • 添加監控
  • 添加流量
  • 評估結果
  • 根據結果進行補救
  • 沖洗,重複直到相當滿意

把你的場景放在適當的位置

基本上,為了測試一些負載,你需要一些東西來測試。設置一個環境來測試。如果可能的話,這應該是對您的生產硬體的相當接近的猜測,否則您將只能推斷您的數據。

設置您的伺服器、帳戶、網站、頻寬等。即使您在虛擬機上執行此操作也可以,只要您準備好擴展結果即可。

因此,我將設置一個中等功率的虛擬機(兩個核心,512 MB RAM,4 GB 硬碟)並在 VM 上的Red Hat Linuxhaproxy中安裝我最喜歡的負載平衡器。

我還將在負載均衡器後面有兩個 Web 伺服器,我將使用它們對負載均衡器進行壓力測試。這兩個 Web 伺服器的設置與我的實時系統相同。

添加監控

您需要一些指標來監控,所以我將測量有多少請求通過我的 Web 伺服器,以及在使用者開始獲得超過兩秒的響應時間之前我每秒可以擠過多少請求。

我還將監控實例上的 RAM、CPU 和磁碟使用haproxy情況,以確保負載均衡器可以處理連接。

如何做到這一點在很大程度上取決於您的平台,並且超出了此答案的範圍。您可能需要查看 Web 伺服器日誌文件、啟動性能計數器或依賴壓力測試工具的報告能力。

您始終想要監控的一些事情:

  • CPU使用率
  • 記憶體使用情況
  • 磁碟使用情況
  • 磁碟延遲
  • 網路使用率

您還可以選擇查看 SQL 死鎖、查找時間等,具體取決於您具體測試的內容。

添加流量

這就是事情變得有趣的地方。現在您需要模擬測試負載。有很多工具可以做到這一點,並具有可配置的選項:

選擇一個數字,任何數字。假設您將看到系統如何響應每分鐘 10,000 次點擊。選擇哪個數字並不重要,因為您將多次重複此步驟,向上或向下調整該數字以查看系統如何響應。

理想情況下,您應該將這 10,000 個請求分佈在多個負載測試客戶端/節點上,這樣單個客戶端就不會成為請求的瓶頸。例如,JMeter 的遠端測試提供了一個中央界面,從該界面可以從控制 Jmeter 機器啟動多個客戶端。

按下神奇的Go按鈕,觀看您的 Web 伺服器崩潰和崩潰。

評估結果

所以,現在您需要返回到您在第 2 步中收集的指標。您會看到,有 10,000 個並發連接,您haproxy的機器幾乎不會出汗,但是兩個 Web 伺服器的響應時間是 5 秒多一點。這並不酷 - 請記住,您的響應時間是兩秒鐘。所以,我們需要做一些改變。

補救

現在,您需要將您的網站速度提高兩倍以上。所以你知道你需要擴大規模或擴大規模。

要擴大規模,請獲得更大的 Web 伺服器、更多的 RAM、更快的磁碟。

要向外擴展,請獲取更多伺服器。

使用第 2 步中的指標和測試來做出此決定。例如,如果您在測試期間發現磁碟延遲很大,您就知道需要擴大規模並獲得更快的硬碟驅動器。

如果您在測試期間看到處理器處於 100% 狀態,那麼您可能需要擴展以添加額外的 Web 伺服器以減輕現有伺服器的壓力。

沒有通用的正確或錯誤答案,只有適合您的。嘗試擴大規模,如果這不起作用,則改為擴大規模。與否,這取決於你和一些跳出框框的想法。

假設我們要向外擴展。所以我決定複製我的兩台網路伺服器(它們是虛擬機),現​​在我有四台網路伺服器。

沖洗,重複

從第 3 步重新開始。如果您發現事情沒有按預期進行(例如,我們將 Web 伺服器增加了一倍,但響應時間仍然超過 2 秒),那麼請查看其他瓶頸。例如,您將 Web 伺服器翻了一番,但仍然有一個蹩腳的數據庫伺服器。或者,您複製了更多虛擬機,但由於它們位於同一物理主機上,您只會對伺服器資源進行更高的爭用。

然後,您可以使用此過程來測試系統的其他部分。嘗試直接訪問 Web 伺服器,或者使用 SQL 基準測試工具訪問 SQL 伺服器,而不是訪問負載均衡器。

引用自:https://serverfault.com/questions/350454