当视频恋爱 App 用上了 Serverless
北京米連科技有限公司成立于 2015 年,是國家高新技術企業,旗下品牌伊對 App 上線于 2018 年,專注于移動端交友和相親,將視頻、直播和線上紅娘創造性地融合在一起,開辟了視頻戀愛社區的獨立賽道,為單身人群提供了全新的社交體驗。截至 2020 年,伊對 App 注冊用戶已達 1 億,每月撮合線上相親活動約 1000 萬場,成為視頻戀愛社交垂直領域最具影響力的品牌之一。
業務需求
隨著伊對 App 業務的快速增長,核心應用的系統規模和系統復雜度也在經歷著翻天覆地的變化。伊對 App 技術團隊通過引進新的技術手段,維護整套系統架構的技術先進性,以更好地支持業務需求,降低 IT 成本。從成立以來,伊對 App 的核心系統架構完成了多次重大的升級,涉及微服務化、容器化、分布式數據庫、大數據和人工智能等重要的技術,特別在 Serverless 技術的探索方面,伊對 App 投入了很大精力,以充分享受到云計算時代資源快速彈性伸縮的價值。
在伊對 App 的業務場景里面,視頻直播是最為重要的環節,基于視頻直播這個骨架,可以融入線上紅娘等多類創新業務模式,這也對視頻直播的內容安全提出了極高的要求。不論是自身通過 AI 技術對視頻直播內容進行智能分析,還是應對監管的要求,都需要在每一路視頻直播流開始后,根據固定頻率對視頻進行截幀,并通過統一的審核服務對截幀生成的圖片進行處理。
在這個需求里面,截幀服務承擔著關鍵職責,這個服務不僅需要通過 FFmpeg 命令對每一路直播視頻流進行截幀操作,還需要將生成的圖片保存到對象存儲 OSS,并將截幀信息寫入到 Kafka。這樣下游的截幀服務就能從 Kafka 上拉取截幀信息,并從截幀信息中得到圖片在 OSS 中的地址,從而完成對于圖片的審核。在這個架構中,引入 Kafka 是為了通過異步處理機制緩解審核服務在業務高峰期的負載。
業務痛點
FFmpeg 截幀命令使用非常簡單,但這是一個對于 CPU 算力要求非常高的操作。根據伊對 App 技術團隊的多次試驗,采用 ECS 部署截幀服務,是一個相對成本最優的選擇。如果按照每秒鐘1次截幀的固定頻繁,1 臺 ECS 能夠同時支撐大約數百路直播視頻流的截幀任務。為了保障業務高峰期的資源儲備,伊對 App 準備了大量 ECS 來部署截幀服務。跟絕大多數互聯網應用一樣,伊對 App 的負載也存在著波峰波谷,這樣的波動對伊對 App 整體的資源規劃帶來了極高的挑戰,如果按照固定的 ECS 集群規模來部署截幀服務,會存在兩個非常明顯的弊端:
為了支持業務高峰,必須按照高峰期的用戶量來評估集群規模,在業務低峰期就會造成巨大的浪費。
在某些場景下,比如節假日效應的帶動,業務量會有突增,有可能需要對集群進行臨時擴容,這種情況下往往擴容速度會滯后于業務流的增速,造成部分業務的降級處理。
為了節省資源成本,伊對 App 也探索過很多種彈性伸縮策略,比如通過彈性 ECS 實例配合容器化的方式部署應用,以實現集群規模能動態適配真實業務量的變化。但這些策略的實現都比較復雜,彈性伸縮能力都相對滯后。其中根本的原因是在傳統的服務架構中,一個應用啟動后都是長期保持運行的,在運行期間會并發會處理多個業務需求,不管業務量如何變化,這個應用占據的計算力都不會有本質的變化。
有沒有一種直截了當的方式,可以在一路直播視頻流開啟后,拉起對應的計算力承接截幀任務,而在視頻流關閉后,自動將計算力釋放呢?這樣的方式不需要應用實例長駐,可以實現真正的計算資源按需分配,也不需要借助額外的手段動態調整截幀服務的集群規模,是一種最為理想的方案。
作為云原生 Serverless 技術的代表,阿里云函數計算 FC 就正好實現了這樣的思路。
函數計算 FC 有哪些獨特之處
阿里云自研的 Serverless 產品函數計算 FC 是事件驅動的全托管計算服務,完美契合了伊對 App 的需求和痛點。使用函數計算,用戶無需采購與管理服務器等基礎設施,只需編寫并上傳代碼。函數計算會自動準備好計算資源,彈性地、可靠地運行任務,并提供日志查詢、性能監控和報警等功能。借助函數計算 FC,可以快速構建任何類型的應用和服務,并且只需為任務實際消耗的資源付費。
函數計算 FC 提供了一種事件驅動的計算模型,函數的執行是由事件驅動的。函數的執行可以通過函數使用者自己觸發,也可以由其它一些事件源來觸發。可以在指定函數中創建觸發器,該觸發器描述了一組規則,當某個事件滿足這些規則,事件源就會觸發相應的函數。比如對于 HTTP 觸發起而言,用戶的一次 HTTP 請求就能觸發一個函數;而對于 OSS 觸發器而言,OSS 上新增或修改一個文件就能觸發一個函數。在伊對 App 的視頻截幀場景中,函數只需要在每一個直播流開始推送之前,通過業務程序主動觸發一個截幀函數就可以了。因此之前截幀業務的架構只需要做很小的調整,就能遷移到函數計算平臺上來,以享受 Serverless 的價值。
解決方案及優勢
1、支持多種編程語言的 Runtime
伊對 App 的技術團隊第一次和阿里云溝通 Serverless 方案的時候,阿里云的技術人員推薦使用 Python 語言實現截幀函數,因為函數計算 FC 對于 Node.js、Python、PHP、Java 等語言提供了原生的運行環境,而且像 Python 這樣的腳本語言可以實現在函數計算平臺上直接修改調度代碼,使用非常簡單。
其實函數計算 FC 對于開發語言沒有要求,任何主流的開發語言都可以很好的支持。通過函數計算 FC 提供的 Custom Runtime,可以為任務語言建立自定義的運行環境。Custom Runtime 本質上是一個 HTTP Server,這個 HTTP Server 接管了函數計算系統的所有請求,包括來自事件調用或者 HTTP 函數調用。
2、極致彈性和高可用性
由于在 Serverless 架構下,每一路直播視頻流都會拉起新的計算資源來承接截幀任務,因此并不需要采用高規格的 ECS 實例同時并發處理多個截幀任務。通過反復的測試,伊對 App 采取了最適合的函數計算實例來完成每路視頻流的截幀任務。
函數計算 FC 在計算資源的啟動方面做了大量優化,配合云化的資源池,能夠在 100 毫秒的時間內調度大量計算實例,以承載特殊情況下突增的業務流量。
為了更進一步的適配伊對 App 的業務場景,阿里云函數計算團隊還專門為伊對 App 提供了定時預熱的方式,以最大程度的保障業務高峰期冷啟動計算資源的性能。這樣極致的彈性伸縮能力是 Serverless 的專長,傳統的應用架構的彈性伸縮依賴于底層計算資源的調度,以及復雜的初始化工作,在計算實例的啟動速度上遠遠達不到這個水平。
正常情況下,函數計算 FC 上一個普通彈性實例可運行時長為 10 分鐘,此外還提供了性能實例,以應對更高的資源需求,性能實例在可運行時長上也提升到了數小時。在伊對 App 的截幀場景中,單實例并不需要有很高的性能,但有必要伴隨著直播視頻流長期運行,因此阿里云也為伊對 App 適當放開了彈性實例的運行時長限制:達到 1 小時。
對于超過 1 小時的直播,同樣可以支持:在截幀場景中,當一個函數實例將要達到運行時長限制的時候,只需要再拉起一個新的函數實例對截幀任務進行接力就可以了,對于截幀業務的正常運行不會有任何影響。
3、節省資源,降本增效
函數計算 FC 在實現計算資源按需調度,按量計費的同時,還通過預留實例的模型更進一步降低使用成本。根據初步的評估,在直播截幀這個業務場景上,通過基于函數計算 FC 的 Serverless 架構,能夠幫助伊對 App 減少 20% 以上的資源成本開支。
此外,由于函數計算 FC 不需要預留計算資源,也不需要對底層的軟硬件進行維護,極大程度降低了運營成本,可以讓伊對 App 的技術團隊更專注在復雜業務邏輯的實現上,這也是 Serverless 技術為廣大企業和開發者帶來的巨大價值之一。
總結
在直播截幀場景試點 Serverless 技術成功后,伊對 App 繼續在更多業務領域發掘 Serverless 技術的匹配場景。未來,伊對 App 將繼續基于自身的技術特點不斷深入探索 Serverless 架構,在擁抱新技術的同時,也能充分享受到云計算的紅利。
原文鏈接:https://developer.aliyun.com/article/789435?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的当视频恋爱 App 用上了 Serverless的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 9月26日数聚云端·智驭未来「阿里云数据
- 下一篇: Nacos 开源、自研、商业化三位一体战