如何擴充 Web 應用程式?

如何擴充 Web 應用程式?

我主要是一名 Web 應用程式開發人員,對擴展/可擴展性技術了解不多。我的應用程式是用 Python 編寫的,使用 Django;相當標準的設定。

我目前使用 Apache 2.2 作為我的網頁伺服器,使用 MySQL 作為我的資料庫伺服器;兩者都運行在同一個 VPS 上。

到目前為止,它基本上只是一個原型,在任何給定時間只有 15-30 個並髮用戶;所以我沒有任何問題,但現在由於我們將添加更多用戶,我們將遇到效能問題。

所以我的問題是如何擴展我的網頁應用程式?我目前的計劃如下:

  1. 現在我只有一台vps伺服器在運行,apache + MySQL。
  2. 接下來,我計劃添加另一台 vps 伺服器,僅運行 MySQL,因此我將擁有一台網頁伺服器和一台資料庫伺服器。
  3. 接下來,我將向 Web 伺服器添加 memcache 以快取數據,以減輕 MySQL 的一些負載。
  4. 接下來,另一個網頁伺服器用於提供所有靜態內容。
  5. 接下來,一個用於負載平衡的 VPS 伺服器(nginx/varnish),後面是我的兩個 Web 伺服器,然後是 db 伺服器。

這聽起來像是可行的策略嗎?請引導我到這裡轉轉。

答案1

你知道你的第一個瓶頸在哪裡嗎?如果沒有,您是如何安排要做的事情的順序的?

也就是說,如果您在應用程式中沒有做任何嚴重錯誤,那麼您可能遇到的第一個限制將是由資料庫引起的磁碟 I/O,而您的策略可能是一個不錯的選擇。

將資料庫移至另一個實體磁碟應該會有很大幫助,並且是您要做的第一件事。例如,根據您使用的系統,在目前主機上使用第二個磁碟或移動到完全獨立的伺服器之間可能沒有區別或有很大區別。你在VPS 上運行,如果你的磁碟I/O 受限,那麼如果它碰巧使用相同的儲存(相同的磁碟或相同的SAN 或其他),那麼移動到第二個VPS 可能不會有太大幫助- 但最後一個是您的 vps 提供者應該解決這個問題。

答案2

我建議閱讀可擴展的互聯網架構作者:西奧‧施洛斯納格爾。本書描述了在伺服器之間擴展應用程式、確保無單點故障、擴展資料庫等的所有理論和實踐。

不過,你的計畫聽起來確實像是擴展的第一步。通常一切都從一台伺服器開始,然後拆分 Web 和資料庫,然後添加反向代理或負載平衡器並運行多個 Web 伺服器,等等。

答案3

你無法改進你不衡量的東西。首先你應該看看你的瓶頸是什麼。現在您可以使用 atop,並設定某種監控(如果尚未設定)。如果一切運作良好,您可以使用 JMeter 產生實際負載。

以下是關於圍繞 Django 應用程式構建的基礎設施的更多觀點。

相關內容