本發(fā)明涉及視頻轉(zhuǎn)碼技術(shù),尤其涉及一種轉(zhuǎn)碼器的動態(tài)調(diào)度方法及裝置。
背景技術(shù):
當今社會,隨著移動互聯(lián)網(wǎng)的快速發(fā)展,移動視頻業(yè)務(wù)所占比重不斷增大,視頻已成為人們傳遞和分享信息的流行方式。同時隨著手機、平板電腦等終端技術(shù)的進步,移動互聯(lián)網(wǎng)能夠隨時隨地為人們提供方便快捷的服務(wù)??墒请S著通信技術(shù)的發(fā)展以及接入設(shè)備的多樣性,極大地增加了移動流媒體視頻應(yīng)用的復(fù)雜性和異構(gòu)性,例如屏幕尺寸的大小、碼率的降低、幀率的調(diào)整等等,都會導(dǎo)致已壓縮碼流的受限條件變化。相對于其它應(yīng)用環(huán)境,為某一應(yīng)用環(huán)境提供的優(yōu)化壓縮碼流不一定是其它應(yīng)用環(huán)境的最優(yōu)壓縮碼流。為屏蔽終端設(shè)備、通信網(wǎng)絡(luò)、視頻編碼標準的異構(gòu)性,為了提供給用戶一致的流媒體視頻存取接口,視頻轉(zhuǎn)碼技術(shù)應(yīng)運而生。
轉(zhuǎn)碼器可以將輸入視頻壓縮碼流從一種格式轉(zhuǎn)換為另一種格式。由于單獨的轉(zhuǎn)碼器的資源和性能有限,隨著視頻轉(zhuǎn)碼需求的增大,使得單一轉(zhuǎn)碼器設(shè)備根本無法承擔壓力,需要多個轉(zhuǎn)碼器才能滿足海量用戶的并發(fā)視頻轉(zhuǎn)碼請求,轉(zhuǎn)碼器集群系統(tǒng)對外提供統(tǒng)一的轉(zhuǎn)碼服務(wù)。轉(zhuǎn)碼器集群系統(tǒng)工作狀況好壞的關(guān)鍵在于能否將大量的并發(fā)轉(zhuǎn)碼請求合理地分配到集群中各個轉(zhuǎn)碼器上進行處理,實現(xiàn)轉(zhuǎn)碼資源的有效調(diào)度。請求的分配過程就是負載均衡。
圖1-1為相關(guān)技術(shù)中的網(wǎng)絡(luò)架構(gòu)示意圖,在圖1-1所示的網(wǎng)絡(luò)架構(gòu)中能夠做到負載均衡,流程包括:來自于客戶算設(shè)備的用戶的請求通過通信網(wǎng)絡(luò)不直接發(fā)給后端的服務(wù)器節(jié)點,而是通過負載均衡器經(jīng)過路由或交換機分發(fā)給后端的服務(wù)器節(jié)點,在分發(fā)的過程中負載均衡器根據(jù)調(diào)度算法將用戶的請求分發(fā)給 后端的服務(wù)器節(jié)點,后端的服務(wù)器節(jié)點處理用戶的請求,并把結(jié)果數(shù)據(jù)直接返回給用戶;或者,后端的服務(wù)器節(jié)點也可以先將結(jié)果數(shù)據(jù)返回給負載均衡器,通過負載均衡器再返回給用戶(客戶端設(shè)備);其中,后端的每一服務(wù)器節(jié)點都可以看做是一個轉(zhuǎn)碼器,后端的服務(wù)器節(jié)點將結(jié)果數(shù)據(jù)直接返回給用戶的方式稱為one-way單向負載均衡,后端的服務(wù)器節(jié)點將結(jié)果數(shù)據(jù)返回給負載均衡器,通過負載均衡器再返回給用戶的方式稱為two-way雙向負載均衡。從圖1-1可以看出,負載均衡技術(shù)能夠增加系統(tǒng)的處理能力和支持高并發(fā)訪問,以降低用戶的等待響應(yīng)時間,從而使請求處理更加并行化,進而提高服務(wù)質(zhì)量。負載均衡提供了一種廉價有效透明的方法擴展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。但是,已有的動態(tài)調(diào)度方案不能動態(tài)加減后端的服務(wù)器節(jié)點,比如說某個服務(wù)器節(jié)點出現(xiàn)故障需要從后端的服務(wù)器節(jié)點中刪除或者因請求的增加需要增添后端的服務(wù)器節(jié)點等;后端的服務(wù)器節(jié)點運行狀態(tài)信息的收集功能收集的負載信息固定;當前端均衡器接收后端的服務(wù)器節(jié)點的運行狀態(tài)數(shù)據(jù)以及負載均衡策略后,一般都需要重啟負載均衡器。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例為解決現(xiàn)有技術(shù)中存在的至少一個問題而提供一種轉(zhuǎn)碼器的動態(tài)調(diào)度方法及裝置,能夠動態(tài)加減后端的轉(zhuǎn)碼器節(jié)點,而無需對管理所述轉(zhuǎn)碼器節(jié)點的進行重啟。
本發(fā)明實施例的技術(shù)方案是這樣實現(xiàn)的:
第一方面,本發(fā)明實施例提供一種轉(zhuǎn)碼器的動態(tài)調(diào)度方法,所述方法包括:
獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;
判斷每一所述轉(zhuǎn)碼器的負載信息是否滿足預(yù)設(shè)的第一條件,得到判斷結(jié)果;
當所述判斷結(jié)果表明所有的轉(zhuǎn)碼器的負載信息均不滿足所述第一條件時,加載新的轉(zhuǎn)碼器至所述轉(zhuǎn)碼器集群中;
接收用戶的轉(zhuǎn)碼請求;
將對所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給所述新的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
第二方面,本發(fā)明實施例提供一種轉(zhuǎn)碼器的動態(tài)調(diào)度裝置,所述裝置包括獲取單元、判斷單元、加載單元、接收單元和分發(fā)單元,其中:
所述獲取單元,用于獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;
所述判斷單元,用于判斷每一所述轉(zhuǎn)碼器的負載信息是否滿足預(yù)設(shè)的第一條件,得到判斷結(jié)果;
所述加載單元,用于當所述判斷結(jié)果表明所有的轉(zhuǎn)碼器的負載信息均不滿足所述第一條件時,加載新的轉(zhuǎn)碼器至所述轉(zhuǎn)碼器集群中;
所述接收單元,用于接收用戶的轉(zhuǎn)碼請求;
所述轉(zhuǎn)碼單元,用于將對所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給所述新的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
本發(fā)明實施例提供的轉(zhuǎn)碼器的動態(tài)調(diào)度方法及裝置,其中,獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;判斷每一所述轉(zhuǎn)碼器的負載信息是否滿足預(yù)設(shè)的第一條件,得到判斷結(jié)果;當所述判斷結(jié)果表明所有的轉(zhuǎn)碼器的負載信息均不滿足所述第一條件時,加載新的轉(zhuǎn)碼器至所述轉(zhuǎn)碼器集群中;接收用戶的轉(zhuǎn)碼請求;將對所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給所述新的轉(zhuǎn)碼器進行轉(zhuǎn)碼,如此,動態(tài)加減后端的轉(zhuǎn)碼器節(jié)點,而無需對管理所述轉(zhuǎn)碼器節(jié)點的進行重啟。
附圖說明
圖1-1為相關(guān)技術(shù)中的網(wǎng)絡(luò)架構(gòu)示意圖;
圖1-2為Nginx web服務(wù)器工作時的流程示意圖;
圖1-3為本發(fā)明實施例一轉(zhuǎn)碼器的動態(tài)調(diào)度方法的實現(xiàn)流程示意圖;
圖2為本發(fā)明實施例二轉(zhuǎn)碼器的動態(tài)調(diào)度方法的實現(xiàn)流程示意圖;
圖3-1為本發(fā)明實施例三轉(zhuǎn)碼器動態(tài)調(diào)度裝置的組成結(jié)構(gòu)示意圖;
圖3-2為本發(fā)明實施例三轉(zhuǎn)碼器的動態(tài)調(diào)度方法的實現(xiàn)流程示意圖;
圖4為本發(fā)明實施例四轉(zhuǎn)碼器的動態(tài)調(diào)度裝置的組成結(jié)構(gòu)示意圖;
圖5為本發(fā)明實施例五轉(zhuǎn)碼器的動態(tài)調(diào)度裝置的組成結(jié)構(gòu)示意圖。
具體實施方式
為了解決背景技術(shù)中存在的問題,先來介紹一下相關(guān)的動態(tài)調(diào)度方案,常用的基于軟件的動態(tài)調(diào)度方案中通常采用Nginx web服務(wù)器來實現(xiàn)。Nginx web服務(wù)器是高性能的HTTP和反向代理服務(wù)器,Nginx web服務(wù)器可移植到各種操作系統(tǒng)和體系結(jié)構(gòu),有跨平臺特性,它功能完善、占用內(nèi)存低、性能高,同時Nginx web服務(wù)器還提供了IMAP/POP3/SMTP代理的功能,穩(wěn)定性、性能和擴展性高,因此Nginx web服務(wù)器都受到了廣泛地應(yīng)用。
圖1-2為Nginx web服務(wù)器工作時的流程示意圖,如圖1-2所示,Nginx web服務(wù)器的模塊根據(jù)其功能的不同可以劃分為以下幾種類型:1)事件模塊,采用事件處理機制,用于根據(jù)運行配置腳本時根據(jù)當前的操作系統(tǒng)和編譯選項進行選擇。2)階段處理模塊,主要用來產(chǎn)生用戶請求的內(nèi)容如處理Nginx中html文件夾中的靜態(tài)文件。3)輸出過濾(Output filter)模塊,經(jīng)過階段處理模塊處理后最后會把數(shù)據(jù)傳遞給filter模塊處理,如對數(shù)據(jù)進行g(shù)zip壓縮,對html頁面增加footbar等。4)上升流(upstream)模塊,是階段處理模塊的特殊情況,實現(xiàn)反向代理的功能,將真正的請求轉(zhuǎn)發(fā)到后端的服務(wù)器節(jié)點上,并從后端的服務(wù)器節(jié)點上讀取響應(yīng)發(fā)回客戶端設(shè)備。5)負載均衡模塊:后端的服務(wù)器節(jié)點選擇模塊,從配置后端服務(wù)器集群中選取服務(wù)器將請求內(nèi)容進行轉(zhuǎn)發(fā)。
上述的動態(tài)調(diào)度方案不能動態(tài)加減后端的服務(wù)器節(jié)點,比如說某個服務(wù)器節(jié)點出現(xiàn)故障需要從后端的服務(wù)器節(jié)點中刪除或者因請求的增加需要增添后端的服務(wù)器節(jié)點等;后端的服務(wù)器節(jié)點運行狀態(tài)信息的收集功能收集的負載信息固定;當前端均衡器接收后端的服務(wù)器節(jié)點的運行狀態(tài)數(shù)據(jù)以及負載均衡策略后,一般都需要重啟負載均衡器。
在本發(fā)明以下的實施例中,將提供一種基于多參數(shù)輸入的轉(zhuǎn)碼器調(diào)度方法和系統(tǒng),其目的在于克服現(xiàn)有動態(tài)調(diào)度方案的不足,通過統(tǒng)計判斷轉(zhuǎn)碼器實際負載情況,自動加載轉(zhuǎn)碼器,不用重啟負載均衡服務(wù)器,同時針對轉(zhuǎn)碼請求可選擇調(diào)度負載最輕的轉(zhuǎn)碼器,這樣使調(diào)度方案更加智能。
下面結(jié)合附圖和具體實施例對本發(fā)明的技術(shù)方案進一步詳細闡述。
實施例一
本發(fā)明實施例提供一種轉(zhuǎn)碼器的動態(tài)調(diào)度方法,該方法用于計算設(shè)備中,方法所實現(xiàn)的功能可以通過計算設(shè)備中的處理器調(diào)用程序代碼來實現(xiàn),當然程序代碼可以保存在計算機存儲介質(zhì)中,可見,該計算設(shè)備至少包括處理器和存儲介質(zhì)。
圖1-3為本發(fā)明實施例一轉(zhuǎn)碼器的動態(tài)調(diào)度方法的實現(xiàn)流程示意圖,如圖1-3所示,該方法包括:
步驟S101,獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;
這里,所述負載信息包括中央處理器(CPU)利用率、內(nèi)存利用率、網(wǎng)絡(luò)輸入/輸出(I/O)使用情況、圖形處理器(GPU)利用率和系統(tǒng)進程處理情況等參數(shù)。
這里,作為一種優(yōu)選的技術(shù)方案,所述步驟S101,所述獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息,包括:監(jiān)控轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;將每一所述轉(zhuǎn)碼器的負載信息存儲于共享數(shù)據(jù)庫中;從所述共享數(shù)據(jù)庫中獲取所述轉(zhuǎn)碼器的負載信息。
步驟S102,判斷每一所述轉(zhuǎn)碼器的負載信息是否滿足預(yù)設(shè)的第一條件,得到判斷結(jié)果;
這里,所述第一條件是關(guān)于負載信息中各參數(shù)的而設(shè)置的,在具體實施的過程中,所述第一條件可以是關(guān)于一個參數(shù)的條件,也可以是關(guān)于兩個及其以上的參數(shù)的組合條件,例如,第一條件可以為CPU利用率小于60%,內(nèi)存利用率小于50%。
步驟S103,當所述判斷結(jié)果表明所有的轉(zhuǎn)碼器的負載信息均不滿足所述第一條件時,加載新的轉(zhuǎn)碼器至所述轉(zhuǎn)碼器集群中;
這里,在加載的過程中,還需要對新的轉(zhuǎn)碼器進行配置,例如配置IP地址等參數(shù)。
步驟S104,接收用戶的轉(zhuǎn)碼請求;
這里,所述轉(zhuǎn)碼請求來自于客戶端設(shè)備,用于對視頻轉(zhuǎn)碼的請求,在具體實施的過程中,所述轉(zhuǎn)碼請求可以包括客戶端設(shè)備的標識信息,以及待轉(zhuǎn)碼的視頻的屬性信息,所述屬性信息包括地址或標識信息等參數(shù)。
步驟S105,將對所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給所述新的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
這里,可以根據(jù)待轉(zhuǎn)碼視頻的屬性信息獲取所述待轉(zhuǎn)碼視頻(待轉(zhuǎn)碼視頻即為轉(zhuǎn)碼請求所對應(yīng)的視頻),然后將待轉(zhuǎn)碼視頻分發(fā)給所述新的轉(zhuǎn)碼器。
本發(fā)明實施例中,所述方法還包括:步驟S106,當所述判斷結(jié)果表明至少之一轉(zhuǎn)碼器的負載信息滿足所述第一條件時,對滿足第一條件的轉(zhuǎn)碼器的負載信息進行排序,得到排序結(jié)果;
對應(yīng)地,所述步驟S105為,按照所述排序結(jié)果將所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給負載最小的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
本發(fā)明實施例中,獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;判斷每一所述轉(zhuǎn)碼器的負載信息是否滿足預(yù)設(shè)的第一條件,得到判斷結(jié)果;當所述判斷結(jié)果表明所有的轉(zhuǎn)碼器的負載信息均不滿足所述第一條件時,加載新的轉(zhuǎn)碼器至所述轉(zhuǎn)碼器集群中;接收用戶的轉(zhuǎn)碼請求;將對所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給所述新的轉(zhuǎn)碼器進行轉(zhuǎn)碼,如此,動態(tài)加減后端的轉(zhuǎn)碼器節(jié)點,而無需對管理所述轉(zhuǎn)碼器節(jié)點的進行重啟。
實施例二
本發(fā)明實施例提供一種轉(zhuǎn)碼器的動態(tài)調(diào)度方法,該方法用于計算設(shè)備中,方法所實現(xiàn)的功能可以通過計算設(shè)備中的處理器調(diào)用程序代碼來實現(xiàn),當然程序代碼可以保存在計算機存儲介質(zhì)中,可見,該計算設(shè)備至少包括處理器和存儲介質(zhì)。
圖2為本發(fā)明實施例二轉(zhuǎn)碼器的動態(tài)調(diào)度方法的實現(xiàn)流程示意圖,如圖2所示,該方法包括:
步驟S201,獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;
這里,所述負載信息包括中央處理器(CPU)利用率、內(nèi)存利用率、網(wǎng)絡(luò)輸入/輸出(I/O)使用情況、圖形處理器(GPU)利用率和系統(tǒng)進程處理情況等參數(shù)。
這里,作為一種優(yōu)選的技術(shù)方案,所述步驟S201,所述獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息,包括:監(jiān)控轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;將每一所述轉(zhuǎn)碼器的負載信息存儲于共享數(shù)據(jù)庫中;從所述共享數(shù)據(jù)庫中獲取所述轉(zhuǎn)碼器的負載信息。
步驟S202,根據(jù)確定每一轉(zhuǎn)碼器的綜合負載值;
其中,loadm表示第m個轉(zhuǎn)碼器的綜合負載值,Lij表示第i個轉(zhuǎn)碼器的第j個負載信息,評估算法函數(shù)F包括選線性加權(quán)函數(shù)模型或遺傳算法和神經(jīng)網(wǎng)絡(luò)算法;
步驟S203,判斷所述轉(zhuǎn)碼器集群中轉(zhuǎn)碼器的綜合負載值是否滿足預(yù)設(shè)的第二條件,得到判斷結(jié)果;
這里,所述第二條件是關(guān)于綜合負載值的而設(shè)置的條件,具體地,可以設(shè)置一個閾值,所述第二條件為綜合負載值小于設(shè)置的閾值。
步驟S204,當所述判斷結(jié)果表明所有所述轉(zhuǎn)碼器集群中轉(zhuǎn)碼器的綜合負載值均不滿足所述第二條件時,加載新的轉(zhuǎn)碼器至所述轉(zhuǎn)碼器集群中;
這里,在加載的過程中,還需要對新的轉(zhuǎn)碼器進行配置,例如配置IP地址等參數(shù)。
步驟S205,接收用戶的轉(zhuǎn)碼請求;
這里,所述轉(zhuǎn)碼請求來自于客戶端設(shè)備,用于對視頻轉(zhuǎn)碼的請求,在具體實施的過程中,所述轉(zhuǎn)碼請求可以包括客戶端設(shè)備的標識信息,以及待轉(zhuǎn)碼的視頻的屬性信息,所述屬性信息包括地址或標識信息等參數(shù)。
步驟S206,將對所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給所述新的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
本發(fā)明實施例中,當采用QSV轉(zhuǎn)碼時,所述步驟S202,確定每一轉(zhuǎn)碼器的綜合負載值,包括:
根據(jù)loadi=R1*CPUusage+R2*MEMusage+R3*GPUusage每一轉(zhuǎn)碼器的綜合負載值;
其中,CPUusage是CPU利用率,MEMusage表示內(nèi)存利用率,GPUusage表示GPU利用率,R1、R2和R2表示負載參數(shù)的權(quán)重值。
這里,所述R1、R2和R2根據(jù)轉(zhuǎn)碼的類型而確定,其中所述轉(zhuǎn)碼的類型包括軟轉(zhuǎn)碼和硬轉(zhuǎn)碼。
本發(fā)明實施例中,所述方法還包括:步驟S207,當所述判斷結(jié)果表明至少之一轉(zhuǎn)碼器的綜合負載值滿足所述第二條件時,對滿足第二條件的轉(zhuǎn)碼器的綜合負載值進行排序,得到排序結(jié)果;
對應(yīng)地,步驟S206為,按照所述排序結(jié)果將所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給負載最小的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
本發(fā)明實施例中,所述負載信息還包括宕機信息,所述方法還包括:
當所述轉(zhuǎn)碼器的負載信息表明所述轉(zhuǎn)碼器宕機時,將宕機的轉(zhuǎn)碼器從所述轉(zhuǎn)碼器集群中刪除。
實施例三
本發(fā)明實施例提供了一種轉(zhuǎn)碼器的動態(tài)調(diào)度方法,其目的在于克服現(xiàn)有動態(tài)調(diào)度方案的不足。圖3-1為本發(fā)明實施例三轉(zhuǎn)碼器的動態(tài)調(diào)度裝置的組成結(jié)構(gòu)示意圖,如圖3-1所示,該裝置包括負載均衡器調(diào)度模塊、綜合管理模塊、資源監(jiān)控模塊、負載提交模塊和共享數(shù)據(jù)庫等,其中在:
綜合管理模塊,如果后端服務(wù)器(即后端的服務(wù)器節(jié)點)出現(xiàn)宕機,可以及時從后端轉(zhuǎn)碼器中剔除,使其不再接受用戶的請求。當負載提交模塊,提交的負載值超過共享數(shù)據(jù)中設(shè)定的負載閾值,綜合管理模塊根據(jù)負載閾值的判斷, 可以根據(jù)需要增加后端轉(zhuǎn)碼器,而且無需重啟負載均衡器。
調(diào)度策略模塊,可以是現(xiàn)有的負載均衡策略,例如輪詢、加權(quán)輪詢和IP哈希等,也可以是新開發(fā)的負載均衡策略(第三方模塊),比如每當有用戶轉(zhuǎn)碼請求時,從后端轉(zhuǎn)碼器中選擇負載最輕的轉(zhuǎn)碼器轉(zhuǎn)發(fā)請求等。
資源監(jiān)控模塊,不依賴于負載均衡器,在轉(zhuǎn)碼器端周期性抓取此節(jié)點當前的負載信息,如CPU利用率、內(nèi)存利用率等,并將當前負載信息保存到共享數(shù)據(jù)庫。
共享數(shù)據(jù)庫,保存后端轉(zhuǎn)碼器的負載信息。
負載提交模塊,根據(jù)轉(zhuǎn)碼方案的不同,周期性的從共享數(shù)據(jù)庫獲取相應(yīng)負載信息,處理并評估此方案下轉(zhuǎn)碼器當前的綜合負載;并將評估結(jié)果發(fā)送給綜合管理模塊。轉(zhuǎn)碼器綜合負載評估模型如式3-1所示:
loadm表示第m個轉(zhuǎn)碼器的綜合負載值,Lij表示第i個轉(zhuǎn)碼器的第j個負載信息。評估算法函數(shù)F可選線性加權(quán)函數(shù)模型,或遺傳算法和神經(jīng)網(wǎng)絡(luò)算法等??舍槍Σ煌D(zhuǎn)碼方案環(huán)境下的負載預(yù)測模型。
在圖3-1所示的裝置中,由資源監(jiān)控模塊統(tǒng)計轉(zhuǎn)碼器負載情況,同步到共享數(shù)據(jù)庫,通過負載提交模塊和綜合管理模塊統(tǒng)計判斷負載情況,自動加載轉(zhuǎn)碼器,不用重啟負載均衡服務(wù)器,針對轉(zhuǎn)碼請求,調(diào)度模塊可選擇調(diào)度負載最輕的轉(zhuǎn)碼器,使調(diào)度方案更加智能。
基于圖3-1所示的裝置,下面將提供一種轉(zhuǎn)碼器動態(tài)調(diào)度方法,在此實施例中,轉(zhuǎn)碼方案采用QSV技術(shù),負載均衡器采用Nginx web服務(wù)器。轉(zhuǎn)碼器調(diào)度方案中的綜合管理模塊和調(diào)度策略模塊都是基于Nginx模塊化開發(fā)技術(shù)基礎(chǔ)開發(fā)的第三方模塊,Nginx web服務(wù)器中的負載均衡策略是從后端轉(zhuǎn)碼器中選擇負載最輕的轉(zhuǎn)碼器轉(zhuǎn)發(fā)客戶端的轉(zhuǎn)碼請求,資源監(jiān)控模塊和負載提交模塊可以采用PHP腳本語言。
圖3-2為本發(fā)明實施例三轉(zhuǎn)碼器的動態(tài)調(diào)度方法的實現(xiàn)流程示意圖,如圖3-2所示,該方法包括:
步驟S301,資源監(jiān)控模塊實時監(jiān)控負載信息;
這里,資源監(jiān)控模塊實時監(jiān)控轉(zhuǎn)碼器資源利用情況,收集轉(zhuǎn)碼器節(jié)點的所有負載信息,如中央處理器(CPU)利用率、內(nèi)存利用率、網(wǎng)絡(luò)輸入/輸出(I/O)使用情況、圖形處理器(GPU)利用率和系統(tǒng)進程處理情況等等。將所有負載信息保存在共享數(shù)據(jù)庫中,并周期性進行數(shù)據(jù)的更新。
步驟S302,負載提交模塊統(tǒng)計轉(zhuǎn)碼器負載情況;
這里,負載提交模塊根據(jù)所選QSV轉(zhuǎn)碼方案有選擇性的從共享數(shù)據(jù)庫中提取出所需負載信息,利用式3-2所示的線性加權(quán)函數(shù)模型評估得到每個轉(zhuǎn)碼器的綜合負載,并進行3s一次的數(shù)據(jù)更新與上報。
loadi=R1*CPUusage+R2*MEMusage+R3*GPUusage (3-2);
在式3-2中,CPUusage是CPU利用率,MEMusage表示內(nèi)存利用率,GPUusage表示GPU利用率,Ri(包括R1、R2、R2)表示負載參數(shù)的權(quán)重值,是一組可以動態(tài)調(diào)整的系數(shù),對服務(wù)節(jié)點綜合負載影響較大的負載參數(shù),就可以將其系數(shù)R設(shè)置的高一些。為了設(shè)定R1值,在內(nèi)存、GPU充足(即用戶的增加不對內(nèi)存和GPU的利用率產(chǎn)生波動),控制單一變量,單獨考慮CPU利用率和接入用戶增加的波動關(guān)系,確定R1值;同樣的方法,確定R2,R3值,從而確定對服務(wù)節(jié)點綜合負載影響。
下面介紹如何定量地求解。使用軟轉(zhuǎn)碼,主要依靠CPU占用作為負載狀況的比較依據(jù);使用基于QSV的硬件加速轉(zhuǎn)碼,主要依靠GPU的使用情況作為負載狀況的比較依據(jù)。
1)對于軟轉(zhuǎn)碼:對同一個轉(zhuǎn)碼實例,開啟不同的CPU核心數(shù),觀測不同核心數(shù)的轉(zhuǎn)碼速度(FPS)。因此,我們可以得到一組實驗數(shù)據(jù)(ci,fi),其中ci表示不同實驗下的核心數(shù)(在不限制轉(zhuǎn)碼幀率的情況下,使用軟轉(zhuǎn)碼CPU一般都滿載,因此核心數(shù)可以等價為CPU占用數(shù)),fi表示轉(zhuǎn)碼速度。用一次函數(shù)進 行擬合,得到F=kc×C+b。我們令R1=kc即可求得R1。同樣地,我們對內(nèi)存使用相同的方法(橫坐標為占用)得到R2,因為不使用GPU,R3置零即可。
2)對于硬轉(zhuǎn)碼:對同一個轉(zhuǎn)碼實例,使用硬件進行壓力測試,得到最大的轉(zhuǎn)碼速度fmax。近似認為GPU此時的占用為100%,用過零點的一次函數(shù)進行擬合,得到F=kg×G(因為硬件內(nèi)部的占用我們是沒法從外界知道)。因為硬轉(zhuǎn)碼基本不占用CPU,因此將R1置零即可。R2使用1)中的方法可以得到。
步驟S303,綜合管理模塊判斷是否增加轉(zhuǎn)碼器;
這里,綜合管理模塊接收來自轉(zhuǎn)碼器負載提交模塊的數(shù)據(jù)后,對Nginx web服務(wù)器進行后端轉(zhuǎn)碼器的設(shè)置,包括轉(zhuǎn)碼器IP地址以及該轉(zhuǎn)碼器的綜合負載值,同時還有所選用的調(diào)度策略,Nginx web服務(wù)器不需要重啟。
綜合管理模塊對負載提交模塊提交的負載值進行三種情況的分類處理:
(1)當負載提交模塊,所有提交的負載值沒有都超過(只要其中一個轉(zhuǎn)碼器沒有超過)共享數(shù)據(jù)中設(shè)定的負載閾值,進行步驟S304。
(2)當轉(zhuǎn)碼器負載提交模塊,所有提交的負載值都超過共享數(shù)據(jù)中設(shè)定的負載閾值(所有轉(zhuǎn)碼器都超過),綜合管理模塊根據(jù)負載閾值的判斷,可以根據(jù)需要增加后端轉(zhuǎn)碼器,并在下一個上報周期進行數(shù)據(jù)的上報。共享數(shù)據(jù)庫中添加相應(yīng)的上報信息,重新進行步驟S303。
(3)當負載提交模塊超過1個上報周期(即3s,該時間間隔根據(jù)轉(zhuǎn)碼程序的啟動時間而設(shè)定,從轉(zhuǎn)碼器開始啟動到程序穩(wěn)定運行約需要3s時間),沒有進行數(shù)據(jù)的上報,綜合管理模塊將對應(yīng)轉(zhuǎn)碼器提出,共享數(shù)據(jù)庫中移除相應(yīng)的上報信息。同時增加一個后端轉(zhuǎn)碼器,并在下一個上報周期進行數(shù)據(jù)的上報。共享數(shù)據(jù)庫中添加相應(yīng)的上報信息。重新進行步驟S303。
轉(zhuǎn)碼器設(shè)置數(shù)據(jù)舉例如下:“負載均衡策略;server 10.15.10.78:81weight=4;server 10.15.10.248:81weight=2;”127.0.0.1:81/upstream/transcoder;
步驟S304,調(diào)度策略選擇;
調(diào)度策略模塊根據(jù)所提交的信息,提取出所選用的調(diào)度策略,對Nginx web 服務(wù)器負載均衡策略進行設(shè)置,Nginx web服務(wù)器不需要重啟。
步驟S305,調(diào)度選擇負載最輕的轉(zhuǎn)碼器;
當有客戶端轉(zhuǎn)碼請求時,Nginx web服務(wù)器選擇后端轉(zhuǎn)碼器中負載最輕的轉(zhuǎn)碼器轉(zhuǎn)發(fā)轉(zhuǎn)碼請求。
本發(fā)明實施例實際上提供了一種多參數(shù)輸入的轉(zhuǎn)碼器調(diào)度過程。整個調(diào)度流程模塊由綜合管理模塊、負載均衡器調(diào)度模塊、資源監(jiān)控模塊、負載提交模塊和共享數(shù)據(jù)庫組成,具體地,后端轉(zhuǎn)碼器的一些負載參數(shù)會先上報至共享數(shù)據(jù)庫,后端轉(zhuǎn)碼器綜合負載評估與提交模塊根據(jù)轉(zhuǎn)碼方案的不同,有選擇的從共享數(shù)據(jù)庫提取負載參數(shù),擬合成一個綜合負載值,發(fā)送給綜合管理模塊,這樣選取負載參數(shù)的方法更能實時準確反映后端轉(zhuǎn)碼器負載狀況。在本發(fā)明實施例中能夠動態(tài)增減后端轉(zhuǎn)碼器,無需重啟Nginx web服務(wù)器,如果后端轉(zhuǎn)碼器出現(xiàn)宕機,可以及時從后端轉(zhuǎn)碼器中剔除,使其不再接受請求。如果請求增加,可以根據(jù)需要增加后端轉(zhuǎn)碼器,而且無需重啟Nginx web服務(wù)器。本發(fā)明實施例中還可以根據(jù)轉(zhuǎn)碼實際負載情況調(diào)度時選擇最輕的轉(zhuǎn)碼器,即根據(jù)轉(zhuǎn)碼方案,靈活選取負載參數(shù)作為后端轉(zhuǎn)碼器負載依據(jù)。
實施例四
基于前述的實施例,本發(fā)明實施例提供一種轉(zhuǎn)碼器的動態(tài)調(diào)度裝置,該裝置所包括的各單元,以及各單元所包括的各模塊,都可以通過計算設(shè)備中的處理器來實現(xiàn),當然,處理器所實現(xiàn)的功能也可通過具體的邏輯電路實現(xiàn);在具體實現(xiàn)的過程中,在具體實施例的過程中,處理器可以為中央處理器(CPU)、微處理器(MPU)、數(shù)字信號處理器(DSP)或現(xiàn)場可編程門陣列(FPGA)等。需要說明是,在具體實現(xiàn)的過程,所述計算設(shè)備可以為個人計算機、集成的服務(wù)器或筆記本電腦等具有計算功能的電子設(shè)備。
圖4為本發(fā)明實施例四轉(zhuǎn)碼器的動態(tài)調(diào)度裝置的組成結(jié)構(gòu)示意圖,如圖4所示,該裝置400包括獲取單元401、判斷單元402、加載單元403、接收單元404和分發(fā)單元405,其中:
所述獲取單元401,用于獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;
這里,所述獲取單元包括監(jiān)控模塊、存儲模塊和獲取模塊,其中:所述監(jiān)控模塊,用于監(jiān)控轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;所述存儲模塊,用于將每一所述轉(zhuǎn)碼器的負載信息存儲于共享數(shù)據(jù)庫中;所述獲取模塊,用于從所述共享數(shù)據(jù)庫中獲取所述轉(zhuǎn)碼器的負載信息。
所述判斷單元402,用于判斷每一所述轉(zhuǎn)碼器的負載信息是否滿足預(yù)設(shè)的第一條件,得到判斷結(jié)果;
所述加載單元403,用于當所述判斷結(jié)果表明所有的轉(zhuǎn)碼器的負載信息均不滿足所述第一條件時,加載新的轉(zhuǎn)碼器至所述轉(zhuǎn)碼器集群中;
所述接收單元404,用于接收用戶的轉(zhuǎn)碼請求;
所述轉(zhuǎn)碼單元405,用于將對所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給所述新的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
本發(fā)明實施例中,所述裝置還包括排序單元,用于當所述判斷結(jié)果表明至少之一轉(zhuǎn)碼器的負載信息滿足所述第一條件時,對滿足第一條件的轉(zhuǎn)碼器的負載信息進行排序,得到排序結(jié)果;
對應(yīng)地,所述分發(fā)單元,用于按照所述排序結(jié)果將所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給負載最小的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
本發(fā)明實施例中,所述負載信息還包括宕機信息,所述裝置還包括刪除單元,用于當所述轉(zhuǎn)碼器的負載信息表明所述轉(zhuǎn)碼器宕機時,將宕機的轉(zhuǎn)碼器從所述轉(zhuǎn)碼器集群中刪除。
這里需要指出的是:以上裝置實施例的描述,與上述方法實施例的描述是類似的,具有同方法實施例相似的有益效果,因此不做贅述。對于本發(fā)明裝置實施例中未披露的技術(shù)細節(jié),請參照本發(fā)明方法實施例的描述而理解,為節(jié)約篇幅,因此不再贅述。
實施例五
基于前述的實施例,本發(fā)明實施例提供一種轉(zhuǎn)碼器的動態(tài)調(diào)度裝置,該裝 置所包括的各單元,以及各單元所包括的各模塊,都可以通過計算設(shè)備中的處理器來實現(xiàn),當然,處理器所實現(xiàn)的功能也可通過具體的邏輯電路實現(xiàn);在具體實現(xiàn)的過程中,在具體實施例的過程中,處理器可以為中央處理器(CPU)、微處理器(MPU)、數(shù)字信號處理器(DSP)或現(xiàn)場可編程門陣列(FPGA)等。
圖5為本發(fā)明實施例五轉(zhuǎn)碼器的動態(tài)調(diào)度裝置的組成結(jié)構(gòu)示意圖,如圖5所示,該裝置400包括獲取單元401、確定單元500、判斷單元402、加載單元403、接收單元404和分發(fā)單元405,其中:
所述獲取單元401,用于獲取轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;
這里,所述獲取單元包括監(jiān)控模塊、存儲模塊和獲取模塊,其中:所述監(jiān)控模塊,用于監(jiān)控轉(zhuǎn)碼器集群中各轉(zhuǎn)碼器的負載信息;所述存儲模塊,用于將每一所述轉(zhuǎn)碼器的負載信息存儲于共享數(shù)據(jù)庫中;所述獲取模塊,用于從所述共享數(shù)據(jù)庫中獲取所述轉(zhuǎn)碼器的負載信息。
所述確定單元500,用于根據(jù)確定每一轉(zhuǎn)碼器的綜合負載值;
其中,loadm表示第m個轉(zhuǎn)碼器的綜合負載值,Lij表示第i個轉(zhuǎn)碼器的第j個負載信息,評估算法函數(shù)F包括選線性加權(quán)函數(shù)模型或遺傳算法和神經(jīng)網(wǎng)絡(luò)算法;
所述判斷單元402,用于判斷所述轉(zhuǎn)碼器集群中轉(zhuǎn)碼器的綜合負載值是否滿足預(yù)設(shè)的第二條件,得到判斷結(jié)果;
所述加載單元403,用于當所述判斷結(jié)果表明所有所述轉(zhuǎn)碼器集群中轉(zhuǎn)碼器的綜合負載值均不滿足所述第二條件時,加載新的轉(zhuǎn)碼器至所述轉(zhuǎn)碼器集群中;
所述接收單元404,用于接收用戶的轉(zhuǎn)碼請求;
所述轉(zhuǎn)碼單元405,用于將對所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給所述新的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
本發(fā)明實施例中,所述裝置還包括排序單元,用于當所述判斷結(jié)果表明至少之一轉(zhuǎn)碼器的綜合負載值滿足所述第二條件時,對滿足第二條件的轉(zhuǎn)碼器的負載信息進行排序,得到排序結(jié)果;
對應(yīng)地,所述分發(fā)單元,用于按照所述排序結(jié)果將所述轉(zhuǎn)碼請求所對應(yīng)的視頻分發(fā)給負載最小的轉(zhuǎn)碼器進行轉(zhuǎn)碼。
本發(fā)明實施例中,所述負載信息還包括宕機信息,所述裝置還包括刪除單元,用于當所述轉(zhuǎn)碼器的負載信息表明所述轉(zhuǎn)碼器宕機時,將宕機的轉(zhuǎn)碼器從所述轉(zhuǎn)碼器集群中刪除。
本發(fā)明實施例中,當采用QSV轉(zhuǎn)碼時,所述確定單元,用于根據(jù)loadi=R1*CPUusage+R2*MEMusage+R3*GPUusage每一轉(zhuǎn)碼器的綜合負載值;其中,CPUusage是CPU利用率,MEMusage表示內(nèi)存利用率,GPUusage表示GPU利用率,R1、R2和R2表示負載參數(shù)的權(quán)重值。
這里,所述R1、R2和R2根據(jù)轉(zhuǎn)碼的類型而確定,其中所述轉(zhuǎn)碼的類型包括軟轉(zhuǎn)碼和硬轉(zhuǎn)碼。
這里需要指出的是:以上裝置實施例的描述,與上述方法實施例的描述是類似的,具有同方法實施例相似的有益效果,因此不做贅述。對于本發(fā)明裝置實施例中未披露的技術(shù)細節(jié),請參照本發(fā)明方法實施例的描述而理解,為節(jié)約篇幅,因此不再贅述。
應(yīng)理解,說明書通篇中提到的“一個實施例”或“一實施例”意味著與實施例有關(guān)的特定特征、結(jié)構(gòu)或特性包括在本發(fā)明的至少一個實施例中。因此,在整個說明書各處出現(xiàn)的“在一個實施例中”或“在一實施例中”未必一定指相同的實施例。此外,這些特定的特征、結(jié)構(gòu)或特性可以任意適合的方式結(jié)合在一個或多個實施例中。應(yīng)理解,在本發(fā)明的各種實施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對本發(fā)明實施例的實施過程構(gòu)成任何限定。上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的設(shè)備和方法,可以通過其它的方式實現(xiàn)。以上所描述的設(shè)備實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,如:多個單元或組件可以結(jié)合,或可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另外,所顯示或討論的各組成部分相互之間的耦合、或直接耦合、或通信連接可以是通過一些接口,設(shè)備或單元的間接耦合或通信連接,可以是電性的、機械的或其它形式的。
上述作為分離部件說明的單元可以是、或也可以不是物理上分開的,作為單元顯示的部件可以是、或也可以不是物理單元;既可以位于一個地方,也可以分布到多個網(wǎng)絡(luò)單元上;可以根據(jù)實際的需要選擇其中的部分或全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各實施例中的各功能單元可以全部集成在一個處理單元中,也可以是各單元分別單獨作為一個單元,也可以兩個或兩個以上單元集成在一個單元中;上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:移動存儲設(shè)備、只讀存儲器(Read Only Memory,ROM)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
或者,本發(fā)明上述集成的單元如果以軟件功能模塊的形式實現(xiàn)并作為獨立 的產(chǎn)品銷售或使用時,也可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明實施例的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機、服務(wù)器、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分。而前述的存儲介質(zhì)包括:移動存儲設(shè)備、ROM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)以所述權(quán)利要求的保護范圍為準。