天天看點

伊對App視訊直播場景的Serverless技術實戰

北京米連科技有限公司成立于2015年,是國家高新技術企業,旗下品牌伊對App上線于2018年,專注于移動端交友和相親,将視訊、直播和線上紅娘創造性地融合在一起,開辟了視訊戀愛社群的獨立賽道,為單身人群提供了全新的社交體驗。截至2020年,伊對App注冊使用者已達1億,每月撮合線上相親活動約1000萬場,成為視訊戀愛社交垂直領域最具影響力的品牌之一。

業務需求

随着伊對App業務的快速增長,核心應用的系統規模和系統複雜度也在經曆着翻天覆地的變化。伊對App技術團隊通過引進新的技術手段,維護整套系統架構的技術先進性,以更好地支援業務需求,降低IT成本。從成立以來,伊對App的核心系統架構完成了多次重大的更新,涉及微服務化、容器化、分布式資料庫、大資料和人工智能等重要的技術,特别在Serverless技術的探索方面,伊對App投入了很大精力,以充分享受到雲計算時代資源快速彈性伸縮的價值。

在伊對App的業務場景裡面,視訊直播是最為重要的環節,基于視訊直播這個骨架,可以融入線上紅娘等多類創新業務模式,這也對視訊直播的内容安全提出了極高的要求。不論是自身通過AI技術對視訊直播内容進行智能分析,還是應對監管的要求,都需要在每一路視訊直播流開始後,根據固定頻率對視訊進行截幀,并通過統一的稽核服務對截幀生成的圖檔進行處理。

在這個需求裡面,截幀服務承擔着關鍵職責,這個服務不僅需要通過FFmpeg指令對每一路直播視訊流進行截幀操作,還需要将生成的圖檔儲存到對象存儲OSS,并将截幀資訊寫入到Kafka。這樣下遊的截幀服務就能從Kafka上拉取截幀資訊,并從截幀資訊中得到圖檔在OSS中的位址,進而完成對于圖檔的稽核。在這個架構中,引入Kafka是為了通過異步處理機制緩解稽核服務在業務高峰期的負載。

伊對App視訊直播場景的Serverless技術實戰

業務痛點

FFmpeg截幀指令使用非常簡單,但這是一個對于CPU算力要求非常高的操作。根據伊對App技術團隊的多次試驗,采用ECS部署截幀服務,是一個相對成本最優的選擇。如果按照每秒鐘1次截幀的固定頻繁,1台ECS能夠同時支撐大約數百路直播視訊流的截幀任務。為了保障業務高峰期的資源儲備,伊對App準備了大量ECS來部署截幀服務。跟絕大多數網際網路應用一樣,伊對App的負載也存在着波峰波谷,這樣的波動對伊對App整體的資源規劃帶來了極高的挑戰,如果按照固定的ECS叢集規模來部署截幀服務,會存在兩個非常明顯的弊端:

  1. 為了支援業務高峰,必須按照高峰期的使用者量來評估叢集規模,在業務低峰期就會造成巨大的浪費。
  2. 在某些場景下,比如節假日效應的帶動,業務量會有突增,有可能需要對叢集進行臨時擴容,這種情況下往往擴容速度會滞後于業務流的增速,造成部分業務的降級處理。

為了節省資源成本,伊對App也探索過很多種彈性伸縮政策,比如通過彈性ECS執行個體配合容器化的方式部署應用,以實作叢集規模能動态适配真實業務量的變化。但這些政策的實作都比較複雜,彈性伸縮能力都相對滞後。其中根本的原因是在傳統的服務架構中,一個應用啟動後都是長期保持運作的,在運作期間會并發會處理多個業務需求,不管業務量如何變化,這個應用占據的計算力都不會有本質的變化。

有沒有一種直截了當的方式,可以在一路直播視訊流開啟後,拉起對應的計算力承接截幀任務,而在視訊流關閉後,自動将計算力釋放呢?這樣的方式不需要應用執行個體長駐,可以實作真正的計算資源按需配置設定,也不需要借助額外的手段動态調整截幀服務的叢集規模,是一種最為理想的方案。

作為雲原生Serverless技術的代表,阿裡雲函數計算FC就正好實作了這樣的思路。

函數計算FC有哪些獨特之處?

阿裡雲自研的Serverless産品函數計算FC是事件驅動的全托管計算服務,完美契合了伊對App的需求和痛點。使用函數計算,使用者無需采購與管理伺服器等基礎設施,隻需編寫并上傳代碼。函數計算會自動準備好計算資源,彈性地、可靠地運作任務,并提供日志查詢、性能監控和報警等功能。借助函數計算FC,可以快速建構任何類型的應用和服務,并且隻需為任務實際消耗的資源付費。

