每日數億視頻播放量,秒拍播放鏈路優化實踐
原創【51CTO.com原創稿件】當前,我們正處于信息飛速發展的碎片化閱讀時代,綜合圖文優勢的短視頻越來越受到大眾青睞。2017年,各大互聯網巨頭陸續進軍短視頻領域,短視頻的火爆超出很多人的預期。短視頻真正較量的是內容和用戶體驗。一下科技旗下的秒拍和小咖秀作為短視頻行業的先行者,截至目前,日播放量峰值突破30億次,日上傳量峰值達200萬。它們是如何做到用戶體驗不受上傳和播放質量影響的呢?
近日,51CTO 以“Tech Neo”為主題的技術沙龍第十五期在北京舉行,此次活動邀請了來自一下科技的架構師賈朝藤。他于2014年加入秒拍,推進了秒拍上云,可視化日志分析,基礎架構改造和服務化改造、服務調優等工作。并熱衷各種基礎設施實踐,性能調優,高并發場景下服務全鏈路的可用性保障。從他的分享中,我們可以了解到秒拍在播放鏈路方面的優化實踐。
秒拍后端服務的技術架構
我們先來看看秒拍后端服務基本的技術架構,從上至下分為四層,如下圖所示:
最上層是Web、APP及微博和其他合作方的合作。它們直接面向用戶,為用戶提供最直接的產品服務。
第二層是直接面向服務的業務邏輯API,提供活動和視頻列表、用戶列表等直觀體現產品和業務邏輯的數據展現。
第三層是用戶、視頻等一系列細分、相對獨立于業務邏輯的服務。
第四層是基礎服務,如關系服務、計數服務、搜索服務、Push服務、推薦服務、敏感詞過濾服務、Feed、存儲等。
在整個服務流程中,上傳和播放是很核心的業務。如下圖,是播放之前資源上傳的流程:
- 由客戶端向業務邏輯服務器發出上傳申請,業務邏輯服務器告知采用哪個上傳點進行上傳。
- 七牛或新浪S3分別負責存儲上傳的分片,再由上傳端請求合并,由業務服務器接收視頻傳完之后的回調,進行狀態的更新,此時整個視頻從物理資源到業務狀態處理完畢。
- 緊接著進行轉碼和截圖處理,進入上傳后的服務處理流程。
其中,存儲主要是依賴第三方,視頻截圖、視頻轉碼等服務主要采用自研服務。
這里值得注意的是,資源上傳過程中需要做很多優化。
當前,手機端的功能很強大,足以支撐用戶隨意預覽,更換各種特效。比如特效的預覽,將視頻特效編輯和預覽放到手機端進行,一方面客戶可以直觀體驗視頻效果,另一方面可以充分利用客戶端運算資源,減少服務轉碼的處理壓力。還有視頻拍攝與編輯完后的轉碼壓縮,也會在客戶端做初步處理,再向業務服務器上傳,然后轉碼服務再做二次處理,借此來進行視頻文件瘦身,降低用戶流量消耗,提升用戶上傳速度。
在視頻生產端,我們有對拍攝、編輯、客戶端轉碼、上傳進行打點上報等相關統計,用于對生產端各環節的效率監測,推進各環節不斷優化,以及每個環節優化后從數據上可見的效果改進。
播放&調度歷史演進
綜上是播放之前資源上傳的一些優化方式方法,接下來,我們來聊聊播放&調度。秒拍的播放&調度共經歷了三個比較大的版本:
業務邏輯直接返回播放地址,是播放流程最簡化版
這也是最初的版本,在業務上線初期,從視頻上傳量到播放量都處于積累期,上傳和播放效率是我們比較關心的問題,但當前***的痛點是產品形態必須符合市場需求。這一版主要是由客戶端直接請求業務API返回的視頻資源地址,基于HTTP協議,下載之后直接播放。
基于探測點,CDN日志離線計算CDN質量,調度切量,是播放流程的進化版
隨著業務發展,視頻日上傳量和播放量越來越大,播放效率變得尤為重要,因為會直接影響到用戶對產品的體驗。
這時,我們新增了不同地域加探測點探測播放及下載質量,采集數據點進行質量分發,同時我們也會拿來CDN的下載請求日志進行分析和調度,這一版調度由離線運算判斷***結果,然后業務邏輯API返回播放地址,客戶端直接進行播放。
第三版是獨立調度服務,實時+離線判斷播放質量,進行調度。
基于上一版的研究,我們基于Nginx+Lua抽出來相對獨立的調度服務,非常輕的處理邏輯,采集端上的播放質量,對用戶所處省、市、地區、運營商的不同家CDN質量進行比對,然后給用戶最終***的CDN地址。
除播放質量外,還會采集失敗率、播放量之類的一系列參數和指標,進行分析或故障快速恢復、轉移,防止合作CDN廠商的節點負載過高,對播放速度造成影響。
另外調度服務還會做一些業務策略上的處理,比如涉嫌違規的視頻,在返回播放地址時做出判斷,同時刪除源站視頻及清理CDN緩存。
進化版還在自有IP庫及IP庫數據更新維護、防劫持與數據上報&日志分析等方面進行了迭代調優。
如下,是當前秒拍正在使用的調度系統簡化圖:
在播放調度方面,我們與多家CDN廠商合作,進行質量調度,實現快速接入,進而達到快速返回、弱業務邏輯、輕量,高效、靈活可控。
不可預測的黑天鵝
在業務發展和服務演進過程中一定會遇到不可預測的黑天鵝,如業務內網中斷,七牛寧波光纖被挖斷等。
為了避免源站出故障影響服務的正常進行,我們采用了多個源站方案,當某源站出現問題,可隨時進行切換,同時各源站之間能夠實現跨源站備份。
在上傳方面,也布設了多上傳點,靈活分配上傳點,保證用戶可以正常上傳。
在播放方面,對服務進行可用性檢測,更及時地調度節點反饋。對于播放質量調度,可根據質量服務,調用***的CDN。
海量日志分析和監控
秒拍日志的構成主要有:serveraccess log、error log、service log、app log、用戶 log 等。
傳統日志分析的痛點有以下幾方面:
- 日志量太大、單日志分析太慢、日志分布在不同服務集群、不同節點無法快速定位服務節點。
- 上下游狀態不可知、定位問題、場景分析效率太低。
- 故障之后驚群效應、一處反饋、多個組(部門)響應排查、耗費精力。
針對傳統日志分析的痛點,秒拍布設了實時日志分析系統,如下圖是部分細節展示:
ELK實時日志分析系統的主要作用是,當業務日志進來之后可以直接對其進行分析,以圖表化的方式,快速反饋各項服務狀態和一些統計信息。當出現問題時可快速感知,同時還有基于ELK的服務監控。
結合ELK,系統整合內部監控與告警平臺,實現整個視頻拍攝、編輯、上傳、轉碼、分發、播放的可視化指標對比,保證整個鏈路的效率,與對相關metric的實時告警,保證服務的穩定性與可用性。
播放業務不可缺少的一環
視頻和圖片在編碼、轉碼的質量,對播放會產生直接的影響。轉碼服務是播放業務不可缺少的一環,如下圖是整個轉碼服務的流程圖:
當用戶上傳視頻之后,不同業務端會通過在線或離線的方式提交轉碼任務,由轉碼服務進行異步轉碼,轉出不同規格的視頻或封面,提供給不同的合作方、不同的列表頁形態下進行展示。
視頻規格有多碼流、16:9、webp、隱水印等,轉碼過程要在不影響視頻清晰度、視頻質量的同時把文件大小、碼率等參數控制在***。這樣一來,從流量、加載速度等方面都可以持續調優,讓用戶流暢清晰地看視頻,也能節省很多流量。
在多碼流這一塊,秒拍采用了變碼率方案,根據視頻內容去適配碼率,來控制視頻編碼。
寫在***:
秒拍于2013年8月上線發展至今,占領了一定的國內市場。在未來,秒拍會在數據節點上發力,進行異地多活的部署、會針對云廠商不可依賴,會隱藏很多數據信息,出現問題不好查找源頭的問題,考慮混合云的改造、還會對自建 CDN 節點的融入、災備建設和監控統計等方面進行完善。當前,短視頻競爭日趨激烈的局面下,希望秒拍在未來的日子里不斷突破創新,越走越遠。讓我們共同期待高速成長的短視頻行業未來樣子。
【嘉賓簡介】
賈朝藤,下科技(秒拍、小咖秀、一直播)架構師。2014年加入秒拍,推進秒拍上云,可視化日志分析,基礎架構改造和服務化改造,服務調優。熱衷各種基礎設施實踐,性能調優,高并發場景下服務全鏈路可用性保障。
沙龍其他講師文章
10 月 28 日 / 北京,第十六期“Tech Neo”沙龍,主題:“自動化運維與 DevOps”,點擊圖片,立即報名。
【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】