儲存大量用戶上傳圖像的最佳實踐

儲存大量用戶上傳圖像的最佳實踐

我們目前有一個基於 Django 的網站,允許用戶上傳大量圖像。所有這些都儲存在我們伺服器的單一硬碟上。問題是:我們慢慢達到可用硬碟的最大容量,因此垂直擴展不再是選項。

據我所知,Amazon S3/CloudFront 沒有這樣的限制,但是,對於高流量站點,這些服務比我們自己的伺服器機架貴得多。在我們自己的環境中是否有將上傳拆分到多個磁碟上的最佳實踐?

答案1

這很糟糕 - 在資料內容很重要的伺服器環境中,您至少應該使用 RAID 來減輕磁碟故障的重大風險 - 並且 RAID 也是儲存問題的答案。您可以使用 RAID 陣列來增加儲存容量。 (RAID用於將多個磁碟提供單一虛擬磁碟,具有不同的效能特徵和冗餘)

還有其他您確實需要了解和使用的技術 - 您尚未指定您的作業系統,但希望它是 Linux 變體 - 在這種情況下,您應該查看處理磁碟管理的 LVM,並且除其他外,它具有能夠將多個磁碟合併為單一虛擬磁碟- 在作業系統層級之下。

當然,您也可以看看 SANS 之類的東西,它通常需要多個磁碟,並且可以將它們合併到一個大型外部硬碟中。

答案2

假設您希望避免基於雲端的服務,傳統的大型企業方法是採購可以將許多單獨的磁碟合併到單一邏輯檔案系統中的硬體或軟體。有很多可能的方法可以做到這一點。我就列舉幾個:

  • 使用分散式檔案系統(例如 glusterfs)將允許您擁有多個伺服器,每個伺服器都有自己的 CPU、RAM 和存儲,並且在所有伺服器之間共用一個邏輯檔案系統。

  • 您還可以進一步採用這種分散式概念,將整個系統從頭到尾集群起來,這樣看起來您正在運行一台邏輯計算機,而實際上它是一系列緊密相連的聯網計算機(最好通過一些非常高速的網路)。

  • 您可以透過購買「儲存伺服器」來節省購買主機板、機箱、CPU、RAM等的費用,「儲存伺服器」是一種功能中等的企業級伺服器,連接有許多硬碟——可以直接安裝到機箱中,也可連接到機箱。在這些配置中,硬碟通常使用硬體 RAID 控制器或背板連接到一個邏輯設備。當然,這種方法最終會達到最大值。如果您擁有可以以最大磁碟密度安裝在單一機架中的所有磁碟,在這種情況下,您可以透過擁有這些儲存伺服器的檔案系統層或系統層叢集來進行擴充。

根據您預計在未來N幾年內需要的儲存空間的確切大小(其中 N 是您願意提前規劃的年數),其中一些解決方案將比其他解決方案更昂貴或更難管理。

在需要數千 TB 冗餘儲存的極端範例中,就 Amazon S3 向下游客戶提供的規模而言,您幾乎必須擁有某種叢集系統,通常需要使用集中式基礎設施來管理它。在這些情況下,非常快速的節點間網路對於保持良好的效能至關重要。絕對至少要考慮 10G 乙太網路。

從你說你目前正在運行的事實來看單一硬碟不過,在不使規模過大的情況下,從這裡開始擴展的最經濟的方法是購買一台可容納 4 到 8 個硬碟的 2U 或 3U 伺服器,並在 RAID 中插入一堆磁碟。對於如此數量的磁碟,RAID10、RAID5 和 RAID6 都是相當常見的配置,但如果您使用 RAID5/RAID6,請確保使用硬體 RAID 控制器以避免過度的 CPU 負載。

使用此方法和目前可用的磁碟,您可能可以擴展到大約16 TB 的可用儲存(含冗餘),但請注意,容量較大的磁碟往往速度較慢,吞吐量較低,回應時間較長,這就是為什麼非常慢的原因。他們達到相同的可用容量。 :/

相關內容