伊對App視訊直播場景的Serverless技術實戰

函數計算FC提供了一種事件驅動的計算模型,函數的執行是由事件驅動的。函數的執行可以通過函數使用者自己觸發,也可以由其它一些事件源來觸發。可以在指定函數中建立觸發器,該觸發器描述了一組規則,當某個事件滿足這些規則,事件源就會觸發相應的函數。比如對于HTTP觸發起而言,使用者的一次HTTP請求就能觸發一個函數;而對于OSS觸發器而言,OSS上新增或修改一個檔案就能觸發一個函數。在伊對App的視訊截幀場景中,函數隻需要在每一個直播流開始推送之前,通過業務程式主動觸發一個截幀函數就可以了。是以之前截幀業務的架構隻需要做很小的調整,就能遷移到函數計算平台上來,以享受Serverless的價值。

伊對App視訊直播場景的Serverless技術實戰

解決方案及優勢

支援多種程式設計語言的Runtime

伊對App的技術團隊第一次和阿裡雲溝通Serverless方案的時候,阿裡雲的技術人員推薦使用Python語言實作截幀函數,因為函數計算FC對于Node.js、Python、PHP、Java等語言提供了原生的運作環境,而且像Python這樣的腳本語言可以實作在函數計算平台上直接修改排程代碼,使用非常簡單。其實函數計算FC對于開發語言沒有要求,任何主流的開發語言都可以很好的支援。通過函數計算FC提供的Custom Runtime,可以為任務語言建立自定義的運作環境。Custom Runtime本質上是一個HTTP Server,這個HTTP Server接管了函數計算系統的所有請求,包括來自事件調用或者HTTP函數調用。

伊對App視訊直播場景的Serverless技術實戰

極緻彈性和高可用性

由于在Serverless架構下,每一路直播視訊流都會拉起新的計算資源來承接截幀任務,是以并不需要采用高規格的ECS執行個體同時并發處理多個截幀任務。通過反複的測試,伊對App采取了最适合的函數計算執行個體來完成每路視訊流的截幀任務。

函數計算FC在計算資源的啟動方面做了大量優化,配合雲化的資源池,能夠在100毫秒的時間内排程大量計算執行個體,以承載特殊情況下突增的業務流量。為了更進一步的适配伊對App的業務場景,阿裡雲函數計算團隊還專門為伊對App提供了定時預熱的方式,以最大程度的保障業務高峰期冷啟動計算資源的性能。這樣極緻的彈性伸縮能力是Serverless的專長,傳統的應用架構的彈性伸縮依賴于底層計算資源的排程,以及複雜的初始化工作,在計算執行個體的啟動速度上遠遠達不到這個水準。

正常情況下,函數計算FC上一個普通彈性執行個體可運作時長為10分鐘,此外還提供了性能執行個體,以應對更高的資源需求,性能執行個體在可運作時長上也提升到了數小時。在伊對App的截幀場景中,單執行個體并不需要有很高的性能,但有必要伴随着直播視訊流長期運作,是以阿裡雲也為伊對App适當放開了彈性執行個體的運作時長限制:達到1小時。對于超過1小時的直播,同樣可以支援:在截幀場景中,當一個函數執行個體将要達到運作時長限制的時候,隻需要再拉起一個新的函數執行個體對截幀任務進行接力就可以了,對于截幀業務的正常運作不會有任何影響。

節省資源,降本增效

函數計算FC在實作計算資源按需排程,按量計費的同時,還通過預留執行個體的模型更進一步降低使用成本。根據初步的評估,在直播截幀這個業務場景上,通過基于函數計算FC的Serverless架構,能夠幫助伊對App減少20%以上的資源成本開支。

伊對App視訊直播場景的Serverless技術實戰

此外,由于函數計算FC不需要預留計算資源,也不需要對底層的軟硬體進行維護,極大程度的降低了營運成本,可以讓伊對App的技術團隊更專注在複雜業務邏輯的實作上。這也是Serverless技術為廣大企業和開發者帶來的巨大價值之一。

總結

在直播截幀場景試點Serverless技術成功後,伊對App繼續在更多業務領域發掘Serverless技術的比對場景。未來,伊對App将繼續基于自身的技術特點不斷深入探索Serverless架構,在擁抱新技術的同時也能充分享受到雲計算的紅利。

作者:阿裡雲解決方案架構師 山獵

推薦産品

函數計算FC

https://www.aliyun.com/product/fc

掃碼了解更多技術内容與客戶案例:

伊對App視訊直播場景的Serverless技術實戰