2016-12-05 30 views
0

首先,我會向你解釋我的情況。我正在構建一個服務器來存儲和檢索我的手機應用程序的數據。我是NGINX的新手。我知道使用負載平衡/反向代理的意思是通過將工作負載分佈到多個服務器來提高性能和可靠性。但我不明白,它處理圖像/視頻文件。假設下面是我的NGINX配置文件NGINX反向代理如何處理圖像/視頻文件上傳或下載

upstream backend { 
    server backend1.example.com; 
    server backend2.example.com; 
    server backend3.example.com; 
}  
server { 
    listen 80; 

    server_name example.com; 

    location/{ 
     proxy_pass http://backend; 
    } 
} 

我在這裏沒有幾個問題。

首先,當我上傳圖片/視頻文件時,是否需要將圖片上傳到所有後端服務器或有其他方式?

第二,如果我只是將它保存到一個單獨的服務器,它只存儲圖像,而我請求並下載圖像或視頻文件時,我將它代理到指定的服務器,那麼對圖像/視頻文件進行負載平衡的原因是什麼?代理是通過將工作負載分佈在多個服務器上來提高性能和可靠性?

第三是否亞馬遜s3真的更好的存儲文件?它是否便宜?

我正在尋找可以由我自己的服務器旁邊使用第三方來完成的解決方案。

Thx任何幫助!

+1

如果你的服務器沒有共同的共享存儲,那麼你需要總是發送上傳和檢索到「一個特定的服務器」,可能根據位置。 HTH。 – rogerdpack

+0

@rogerdpack thx回覆。我如何創建公共共享存儲?任何鏈接建議?旁邊你建議使用亞馬遜s3來處理這些文件嗎? – user3651999

回答

2

您可以使用共享存儲,例如NFS或上傳到兩臺服務器,或者合併策略在服務器之間分發文件,將每個文件存儲在一臺服務器上。

前兩個選項在邏輯上相同並提供失敗轉移,因此提高了可靠性。如您注意的,第三個選項不會提高可靠性(可能某種程度上,如果一臺服務器發生故障,可能仍會服務某些文件)。但是,如果您對不同文件有多個併發請求並在服務器之間均勻分配,它可以提高性能。這不是通過nginx負載平衡實現的,而是根據請求(例如文件名或密鑰)重定向到不同的服務器。

對於共享存儲解決方案,可以使用例如NFS。有很多資源進入更深入的細節,例如https://unix.stackexchange.com/questions/114699/nfs-automatic-fail-over-or-load-balanced-or-clustering

對於重複的上傳解決方案,您可以從客戶端發送兩次文件或使用一些代碼在服務器端執行。服務器端解決方案具有來自客戶端的單個文件流量和僅在快速網絡上發送到第二服務器的好處。在簡單的情況下,這可以通過例如在servlet中接收文件,將傳入數據存儲到磁盤並且同時通過http或其他協議上傳到第二服務器上的另一個servlet來實現。

請注意,正確設置這些選項中的任何一個都可能涉及相當於重大努力,測試和維護。

這裏是S3,準備使用分佈式/共享存儲,具有簡單的API,集成,客戶和合理的價格。對於簡單的解決方案,通常每個存儲的成本並不便宜,但在R &方面便宜很多。它還可以選擇通過http(平衡,可靠和分佈式)提供蒼蠅和內容,因此您可以下載在S3客戶端直接從客戶端獲得文件,或者從http服務器獲取永久或臨時重定向。