2012-04-23 75 views
5

我維護的Web應用程序超出了單個VPS。該體系結構由大量小用戶組成,每個小用戶都有自己的子域。用戶不會互動。加載意味着我必須將一些用戶和所有新用戶移到另一臺服務器上的另一個Web應用程序安裝。水平縮放:在服務器之間路由用戶生成的子域

目前,每個用戶子域都屬於同一個虛擬主機,其中一個PHP前端控制器根據主機名顯示適當的內容。 * .mydomain.com的單個通配符DNS記錄指向當前服務器。

將不同的用戶子域路由到不同服務器的最佳選擇是什麼?

我的想法:

  • 爲每個服務器一個新的頂級域名。 user.s1.mydomain.com,user.s2.mydomain.com等(不雅和泄漏信息)
  • 運行我自己的DNS服務器以在服務器之間路由用戶(額外故障點,陌生技術)
  • A中央前端控制器/平衡器,反向代理每個請求到適當的服務器(額外的故障點,潛在的有限的連接)
+1

每個子域的用戶生成內容是否都在數據庫中,或者他們是否將自己的數據上傳到服務器上的文件系統? – drew010 2012-04-23 01:18:52

+0

@ drew010用戶內容既存儲在數據庫中,也存儲在文件系統中。由於用戶不交互,我可以自由設置多個數據庫實例......問題只是路由頁面查詢。我想分離數據庫+ Web服務器將是另一種可能的擴展方式,但最終我將不得不拆分Web服務器,並需要一個解決方案 – mappu 2012-04-23 01:37:01

+1

這就是我所想的。我最關注DNS,但這意味着您需要每個子域的A記錄,或者可以查詢您的應用程序以確定給定子域使用哪個IP地址的自定義DNS解決方案。現在你可能會有更好的結果在ServerFault上詢問這一點,我想到了它。 – drew010 2012-04-23 01:53:09

回答

4

在該點的應用程序擴展出來,我會去中央前負載平衡器。 Nginx應該能夠處理一臺服務器動態提供的任何負載。我們將nginx作爲六個動態服務器和一個靜態內容服務器的前端,並且nginx上看不到任何瓶頸。

在您的規模點上,設置nginx來處理所有靜態內容本身,並將代理動態內容反轉爲所需的儘可能多的框。如果你不使用PHP,調整配置

server { 
    listen 0.0.0.0:80; 
    server_name example.com; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    index index.php; 
    root /some/dir/: 
    location ~ \.php { 
     proxy_pass http://upstream_regular_backend; 
    } 
} 

當然,:對簡單的代理通過設置接近:

upstream upstream_regular_backend { 
    fair; 
    server 10.0.0.1:80; 
    server 10.0.0.2:80; 
} 

server { 
    listen 0.0.0.0:80; 
    server_name example.com; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    location/{ 
     proxy_pass http://upstream_regular_backend; 
    } 
} 

提供靜態內容,並傳回所有的休息,像因此。

關於上游定義,「公平」;將基於響應時間對後端進行負載平衡。爲了緩存動機,你可能需要使用「ip_hash」;相反,它會將來自客戶端的請求始終存放在同一臺服務器上。

我們的設置稍微偏離了道路。我們有nginx負載均衡器代理varnish緩存,該緩存代理動態內容服務器。

如果您擔心nginx是一個單點故障,請設置一個備用服務器,以準備假設前端IP失敗。

+0

感謝您的迴應 - 只要nginx能夠保留開放連接,ip_hash(缺失的拼圖)使我無需重新構建應用程序而無需關心每個請求所處的服務器。你有nginx負載均衡器終止SSL嗎? – mappu 2012-04-26 06:11:10

+0

我們會在nginx上終止SSL,但不會在我描述的設置上。 – 2012-04-26 18:09:28

+0

關於連接限制,我記得,我們遇到的唯一限制是打開文件描述符的數量。修改nginx init.d並讓它根據需要提高ulimit -n。除此之外,nginx路由流量具有出色的效率。 – 2012-04-26 18:11:18