用於快速開發工作視訊服務的無伺服器方法

用於快速開發工作視訊服務的無伺服器方法

我從事外包工作,其主要原則可以用「賣得很多,做得快」來描述。 我們做得越快,我們賺的就越多。 而且,我們希望一切都能順利進行,而不是依靠拐杖和鼻涕,而是具有可接受的品質水準。 我將告訴您我在需要在短時間內開發促銷服務時的經驗。

鑑於: AWS根帳戶,技術堆疊選擇無限制,XNUMX個後端,XNUMX個月開發時間。

任務: 實施一項促銷服務,用戶上傳一到四個視頻,持續一到四秒,然後嵌入到原始視頻系列中。

解決方法

在這麼短的時間內編寫自己的自行車服務並不是一個好主意。 此外,為了使服務能夠應對負載並讓每個人都能接收到令人垂涎的視頻,需要基礎設施。 最好不要帶有飛機上的價格標籤。 因此,我們立即專注於最小化客製化的現成解決方案。

處理視訊的標準解決方案是 FFmpeg,它是一個跨平台控制台實用程序,透過參數,您可以剪切和配音音訊。 剩下要做的就是編寫一個包裝並將其發佈到生活中。 我們編寫了一個將兩個影片拼接在一起的原型,然後......樂趣就開始了。 該庫基於 .NET Core 2,它應該在任何虛擬機器上運行,因此我們採用 AWS EC2 實例,一切都會正常工作

隱藏文字不,這行不通
.
儘管 FFmpeg 簡化了任務,但對於真正有效的解決方案,您需要建立一個 EC2 執行個體並為其設計一個網路基礎設施,包括負載平衡器。 從頭開始部署的簡單任務變得「有點」複雜,基礎設施開始立即需要資金 - 每小時都會從客戶帳戶中提取運行時金額。

我們的服務不涉及長時間運行的流程,不需要龐大且龐大的關聯式資料庫,並且完全適合具有微服務呼叫鏈的基於事件的架構。 解決方案不言而喻 - 我們可以放棄 EC2 並實現真正的無伺服器應用程序,例如基於 AWS Lambda 的標準 Image Resizer。

順便說一句,儘管 AWS 開發人員顯然不喜歡 .NET,但他們支援 .NET Core 2.1 作為運行時,這提供了全方位的開發機會。

錦上添花的是,AWS 提供了一項用於處理視訊檔案的單獨服務 - AWS Elemental MediaConvert。

這項工作的本質非常簡單:我們獲取傳出視訊的 S3 鏈接,透過 AWS 控制台、.NET SDK 或簡單的 JSON 編寫我們想要對視訊執行的操作並呼叫服務。 它本身實作了用於處理傳入請求的佇列,將結果上傳到 S3 本身,最重要的是,為每個狀態變更產生一個 CloudWatch 事件。 這使得我們能夠實現 lambda 觸發器來完成視訊處理。

用於快速開發工作視訊服務的無伺服器方法
最終的架構如下圖所示:

整個後端位於兩個 lambda 表達式中。 另一種是用於旋轉垂直視頻,因為此類工作無法一次完成。

我們將以 JS 編寫並透過 pug 編譯的 SPA 應用程式的形式放置在公共 S3 儲存桶中。 要下載影片本身,我們不需要任何伺服器程式碼 - 我們只需要打開 S3 為我們提供的 REST 端點。 唯一的事情是不要忘記配置策略和 CORS。

陷阱

  • 由於某種未知的原因,AWS MediaConvert 僅將聲音分別應用於每個影片片段,但我們需要整個螢幕保護程式中的一首歡快的歌曲。
  • 垂直影片需要單獨處理。 AWS 不喜歡黑條,並將滾輪設定為 90°。

簡易溜冰場

儘管無狀態有很多優點,但您需要追蹤需要對視訊執行的操作:將音訊黏合或添加到完成的視訊序列中。 幸運的是,MediaConvert 支援透過其作業傳遞元數據,我們始終可以使用「isMasterSoundJob」形式的簡單標誌,在任何階段解析此元資料。

無伺服器完美地允許使用NoOps——這種方法假設沒有必要由一個單獨的團隊負責專案基礎設施。 因此,這是一件小事 - 我們在 AWS 上部署解決方案,而沒有系統管理員的參與,反正他們總是有事情要做。
為了加快這一切,我們在 AWS CloudFormation 上盡可能自動化部署腳本,這讓您可以直接從 VS 一鍵部署。 因此,一個 200 行程式碼的檔案允許您推導出成的解決方案,儘管如果您不習慣 CloudFormation 語法,它可能會令人震驚。

在總

無伺服器並不是萬能藥。 但在存在三個限制的情況下,它會讓生活變得更加輕鬆:“資源有限——短期——錢很少。”

適合無伺服器的應用程式的特徵

  • 沒有長時間運行的進程。 API Gateway硬限制為29秒,lambda硬限制為5分鐘;
  • 由事件驅動架構描述;
  • 分解為鬆散耦合的組件,如 SOA;
  • 根據您的情況不需要做太多工作;
  • 用 .NET Core 編寫。 要使用 .NET Framework,您至少仍需要具有適當執行時間的 Docker。

無伺服器方法的優點

  • 降低基礎設施成本;
  • 降低交付解決方案的成本;
  • 自動可擴展性;
  • 發展走在技術進步的最前線。

缺點,舉個具體例子

  • 分散式追蹤和日誌記錄 - 透過 AWS X-Ray 和 AWS CloudWatch 部分解決;
  • 調試不方便;
  • 空載時冷啟動;
  • AWS 使用者敵對介面是個普遍問題:)

來源: www.habr.com

添加評論