本發(fā)明涉及視頻直播中活躍用戶集的維護技術領域,具體涉及一種基于時間輪盤和彈幕行為的活躍用戶集維護方法及系統(tǒng)。
背景技術:
隨著互聯(lián)網(wǎng)技術的迅速發(fā)展,越來越多的用戶可以使用電腦、手機等終端通過網(wǎng)絡觀看在線視頻直播。在線視頻直播是指利用互聯(lián)網(wǎng)網(wǎng)絡資源進行的現(xiàn)場視頻直播服務,通過現(xiàn)場的視頻拍攝同步發(fā)布到網(wǎng)絡上,用戶可以同一時間在網(wǎng)絡上看到實時的現(xiàn)場情況。
在視頻直播網(wǎng)站的業(yè)務場景中,很多直播間主播在發(fā)起互動活動或者網(wǎng)站在發(fā)起專題活動時,需要只針對觀看當前直播間的活躍用戶或者在網(wǎng)站上活躍的用戶進行互動,這時就需要通過一個活躍用戶集來對活躍用戶進行實時記錄和更新。
目前,在視頻直播領域中,維護活躍用戶集的通常思路為:當服務器連續(xù)一段時間內(通常需要自定義該時間,該時間即為超時時長Timeout)沒有收到用戶發(fā)送的彈幕數(shù)據(jù),就把該用戶剔除出活躍用戶集。具體來說,通常分為以下兩種方法:
(1)針對每個用戶,保存相應的lastReceiveTime(最后收到用戶發(fā)送的彈幕數(shù)據(jù)的時間);然后通過一個定時器,每秒鐘遍歷一遍所有用戶會話,剔除滿足以下公式的用戶會話:
now-lastReceiveTime>Timeout,其中now為當前時間。
方法(1)為的缺點為:方法(1)全局只設有一個repeated timer(重復定時器),當用戶數(shù)量較多時(例如同時保持上萬個用戶),repeated timer每次遍歷所有用戶會話的工作量較大,而且耗時較長,工作效率低下。
(2)與方法(1)趨近于相同,區(qū)別僅在于方法(2)是為每個用戶會話設置一個one-shot timer(一次性定時器),每個one-shot timer在收到相應的用戶發(fā)送的彈幕數(shù)據(jù)的時間時自動更新,每個one-shot timer若發(fā)現(xiàn)超時,則剔除對應的用戶會話。
方法(2)雖然一定程度上提高了檢查的效率,但是依舊存在缺點:即方法(2)需要設置的one-shot timer的數(shù)量較多,且one-shot timer的更次頻率較快。當用戶數(shù)量較多時,用戶會話的連接數(shù)目較大,進而會“待更新計時器隊列”造成壓力,嚴重時還會造成系統(tǒng)擁塞甚至崩潰。
技術實現(xiàn)要素:
針對現(xiàn)有技術中存在的缺陷,本發(fā)明解決的技術問題為:提供一種基于時間輪盤和彈幕行為的活躍用戶集維護方法及系統(tǒng)。本發(fā)明能夠利用時間輪盤對活躍用戶集進行更新,完成對活躍用戶集的及時維護;不僅工作效率較高,而且不會對系統(tǒng)造成較大負荷,能在某些互動活動中,有效限制非活躍用戶的參與,保證互動活動的有效進行。
為達到以上目的,本發(fā)明提供的基于時間輪盤和彈幕行為的活躍用戶集維護方法,包括以下步驟:
A、根據(jù)用戶觀看直播時發(fā)送的彈幕數(shù)據(jù)生成彈幕信息,彈幕信息中包括若干彈幕行為識別標識,轉到步驟B;
B、根據(jù)彈幕行為識別標識確定符合規(guī)定的彈幕信息,對符合規(guī)定的彈幕信息進行緩存和預處理后,得到彈幕行為預處理數(shù)據(jù),轉到步驟C;
C、將彈幕行為預處理數(shù)據(jù)組成若干數(shù)據(jù)片,每片數(shù)據(jù)片包括至少1條彈幕行為預處理數(shù)據(jù);定時將當前所有緩存的數(shù)據(jù)片,按照哈希策略分配為若干組,轉到步驟D;
D、確定每組數(shù)據(jù)片中所有驗證通過的彈幕行為預處理數(shù)據(jù);將所有驗證通過的彈幕行為預處理數(shù)據(jù)對應的用戶ID,更新至與當前時間對應的活躍用戶集分片中,轉到步驟E;所述活躍用戶集分片是指:預先將活躍用戶集按照指定的活躍計算時間段劃分成的若干分片;
E、定時將更新后的活躍用戶集分片添加至預先創(chuàng)建的時間輪盤中。
本發(fā)明提供的實現(xiàn)上述方法的基于時間輪盤和彈幕行為的活躍用戶集維護系統(tǒng),該系統(tǒng)包括位于每個終端設備上的彈幕信息生成模塊、位于服務器上的緩存預處理模塊、位于服務器上的數(shù)據(jù)片組成模塊、位于服務器上的若干實時計算模塊、以及位于服務器上的活躍用戶集功能模塊;
彈幕信息生成模塊用于:根據(jù)用戶觀看直播時發(fā)送的彈幕數(shù)據(jù)生成彈幕信息,彈幕信息中包括若干彈幕行為識別標識,將彈幕信息提交至緩存預處理模塊;
緩存預處理模塊用于:根據(jù)彈幕行為識別標識確定符合規(guī)定的彈幕信息;對符合規(guī)定的彈幕信息進行緩存和預處理后,得到彈幕行為預處理數(shù)據(jù),定時向數(shù)據(jù)片組成模塊發(fā)送數(shù)據(jù)片組成信號;
數(shù)據(jù)片組成模塊用于:收到數(shù)據(jù)片組成信號后,將彈幕行為預處理數(shù)據(jù)組成若干數(shù)據(jù)片,每片數(shù)據(jù)片包括至少1條彈幕行為預處理數(shù)據(jù);定時將當前所有緩存的數(shù)據(jù)片,按照哈希策略分配至每個實時計算模塊;
實時計算模塊用于:對數(shù)據(jù)片組成模塊分配的數(shù)據(jù)片中的所有彈幕行為預處理數(shù)據(jù)進行驗證,確定所有驗證通過的彈幕行為預處理數(shù)據(jù);將所有驗證通過的彈幕行為預處理數(shù)據(jù)對應的用戶ID,更新至與當前時間對應的活躍用戶集分片中;活躍用戶集分片是指:預先將活躍用戶集按照指定的活躍計算時間段劃分成的若干分片;
活躍用戶集功能模塊用于:定時將實時計算模塊更新后的活躍用戶集分片添加至預先創(chuàng)建的時間輪盤中。
與現(xiàn)有技術相比,本發(fā)明的優(yōu)點在于:
(1)本發(fā)明根據(jù)用戶觀看直播時發(fā)送的彈幕數(shù)據(jù)生成彈幕信息、并將驗證通過的彈幕信息作為活躍用戶更新至對應的活躍用戶集分片。有鑒于此,與現(xiàn)有技術相比,本發(fā)明并不是采用重復定時器或一次性定時器,而是定期將活躍用戶集分片添加到已創(chuàng)建的時間輪盤中,以此利用時間輪盤來對活躍用戶集進行更新,完成對活躍用戶集的及時維護;不僅工作效率較高,而且不會對系統(tǒng)造成較大負荷,能在某些互動活動中,有效限制非活躍用戶的參與,保證互動活動的有效進行。
(2)本發(fā)明的活躍用戶集分片的劃分時間、以及將活躍用戶集分片添加至時間輪盤的定時周期,均能夠根據(jù)具體使用情形自行設置和調整;進而使得活躍用戶集分片的數(shù)量、活躍用戶的統(tǒng)計顆粒度(即可按小時活躍度、分鐘活躍度或其他活躍度來統(tǒng)計計算)、以及時間輪盤的維護周期(維護周期與定時周期相同,可按1小時維護、1分鐘維護或其他周期來維護)均能夠進行對應調整。因此,本發(fā)明的靈活性較強,適用性較高。
(3)本發(fā)明的系統(tǒng)包括多個用于處理數(shù)據(jù)片的實時計算模塊,多個實時計算模塊能同時處理多個數(shù)據(jù)片,進一步提高了工作效率實時性。
附圖說明
圖1為本發(fā)明實施例中基于時間輪盤和彈幕行為的活躍用戶集維護方法的流程圖;
圖2為本發(fā)明實施例中時間輪盤的結構示意圖;
圖3為基于時間輪盤和彈幕行為的活躍用戶集維護系統(tǒng)的結構框圖。
具體實施方式
以下結合附圖及實施例對本發(fā)明作進一步詳細說明。
參見圖1所示,本發(fā)明實施例中的基于時間輪盤和彈幕行為的活躍用戶集維護方法,包括以下步驟:
S1:每個用戶使用的終端設備,根據(jù)用戶觀看直播時發(fā)送的彈幕數(shù)據(jù)生成彈幕信息,彈幕信息中包括若干彈幕行為識別標識,轉到S2。
S1中的彈幕行為識別標識包括:直播間IP地址、用戶發(fā)送的彈幕數(shù)據(jù)、用戶ID(即用戶唯一性的ID)和識別碼。識別碼為固定長度,生成后會進行加密;識別碼的生成規(guī)則為:由時間戳、用戶使用的終端設備ID和隨機數(shù)排列而成,其中用戶使用的終端設備ID根據(jù)終端設備的API(Application Programming Interface,應用程序編程接口)獲取。
S2:根據(jù)彈幕行為識別標識確定符合規(guī)定的彈幕信息(丟棄不符合規(guī)定的彈幕信息),對符合規(guī)定的彈幕信息進行緩存和預處理后(即統(tǒng)一數(shù)據(jù)格式),得到彈幕行為預處理數(shù)據(jù),轉到S3。
S2中符合規(guī)定的彈幕信息中的彈幕行為識別標識需要同時滿足以下條件:直播間IP地址的格式合法(非法則不符合規(guī)定)、用戶發(fā)送的彈幕數(shù)據(jù)有效(包含敏感或非法內容則無效)、用戶ID不為空(為空則不符合規(guī)定)、用戶ID符合數(shù)據(jù)字段類型(不符合數(shù)據(jù)字段類型則不符合規(guī)定)、時間戳格式正確(錯誤則不符合規(guī)定)、用戶終端類型標識合法(非法則不符合規(guī)定)。
S2中的彈幕行為預處理數(shù)據(jù)格式為:
S3:將彈幕行為預處理數(shù)據(jù)組成若干數(shù)據(jù)片,每片數(shù)據(jù)片的容量小于等于1MB,每片數(shù)據(jù)片包括至少1條完整的彈幕行為預處理數(shù)據(jù),轉到S4。
S3的具體流程舉例如下:當前緩存的彈幕行為預處理數(shù)據(jù)為3條,其大小分別為0.3M、0.4M和0.5M,此時S3的流程為:將0.3M、0.4M的兩條預處理數(shù)據(jù)組成一片數(shù)據(jù)片,再將0.5M的預處理數(shù)據(jù)組成另一片數(shù)據(jù)片,依次類推。
S4:定時將當前所有緩存的數(shù)據(jù)片,按照哈希策略分配為至少3組,轉到S5。S4的具體流程為:定義若干組的總數(shù)量為N,為每片數(shù)據(jù)片分配一個唯一的ID號UUID,將每個UUID和N進行取模運算(UUID mod N),取模運算得到的余數(shù)相同的所有數(shù)據(jù)片為相同組。
S4中對數(shù)據(jù)片按哈希策略分組的目的在于:分組時可以根據(jù)數(shù)據(jù)片的數(shù)量對N進行增減,進而提高后續(xù)計算每組數(shù)據(jù)片的水平擴展能力。
S5:分別對每組數(shù)據(jù)片中所有的彈幕行為預處理數(shù)據(jù)進行驗證,若驗證通過,轉到S6;若驗證未通過,丟棄驗證未通過的彈幕行為預處理數(shù)據(jù),結束。
S5的具體流程為:分別對每組數(shù)據(jù)片中所有的彈幕行為預處理數(shù)據(jù)的識別碼進行解密,得到時間戳和終端設備ID;判斷時間戳是否在合理范圍內(即時間戳與當前服務器的時差是否在一分鐘內)、且終端設備ID符合規(guī)范(終端設備ID滿足識別碼的生成規(guī)則視為符合規(guī)范),若是,則確定當前彈幕行為預處理數(shù)據(jù)驗證通過,否則確定當前彈幕行為預處理數(shù)據(jù)驗證未通過。
S6:將所有驗證通過的彈幕行為預處理數(shù)據(jù)對應的用戶ID,更新至與當前時間(即驗證通過的時間)對應的活躍用戶集分片中,轉到S7。活躍用戶集分片是指:預先將活躍用戶集按照指定的活躍計算時間段劃分成的若干分片。
S6中的活躍用戶集分片舉例如下:若指定的活躍計算時間段為1小時,則活躍用戶集對應一天24小時,就有24個相應的活躍用戶集分片;若指定的活躍計算時間段為1分鐘,則活躍用戶集對應一天24*60=1440分鐘,就有1440個相應的活躍用戶集分片。
S7:定時(定時周期可以自行設置,一般為1分鐘)將更新后的活躍用戶集分片添加至預先創(chuàng)建的時間輪盤中,結束。
參見圖2所示,S7中的時間輪盤包括1個首尾相連的環(huán)形數(shù)據(jù)結構緩沖循環(huán)隊列(即circular buffer),環(huán)形數(shù)據(jù)結構緩沖循環(huán)隊列分為若干單元槽,每個單元槽中填充有一片活躍用戶集分片;環(huán)形數(shù)據(jù)結構緩沖循環(huán)隊列中設置有1個指向隊尾單元槽的指針。
S7具體包括以下流程:定義時間輪盤中的順時針方向為隊尾至隊首方向,逆時針方向為隊首至隊尾方向。定時周期過后,將時間輪盤中隊首單元槽內的活躍用戶集分片移出,其余每個單元槽內的活躍用戶集分片,分別按照順時針方向移動至下一個單元槽(此時隊尾的單元槽為空)。將S6中更新后的活躍用戶集分片添加至時間輪盤隊尾的單元槽,將指針按照順時針方向移動至下一個單元槽。
S7中的時間輪盤(活躍用戶集)會通過Restful接口或者RPC接口形式,暴露給其他應用使用?;诖嘶钴S用戶集,可以在多個重要場景中保證參與互動活動的用戶均為當前活躍用戶。
參見圖3所示,本發(fā)明實施例中的實現(xiàn)上述方法的基于時間輪盤和彈幕行為的活躍用戶集維護系統(tǒng),包括位于每個終端設備上的彈幕信息生成模塊、位于服務器上的緩存預處理模塊、位于服務器上的數(shù)據(jù)片組成模塊、位于服務器上的若干實時計算模塊、以及位于服務器上的活躍用戶集功能模塊。
彈幕信息生成模塊用于:根據(jù)用戶觀看直播時發(fā)送的彈幕數(shù)據(jù)生成彈幕信息,彈幕信息中包括若干彈幕行為識別標識,將彈幕信息提交至緩存預處理模塊。彈幕行為識別標識包括:直播間IP地址、用戶發(fā)送的彈幕數(shù)據(jù)、用戶ID和識別碼。識別碼為固定長度,生成后會進行加密;識別碼的生成規(guī)則為:由時間戳、用戶使用的終端設備ID和隨機數(shù)排列而成。
緩存預處理模塊用于:根據(jù)彈幕行為識別標識確定符合規(guī)定的彈幕信息,對符合規(guī)定的彈幕信息進行緩存和預處理后,得到彈幕行為預處理數(shù)據(jù),定時向數(shù)據(jù)片組成模塊發(fā)送數(shù)據(jù)片組成信號。符合規(guī)定的彈幕信息中的彈幕行為識別標識需要同時滿足以下條件:直播間IP地址的格式合法、用戶發(fā)送的彈幕數(shù)據(jù)有效、用戶ID不為空、用戶ID符合數(shù)據(jù)字段類型、時間戳格式正確、用戶終端類型標識合法。
數(shù)據(jù)片組成模塊用于:收到數(shù)據(jù)片組成信號后,將彈幕行為預處理數(shù)據(jù)組成若干數(shù)據(jù)片,每片數(shù)據(jù)片包括至少1條彈幕行為預處理數(shù)據(jù);定時將當前所有緩存的數(shù)據(jù)片,按照哈希策略分配至每個實時計算模塊,具體流程為:定義若干組的總數(shù)量為N,為每片數(shù)據(jù)片分配一個唯一的ID號UUID;將每個UUID和N進行取模運算,取模運算得到的余數(shù)相同的所有數(shù)據(jù)片為相同組。
實時計算模塊用于:對數(shù)據(jù)片組成模塊分配的數(shù)據(jù)片中的所有彈幕行為預處理數(shù)據(jù)進行驗證,具體流程為:對分配的所有數(shù)據(jù)片中的彈幕行為預處理數(shù)據(jù)的識別碼進行解密,得到時間戳和終端設備ID。判斷時間戳是否在合理范圍內、且終端設備ID符合規(guī)范,若不是,確定當前彈幕行為預處理數(shù)據(jù)驗證未通過,丟棄當前彈幕行為預處理數(shù)據(jù);若是,確定當前彈幕行為預處理數(shù)據(jù)驗證通過,將所有驗證通過的彈幕行為預處理數(shù)據(jù)對應的用戶ID,更新至與當前時間對應的活躍用戶集分片中;活躍用戶集分片是指:預先將活躍用戶集按照指定的活躍計算時間段劃分成的若干分片。
活躍用戶集功能模塊用于:定時將實時計算模塊更新后的活躍用戶集分片添加至預先創(chuàng)建的時間輪盤中。時間輪盤包括1個首尾相連的環(huán)形數(shù)據(jù)結構緩沖循環(huán)隊列,環(huán)形數(shù)據(jù)結構緩沖循環(huán)隊列分為若干單元槽,每個單元槽中填充有一片活躍用戶集分片;環(huán)形數(shù)據(jù)結構緩沖循環(huán)隊列中設置有1個指向隊尾單元槽的指針。
在此基礎上,活躍用戶集功能模塊具體用于:定時周期過后,將時間輪盤中隊首單元槽內的活躍用戶集分片移出,其余每個單元槽內的活躍用戶集分片,分別按照順時針方向移動至下一個單元槽,順時針方向為隊尾至隊首方向,逆時針方向為隊首至隊尾方向;將實時計算模塊更新后的活躍用戶集分片添加至時間輪盤隊尾的單元槽,將指針按照順時針方向移動至下一個單元槽。
本發(fā)明不局限于上述實施方式,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍之內。本說明書中未作詳細描述的內容屬于本領域專業(yè)技術人員公知的現(xiàn)有技術。