2016-03-24 63 views
0

我有一個客戶想要我開發一個圖片網站。正如你所知道的,對於股票攝影,用戶上傳大文件,如10MB,20MB甚至50MB或更高。除此之外,在上傳時,我們將不得不創建幾個不同大小的縮略圖並存儲。這本身會延遲上傳過程,並會給服務器帶來額外壓力。上傳到圖片重型網站的最佳方式是什麼?

任何人都可以請幫助我找到上傳的最佳方法,以加速爲用戶和節省服務器壓力。例如Facebook等網站如何管理上傳?經過大量研究後,我提出了以下解決方案,但它們可能還不夠。 Node js或React js可以幫助上傳過程嗎?我的發現: 1.上傳一張圖片,然後在服務器上創建縮略圖並保存。 (這將節省一些帶寬,增加服務器的工作)

  • 獲取用戶機器上的圖像創建縮略圖(使用javascript),並上傳在服務器上(因爲我們是這將需要更多的帶寬對不同規模的服務器上傳相同的圖像,但保存在服務器工作)

  • 上傳與原始大小的單一形象,當我們需要一個不同的大小,然後使用服務器端腳本動態生成所需的縮略圖

  • 此外,它似乎是更快的響應t ime,我們可以使用像AMAZON S3這樣的存儲服務(這對長期有很大幫助,但是客戶不想使用亞馬遜,因爲將來存儲越來越多的圖像會越來越昂貴)

    我在此先感謝您

    +3

    在其他照片的網站,將圖片上傳由一個處理服務器類型,然後該映像被放置在磁盤上的隊列中,可以由其他服務器進行處理(創建多個大小,複製到備份存儲庫等)。其他服務器不參與Web進程,即使它們非常繁忙,也不會影響Web服務器。這確實意味着上傳的圖像可能需要很短的時間才能得到處理並出現在網站上(如果有繁忙的隊列)。如果您使用彈性資源,則可以撥打或關閉用於處理圖像的CPU。 – jfriend00

    +0

    您的客戶應將自己強大的可靠存儲成本與亞馬遜存儲成本進行比較。我知道至少有一個相對較大的照片網站,其中有數以萬億兆字節的存儲使用亞馬遜,因爲它比自己的存儲成本便宜。他們還使用亞馬遜服務器來處理圖像,因爲它可以更容易地按需擴展。 – jfriend00

    回答

    0

    您的客戶聽起來像是一個可能沒有大量現有用戶羣的創業公司嗎?沒有經驗的創始人往往會對「可擴展性」特性給予很大的重視,比如「如果用戶每月上傳一張TB圖像,成本會增長多少?」。

    這些幾乎都是過早的優化,在您嘗試證明您擁有產品市場的契合時,您的開發時間可能會比前6到12個月內的映像託管花費更多。

    我建議你去像cloudinary.com。用戶可以直接上傳到他們的服務器,因此您不必處理任何負載,他們將爲您動態創建任何所需維度的縮略圖。

    一旦你有足夠的吸引力和你的cloudinary費用保證,你可以聘請一個經驗豐富的開發/ devops團隊建立自己的基礎設施託管,備份和調整圖像大小。

    0

    您還可以使用nginx,Operesty和lua設置實時圖像處理服務器。這裏是鏈接 - Image Server

    如果你有興趣編寫自己的代碼來創建縮略圖,我會建議你,在這個過程中你應該使用FFmpeg和Java。我已經使用FFmpeg與Node.js和Java。

    FFmpeg是cpu不可變過程,如果您的服務器有大量圖片上傳流量,那麼您需要特定的硬件/高端機器來完成此過程。

    爲此目的而編寫自己的程序或者可以設置openresty服務器是非常好的,如果流量較低並且在流量開始增長時可以稍後進行擴展。

    而其他選項則是使用cloudinary,它們可以即時提供圖像處理以及提供CDN服務。

    這裏是萬一幾個環節要編寫自己的代碼上面

    Crop-and-scale-image-using-ffmpeg

    Transcoding-in-NODEJS-using-FFMPEG

    FFmpeg

    相關問題