我正在構建一個Web應用程序,允許用戶上傳音頻文件,特別是音樂。大多數時候,我預計每首歌曲的播放時間通常爲幾分鐘,文件大小約爲3-10MB。但是,我想要接受音頻上傳,最高可達100MB,可能需要超過一個小時的音頻。目前,我正在使用FFmpeg,SoX和LAME的組合將7種可能的格式轉換爲mp3格式,並執行包括均衡,修整和衰落在內的音頻修改。這些文件然後被存儲並鏈接到數據庫中。做實時,可擴展音頻處理的最佳策略?
我目前的策略是使用在後端PHP來處理一個HTTP文件上傳請求的整個過程,我在其中執行以下功能:
- 驗證
- 轉碼音頻信號轉變成多個版本(使用通過PHP)
- 商店殼原和轉碼版本的一個臨時目錄
- 上傳的所有音頻文件到Amazon S3的永久存儲
- 提交將每個文件的ID鏈接到數據庫,將它們鏈接到用戶
這與我已經設置的圖像處理系統非常相似。但是,儘管圖像可以在幾秒鐘內完成整個過程,但音頻可能需要更長的時間。音頻最多可能需要5-10分鐘才能處理和存儲。
我的問題是:
對於音頻處理,這將是更好的轉碼叉到另一個後臺進程,書寫自己的狀態數據庫,並執行ping命令它每隔幾秒鐘更新網頁與所有這一切都在一個HTTP請求?
隨着未來擴展的意圖,建議在單個服務器實例上進行所有處理,讓前端web實例免費複製/銷燬?
- 如果是,這是否需要跨域文件直接上傳到該服務器? (任何人都知道這是怎麼YouTube或大網站做呢?)
謝謝!
我不想使用外部服務進行轉碼,因爲我們已經自己處理了轉碼,但這更多的是關於如何在允許文件上傳的同時進行縮放的問題。我的假設是,只要我們允許在任何前端Web實例上進行文件上傳,橫向擴展就會困難得多,因爲只要流量減少,理論上就可以銷燬實例,這可能發生在文件上傳的中間。在那種情況下,在一臺中央服務器上處理所有文件上傳會更好嗎? –
zencoder的建議僅僅是一個建議,可以考慮其他事情,而不是主要觀點。 –
不知道您的流量和預算的具體細節,我不能告訴你,如果有一個或更多的上傳服務器更好。對於大型上傳,我通常會將客戶端重定向到s3,而不是隧道式傳輸或自行託管文件。這需要客戶端更多的智能,但它更加強大和動態。 –