陳璟遠,朱民耀
(上海大學 通信與信息工程學院,上海 200444)
Aspera-fasp技術在視頻CDN系統中的應用與研究
陳璟遠,朱民耀
(上海大學 通信與信息工程學院,上海 200444)
研究、設計了一個基于HTTP Live Streaming視頻流媒體技術的視頻直播和點播的CDN系統,并在此基礎上對其進行優化。目前,傳統的CDN系統雖適用于目前國內大部分的網絡環境,但在某些極端惡劣的環境條件下,比如無專線網絡情況下的跨國數據傳輸,還是無法滿足正常的業務需求。因此,該設計引入了Aspera-fasp傳輸技術,這是一項突破性的傳輸協議,能充分利用現有的WAN基礎設施和通用硬件,讓其為傳統的CDN系統提供全球數據的快速傳輸。
CDN系統;流媒體;全球數據傳輸;Aspera-fasp
近幾年來,隨著國務院發布了“寬帶中國”戰略及實施方案,互聯網技術得到了飛速的發展,其中視音頻業務在互聯網中的應用呈爆炸式增長,而傳統電視媒體業務像有線電視、廣播電臺正在逐漸淡出人們的視野。CDN技術便是在這個背景下所衍生出來的,它作為一種提高網絡內容,特別是視頻流媒體內容的服務質量、節省骨干網的服務帶寬的技術,在世界各地得到了廣泛的應用。
CDN的全稱是Content Delivery Network,即內容分發網絡[1]。是通過在現有的 Internet 中增加一層新的網絡架構,將網站的內容發布到最接近用戶的網絡“邊緣”,使用戶可以就近取得所需的內容,解決 Internet 網絡擁塞狀況,提高用戶訪問網站的響應速度,從技術上全面解決由于網絡帶寬小、用戶訪問量大、網點分布不均,造成的用戶訪問網站響應速度慢的問題。
在互聯網視頻中,節目的存儲和網絡帶寬始終是一對矛盾,如果把所有的內容都集中在一個地方存儲,這樣雖可降低存儲的成本,但帶寬的成本巨大;如果把所有的內容都分布到邊緣,這樣帶寬成本降低,但存儲成本巨大。視頻CDN技術就是在兩者之間尋找一種平衡。
CDN系統模型的拓撲結構采用的是自上而下的樹形結構[2],最頂層是源服務器(origin server),往下為緩存服務器(cache server),它可以分為很多級,而真正為用戶提供服務的緩存服務器稱為邊緣節點,邊緣節點在互聯網中是離用戶最近的。
在本文設計的系統總體結構中,采用3層結構,遵循核心集中,節點分散的異地部署原則,最頂層的源節點部署于中國上海;第2層區域層分別位于浙江、江蘇、湖南、福建、四川、遼寧等;第3層邊緣層分別位于臺州、鎮江、益陽、德陽、沈陽等,同時為了全球視頻業務的拓展,還加入了加拿大節點。
1.1 硬件架構
系統整體硬件結構可分為3層結構(如圖1所示)。第1層部署在接入電信、聯通、移動線路的核心機房,為源節點。第2層是部署在電信和聯通網絡骨干的中間節點,為區域中心。第3層是部署在各地的CDN前端節點,為邊緣節點,直接為用戶提供視頻的直播和點播服務。

圖1 系統硬件架構圖
1.2 軟件架構
系統整體軟件架構可分為直播和點播兩部分(如圖2所示),其中直播軟件架構主要負責直播頻道的實時切片、實時加擾,M3U8實時更新,節目的存儲;點播軟件架構主要負責點播內容的管理和快速下發,實時MP4封裝轉TS封裝格式,M3U8代理。區域中心和邊緣節點都是基于nginx開發搭建的緩存服務器,主要實現了文件緩存、反向代理、防盜鏈、流量統計、HLS一次回源、預測回源等功能[3]。

