本發(fā)明涉及時(shí)移電視并發(fā)技術(shù),尤其涉及一種提高直播時(shí)移電視并發(fā)能力的實(shí)現(xiàn)方法。
背景技術(shù):
隨著雙向IP直播時(shí)移電視的流行,其收視用戶量越來(lái)越大,提高單臺(tái)視頻推流服務(wù)器的并發(fā)能力的工作顯得格外重要。
在視頻推流服務(wù)器中,限制推流并發(fā)的瓶頸通常是網(wǎng)絡(luò)帶寬和磁盤(pán)I/O。當(dāng)前網(wǎng)絡(luò)設(shè)備通常會(huì)采用多個(gè)千兆網(wǎng)卡綁定,或是直接引入萬(wàn)兆網(wǎng)卡,網(wǎng)絡(luò)帶寬早已不再是瓶頸。而磁盤(pán)I/O設(shè)備的隨機(jī)讀寫(xiě)速度,通常會(huì)明顯低于網(wǎng)絡(luò)帶寬,從而成為限制視頻推流服務(wù)器并發(fā)能力的根本瓶頸。即使是使用昂貴的直通SSD硬盤(pán)陣列組成的存儲(chǔ),其讀取速度也難以超過(guò)萬(wàn)兆網(wǎng)卡的速度。更何況在直播時(shí)移電視推流服務(wù)器中,存儲(chǔ)還會(huì)時(shí)刻不斷地寫(xiě)入直播視頻切片文件(視頻流),推流服務(wù)器的存儲(chǔ)在不斷大量寫(xiě)入數(shù)據(jù)的同時(shí),還要進(jìn)行隨機(jī)讀取,其實(shí)際讀取能力大打折扣。因此,對(duì)于直播時(shí)移視頻服務(wù)器而言,改進(jìn)其存儲(chǔ)的隨機(jī)讀寫(xiě)速度或方式,才是提高推流服務(wù)器并發(fā)的有效途徑。
技術(shù)實(shí)現(xiàn)要素:
為提高雙向直播時(shí)移電視的并發(fā)能力,以及降低推流服務(wù)器的硬件成本,本發(fā)明提供了一種使用內(nèi)存分區(qū)系統(tǒng)進(jìn)行緩存熱點(diǎn)內(nèi)容,來(lái)降低硬盤(pán)讀寫(xiě)頻率,從而降低服務(wù)器對(duì)硬盤(pán)高性能的需求,并且?guī)?lái)服務(wù)器并發(fā)能力提高的方法。
降低磁盤(pán)讀取壓力的有效辦法就是盡可能地利用內(nèi)存來(lái)做緩存,本發(fā)明從此出發(fā)點(diǎn)著手,提出了一種提高直播時(shí)移電視并發(fā)能力的實(shí)現(xiàn)方法,通過(guò)一種簡(jiǎn)單易實(shí)現(xiàn)的方法,來(lái)完成視頻內(nèi)容在內(nèi)存上的緩存。
直播時(shí)移電視的視頻推流服務(wù)器,除了要考慮收視用戶在請(qǐng)求視頻內(nèi)容時(shí)的數(shù)據(jù)讀取壓力,還要考慮直播視頻源向推流服務(wù)器的實(shí)時(shí)寫(xiě)入壓力。假設(shè)直播流由100個(gè)頻道組成,平均每個(gè)頻道為5Mbps碼率(因可能會(huì)包含多種碼率的自適應(yīng)碼率,以及高清電視內(nèi)容,此處按較高的碼率情況來(lái)估算),將會(huì)對(duì)服務(wù)器存儲(chǔ)形成500Mbps,也就是62.5MB/s的寫(xiě)入壓力。如果是使用傳統(tǒng)的SATA存儲(chǔ),僅僅是文件寫(xiě)入就占用了巨大的開(kāi)銷(xiāo)。
對(duì)于上述100路頻道,每頻道5Mbps的例子,目前按中端配置的推流服務(wù)器16G內(nèi)存考慮,可以保存約4.3分鐘(16000MB÷62.5MB/s÷60秒/分鐘=8.5分鐘)的時(shí)移電視內(nèi)容。4.3分鐘的時(shí)移顯然不能滿足時(shí)移電視的普遍需求,現(xiàn)代時(shí)移電視通常要滿足30分鐘~4小時(shí)的時(shí)移需求。按照最大的4小時(shí)來(lái)計(jì)算,大約需要900GB的存儲(chǔ)來(lái)保存這些電視內(nèi)容(4小時(shí)×3600秒/小時(shí)×62.5MB/s=900000MB)。這些內(nèi)容可以使用讀寫(xiě)性能較高的SSD或SAS硬盤(pán)組成Raid來(lái)實(shí)現(xiàn)。也可以使用成本較低的SATA硬盤(pán)組成容量更大的存儲(chǔ)空間,以便保存更多的頻道、更久的時(shí)移內(nèi)容、或是更高的視頻碼率。
為了提高內(nèi)存存儲(chǔ)分區(qū)的利用率,還需要分析頻道節(jié)目的熱度,來(lái)動(dòng)態(tài)調(diào)整每個(gè)頻道在內(nèi)存分區(qū)中保留的時(shí)長(zhǎng)。例如,比較熱門(mén)的央視和衛(wèi)視頻道,應(yīng)該在內(nèi)存分區(qū)中保留更長(zhǎng)的時(shí)移電視時(shí)長(zhǎng),而冷門(mén)的頻道應(yīng)盡可能少的占用內(nèi)存空間,甚至冷門(mén)的頻道不需要在內(nèi)存中保留,而是直接保存到硬盤(pán)中。
對(duì)于內(nèi)容熱度的分配,可以通過(guò)收視統(tǒng)計(jì)系統(tǒng)提供的頻道熱門(mén)分析結(jié)果來(lái)做簡(jiǎn)單的預(yù)設(shè)調(diào)整。也可以在推流服務(wù)器中增加動(dòng)態(tài)分析調(diào)度程序,來(lái)決定各個(gè)視頻片段的熱門(mén)程度以及在內(nèi)存中保留的生命周期。
本發(fā)明的技術(shù)方案是:
一種提高直播時(shí)移電視并發(fā)能力的實(shí)現(xiàn)方法,
包括,內(nèi)存分區(qū)系統(tǒng)、文件同步軟件、文件過(guò)期管理和文件請(qǐng)求熱度分析;其中,
首先將內(nèi)存劃分為直播和短時(shí)時(shí)移內(nèi)存分區(qū),將存儲(chǔ)劃分為長(zhǎng)時(shí)時(shí)移硬盤(pán)分區(qū);
在完成內(nèi)存和硬盤(pán)的分區(qū)劃分后,直播時(shí)移視頻服務(wù)器將與直播中心服務(wù)器進(jìn)行對(duì)接,實(shí)時(shí)地從直播源服務(wù)器拉取或由直播源服務(wù)器推送直播內(nèi)容,并保存到直播用的內(nèi)存分區(qū)中;
這里使用文件同步軟件,將內(nèi)存分區(qū)的文件實(shí)時(shí)同步到硬盤(pán)分區(qū)中;而文件刪除可使用通過(guò)定時(shí)任務(wù)和腳本,當(dāng)磁盤(pán)容量超過(guò)特定閥值時(shí),將早期已過(guò)期的切片視頻文件批量刪除。
在內(nèi)存中緩存文件的過(guò)程是,視頻源文件首先存放到內(nèi)存中,然后從內(nèi)存中轉(zhuǎn)存到硬盤(pán)中,同時(shí)將內(nèi)存中熱門(mén)的片段長(zhǎng)時(shí)間保留,冷門(mén)的片段短時(shí)間保留。其過(guò)程會(huì)盡可能地減少硬盤(pán)讀取的次數(shù)和可能性。
在同步時(shí),只做增量同步,不做刪除同步。文件同步軟件包括Windows的SyncToy或FreeFileSync,以及Linux的Inotify+Rsync。
該方法會(huì)根據(jù)文件訪問(wèn)熱度,選擇性地將文件保留在內(nèi)存中作緩存;
被緩存到內(nèi)存里的視頻片段是基于時(shí)間倒序保存的;
在內(nèi)存中保留較多的熱門(mén)文件片段,同時(shí)會(huì)降低冷門(mén)文件片段在內(nèi)存中緩存的數(shù)量;
附圖說(shuō)明
圖1是直播推流服務(wù)器部署結(jié)構(gòu)和用戶播放請(qǐng)求整體示意圖。
具體實(shí)施方式
下面對(duì)本發(fā)明的內(nèi)容進(jìn)行更加詳細(xì)的闡述:
假設(shè)推流服務(wù)器的硬件配置為32GB內(nèi)存、1TB存儲(chǔ)(僅用于保存時(shí)移節(jié)目)、萬(wàn)兆網(wǎng)卡。首先將內(nèi)存中的16GB劃分為直播和短時(shí)時(shí)移內(nèi)存分區(qū),將存儲(chǔ)1TB劃分為長(zhǎng)時(shí)時(shí)移硬盤(pán)分區(qū)。常見(jiàn)的內(nèi)存分區(qū)軟件例如Windows的RamDisk,以及Linux的TmpFS均能創(chuàng)建內(nèi)存分區(qū)系統(tǒng)。
在完成內(nèi)存和硬盤(pán)的分區(qū)劃分后,直播時(shí)移視頻服務(wù)器將與直播中心服務(wù)器進(jìn)行對(duì)接,實(shí)時(shí)地從直播源服務(wù)器拉取(或由直播源服務(wù)器推送)直播內(nèi)容,并保存到直播用的內(nèi)存分區(qū)中。按照前文估算的5Mbps碼率計(jì)算,在100個(gè)直播頻道的情況下,推流服務(wù)器的內(nèi)存分區(qū)可以保存4.3分鐘的直播和時(shí)移內(nèi)容。對(duì)于超過(guò)4.3分鐘的時(shí)移內(nèi)容,則需要保存到硬盤(pán)分區(qū)中。
這里使用文件同步程序,將內(nèi)存分區(qū)的文件實(shí)時(shí)同步到硬盤(pán)分區(qū)中。在同步時(shí),應(yīng)注意只做增量同步,不做刪除同步。文件同步軟件例如Windows的SyncToy或FreeFileSync,以及Linux的Inotify+Rsync。而文件刪除可使用通過(guò)定時(shí)任務(wù)和腳本,當(dāng)磁盤(pán)容量超過(guò)一定閥值時(shí)(比如90%),將早期已過(guò)期的切片視頻文件批量刪除。
在直播時(shí)移視頻切片文件點(diǎn)播下載方面,建議使用Nginx作為HTTP服務(wù)器。使用Nginx分別發(fā)布內(nèi)存分區(qū)的直播/短時(shí)時(shí)移的視頻切片文件,和硬盤(pán)分區(qū)的長(zhǎng)時(shí)時(shí)移視頻切片文件,作為兩個(gè)HTTP服務(wù)。將所有用戶的直播和時(shí)移請(qǐng)求,全都默認(rèn)導(dǎo)向直播/短時(shí)時(shí)移的發(fā)布端口,如果用戶請(qǐng)求的是直播內(nèi)容,或是短時(shí)間內(nèi)的時(shí)移,服務(wù)器將直接從內(nèi)存分區(qū)中讀取文件,不占用磁盤(pán)I/O。當(dāng)用戶請(qǐng)求了時(shí)間較早的時(shí)移內(nèi)容時(shí),在內(nèi)存分區(qū)中無(wú)法找到早期的文件,因此會(huì)觸發(fā)404錯(cuò)誤條件,從而會(huì)將用戶的請(qǐng)求重定向到硬盤(pán)分區(qū)的時(shí)移內(nèi)容。以下是Nginx對(duì)直播和時(shí)移的具體配置方法示例。
簡(jiǎn)而言之,以前文的100頻道5Mbps碼率的內(nèi)容來(lái)說(shuō),對(duì)于用戶的直播和4.3分鐘以內(nèi)的時(shí)移請(qǐng)求,服務(wù)器在為用戶提供HTTP下載時(shí),不會(huì)影響磁盤(pán)I/O速度。僅當(dāng)用戶請(qǐng)求比4.3分鐘更早的內(nèi)容時(shí),才會(huì)從磁盤(pán)讀取文件。
在直播時(shí)移視頻切片文件分布方面,熱門(mén)的頻道及其視頻切片應(yīng)盡可能多地存放在內(nèi)容分區(qū)中,而冷門(mén)頻道及其切片不應(yīng)占用過(guò)多的內(nèi)存。根據(jù)頻道熱度動(dòng)態(tài)調(diào)整不同頻道在內(nèi)存分區(qū)的時(shí)移長(zhǎng)度,可以進(jìn)一步提高內(nèi)存分區(qū)的利用率,并降低磁盤(pán)讀取的壓力。