圖2 系統軟件架構圖
1)直播Origin
直播源的所有功能模塊主要分為4部分,基于C/S結構的Live Manager和origin、drmServer和數據庫。Live Manager負責管理每個origin服務進程和drmServer的狀態,并把記錄保存在數據庫中。
單個origin服務進程的框架結構,基于Tomcat開發,agent主要負責接收來自Live manager的指令來執行相應的定時任務,以完成對UDP組播流的切片和打包,其中Package模塊和harmonic模塊的輸出互為主備切換。最終通過nginx完成http server的M3U8和TS的Proxy。
2)點播源
點播源中的主進程是基于nginx而開發的server服務,接收來自中央CMS的視頻下發命令和來自下層的客戶請求。其中主要包含MP4 to TS模塊和M3U8代理模塊[4]。前者完成在用戶請求時MP4到TS的動態封裝轉換;后者負責解決HLS的一次回源功能[5],確保每個節目對SLB的請求次數為1次。
3)FDN下發
FDN(Fast Delivery Network)是中央CMS下發節目的唯一接口,負責點播源的推送,推送完成后通知相關各地CMS。接口主要包含:Copy,Del,Transcode,Pack,Unpack,Check,Notify,Idle,Complete。各節點的狀態有NEW,EXECUTE,READY,DONE,ERROR,SERVERABLE。當某個根節點下的所有子節點都完成下發操作后,該節點該內容可以被上線,對外提供服務。
4)SLB請求調度
SLB(Service Load Balance)簡單地說就是為服務器集群分配“工作任務”,采用恰當的調度算法,對于保護處于后端的Web服務器來說,非常重要。
當某個節點如果發生故障時,需要建立一個機制去保證服務仍然可用。這里比較常見的容災方式,是切換到附近城市節點。假如系統的天津節點發生故障,那么就將網絡流量切換到附近的北京節點上。考慮到負載均衡,可能需要同時將流量切換到附近的幾個地域節點。此外,核心節點自身也需要做到完備的容災和備份措施。
過載保護,指的是一個節點已經達到最大容量,無法繼續接受更多請求了,系統必須有一個保護的機制。一個服務已經滿負載,還繼續接受新的請求,會影響當前整個節點的服務質量。
本系統的容災及過載保護策略有以下3點:
(1)存活性:live=0(節點癱瘓),則不提供服務。
(2)負載:load>40(節點CPU負載超過40%),則不提供服務。
(3)流量:網絡流量超過節點上限,則調度權重下降。
節點權重的設置:首先根據IP庫確定用戶地區和運營商,優先選擇相同運營商,默認為1。跨省節點權重下降1/4,節點調度時使用加權隨機,備選集合鎖定于同一優先級中高于最高權重1/10以上的節點;對于權重低于1×10-15的節點不選擇其提供服務。
5)預測回源
預測回源功能是為所有邊緣節點開發的一個功能模塊,目的是為了在邊緣節點為用戶提供服務的同時,預測用戶的行為,先行用戶一步進行回源操作,循環往復。那么當用戶真正的請求到來時,就避免了Cache未命中的情況發生,解決了用戶卡頓的現象。
6)統計和報表系統
統計系統通過日志收集服務器收集所有邊緣節點的SLB和nginx日志,在統計服務器上完成對日志的解析,生成CSV文件,將CSV上傳到infobright服務器入庫。報表系統使用Hadoop對數據庫數據進行二次處理,生成每日的報表并二次入庫。
1.3 系統工作流程
直播系統由于需要考慮視頻直播的實時性,工作流程由直播Orgin發起(如圖3所示),采用PUSH的工作模式,主動向下一層一層將視頻推向距離用戶最近的邊緣節點。點播系統則采用相對被動的PULL工作模式(如圖4所示),工作流程由用戶的請求觸發,一層一層向上拉取視頻節目,最終回到CDN的源節點。

圖3 直播系統工作流程圖

圖4 點播系統工作流程圖
這是一項突破性傳輸協議,充分利用現有的WAN基礎設施和通用硬件,傳輸速度比FTP和HTTP快數百倍,具有端對端安全性、100%可靠性以及卓越的帶寬控制能力。
fasp是在用戶數據報協議(UDP)之上開發的應用層協議,在單個數據流上實現了速度最大化。在理論上fasp沒有速率上限,可以完全利用任意速度網絡的帶寬。
在中國到加拿大的OC-3鏈接上,使用fasp傳輸時速率可以接近155 Mbit/s,在某些情況下可以比TCP快千倍,且其速率具有可預測性。所以fasp實現了在高速廣域網上傳輸海量數據(和文件大小無關)的高速傳輸。
2.1 性能測試
上海——加拿大,使用fasp,帶寬100 Mbit/s,平均傳輸速率92 Mbit/s,文件大小1 Gbyte,傳輸時間1分49秒,如圖5所示。

圖5 帶寬100 Mbit/s的fasp傳輸(截圖)
上海——加拿大,HTTP傳輸,帶寬100 Mbit/s,平均傳輸速率0.872 Mbit/s,文件大小1 Gbyte,預計傳輸時間1小時37分,如圖6所示。

圖6 帶寬100 Mbit/s的HTTP傳輸(截圖)
2.2 系統改進
利用fasp在廣域網上數據傳輸的卓越能力,本設計在第二部分實現的CDN系統基礎上稍作改進,如圖7所示,在原有的CDN三層結構的前兩層中增加一層網絡結構,使用Aspera-fasp技術進行傳輸。該設計針對跨國數據傳輸以及國內跨省市,且受南北網絡運營商限制的傳輸,提升效果非常明顯。

圖7 fasp系統改進圖
2.3 軟件設計
1)軟件工作流程
圖8和圖9所示為使用Aspera-fasp服務節點的軟件工作流程和框架圖,由于每次請求的M3U8文件大小都較小,故不使用fasp傳輸;僅當有視頻請求時,才使用fasp進行傳輸。傳輸完成的視頻文件通過Prepost后處理進程更新到Cache緩存中去。

圖8 多Job傳輸多文件流程圖

圖9 節點軟件框架圖
2)示例代碼
每一個的fasp傳輸任務都依靠一個fasp manager統一執行和管理,它提供一套用于Aspera數據傳輸的高級接口,在傳輸過程中提供狀態分析和進度統計。
fasp manager主要接口有:GetInstance,Destroy,LaunchJob,ControlJob,CancelJob,AddSourcePath,AddCallback,GetJobIdList,GetJobStats等。程序如下:
int main( )
{
Aspera::FaspManager::JobOrder *job_defn;
Aspera::FaspManager::Location *src;
Aspera::FaspManager::Location *dst;
Aspera::FaspManager::XferParams *xfer_params;
Aspera::FaspManager::Manager *manager;
/* Setup the transfer parameters */
xfer_params = new Aspera::FaspManager::XferParams( );
xfer_params->encryption = Aspera::FaspManager::ENCRYPT_AES128;
xfer_params->target_rate = TARGET_RATE; /* Transfers never exceed this rate */
xfer_params->min_rate = MIN_RATE;
xfer_params->policy = Aspera::FaspManager::POLICY_FAIR;
xfer_params->create_dirs = CREATE_DIRS;
xfer_params->cookie = "my sample cookie";
xfer_params->resume_check = Aspera::FaspManager::RESUME_NONE;
xfer_params->persist = true;
xfer_params->tcp_port = 9999;
/* Setup the job order */
job_defn = new Aspera::FaspManager::JobOrder( );
job_defn->src_location = src;
job_defn->dst_location = dst;
job_defn->xfer_params = xfer_params;
const char* job_id;
/* Setup a callback function */
Aspera::FaspManager::CallbackFunctor
MyCallbackClass *callbackobj = new MyCallbackClass();
callback = new Aspera::FaspManager::CallbackFunctor
manager = Aspera::FaspManager::Manager::GetInstance();
manager->SetDebugLevel(1);
manager->AddGlobalCallback(callback); // This callback fires for all events for all jobs/sessions
/* Launch the job */
job_id = manager->LaunchJob ( job_defn, callback ); // A callback specified here will only fire for this job
/* Wait for session to start */
while(!callbackobj->isSessionReady())
callbackobj->sleep(1000);
/* Queue files to be downloaded */
manager->AddSourcePath(job_id, "playtrace.log.2013-01-21", "playtrace.log.2013-01-21");
manager->AddSourcePath(job_id, "playtrace.log.2013-01-22", "playtrace.log.2013-01-22");
/* Let it run until one file transferred or an error occurs (the session doesn't stop until we tell it to) */
while(callbackobj->getFileTransferCount() != 2)
callbackobj->sleep(1000);
/* Stop session */
manager->StopPersistentJob(job_id);
/* Wait for session to stop */
while(callbackobj->isSessionReady())
callbackobj->sleep(1000);
/* Cleanup and close mgr */
manager->Destroy();
return 0;
}
3)異常處理機制
當國家級骨干網傳輸發生故障時,在本系統的網絡流量監控上表現為兩種情況,分別是流量的銳減(通信無法進行)和劇增(丟包和重傳)。針對這兩種情況,本軟件有特殊的異常處理機制,為每個Job都分配一個定時器,將未完成的任務記錄到一個隊列中,在網絡環境恢復之后進行重傳,隊列的淘汰閾值為1天。
2.4 系統性能對比
如表1所示,當不使用Aspera-fasp,僅使用普通HTTP進行傳輸時,總帶寬為300 Mbit/s時,一片時長為10 s的視頻文件,平均傳輸時間約為10 s,且經常出現連接超時及中斷現象。在這種情況下,客戶端無法進行流暢的解碼和播放,視頻流媒體會出現嚴重的卡頓現象,用戶體驗極差。而當使用Aspera-fasp進行傳輸后,如表2和表3所示,在總帶寬分別限制在300 Mbit/s和150 Mbit/s時,一片時長為10 s的視頻文件平均傳輸時間為0.8 s和1.4 s。
表1 HTTP(300 Mbit/s)傳輸情況

文件大小/byte17957761750468128516872051996776110600180686818341281817584傳輸時間/s9937174951437620538125617077216348191829899
表2 Aspera-fasp(300 Mbit/s)傳輸情況

文件大小/byte12577552015583179334317531351067098944921159126720693272128358傳輸時間/s07829100460957191130207479070793085041024116177
表3 Aspera-fasp(150 Mbit/s)傳輸情況

文件大小/byte17967512019720177228619990399783861678312186367917407271891854傳輸時間/s146178155199143012154776103716148900153209149318173169
由圖10可見系統整體性能提升近10倍左右,提升效果十分顯著。無論對視頻直播還是視頻點播,該傳輸質量完全可以保證流暢無卡頓的播放,完全滿足全球視頻直播和點播CDN系統的業務需求。

圖10 加拿大節點使用fasp前后性能對比
基于視頻的內容分發技術是目前在互聯網上播放視頻的最核心的關鍵技術。筆者根據當前國內網絡狀況,為了滿足全球視頻直播和點播的需求,在基礎CDN架構的第一、二層之間用軟件實現了一層基于Aspera-fasp的傳輸層,優化了其在廣域網數據傳輸上的瓶頸。本文最后給出了Aspera-fasp技術詳細的測試報告、前后性能對比。經過改善后的CDN系統針對跨國傳輸時的性能提高近10倍,總體帶寬利用率高達98%,完全滿足了全球視頻直播和點播的CDN系統的業務需求。
[1] 梁潔,陳戈. 內容分發網絡(CDN)關鍵技術、架構與應用[M].北京:人民郵電出版社, 2013.
[2] 雷葆華,孫穎.CDN技術詳解[M].北京:電子工業出版社, 2012.
[3] 陶輝.深入理解Nginx:模塊開發與架構解析[M].北京:機械工業出版社, 2013.
[4] PANTOS R. HTTP live streaming protocol the IETF Internet-draft of the HTTP live streaming specification[EB/OL].[2015-04-12].http://tools.ietf.org/html/draft-pantos-http-live-streaming.
[5] Apple Inc. HTTP live streaming overview[EB/OL].[2015-04-12].http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/Introduction/Introduction.html.
Application and Research of Aspera-fasp Technology in Video CDN System
CHEN Jingyuan,ZHU Minyao
(School of Communication & Information Engineering,Shanghai University,Shanghai 200444)
A CDN system for live streaming or video on demand based on the technology of HTTP Live Streaming is designed and implemented, furthermore, it improves and optimizes this system. Although traditional CDN system is suitable for most domestic network environment, but in some extreme environmental conditions, such as cross-border data transmission without dedicated network, or cannot meet the business needs. Therefore, this paper introduces the Aspera-fasp transport technology which is a breakthrough transfer protocol that leverages existing WAN infrastructure and commodity hardware to move the world’s data at maximum speed for the traditional CDN system.
CDN system; streaming media; world’s data transfer; Aspera-fasp
TN948
A
10.16280/j.videoe.2015.20.014
2015-05-22
【本文獻信息】陳璟遠,朱民耀.Aspera-fasp技術在視頻CDN系統中的應用與研究[J].電視技術,2015,39(18).
陳璟遠(1989— ),碩士生,主研視頻流媒體技術;
朱民耀(1965— ),高級工程師,碩士生導師,主研視音頻信號處理。
責任編輯:時 雯