基于时间轮盘和页面心跳的活跃用户集维护方法及系统
技术领域
本发明涉及视频直播中活跃用户集的维护技术领域,具体涉及一种基于时间轮盘和页面心跳的活跃用户集维护方法及系统。
背景技术
随着互联网技术的迅速发展,越来越多的用户可以使用电脑、手机等终端通过网络观看在线视频直播。在线视频直播是指利用互联网网络资源进行的现场视频直播服务,通过现场的视频拍摄同步发布到网络上,用户可以同一时间在网络上看到实时的现场情况。
在视频直播网站的业务场景中,很多直播间主播在发起互动活动或者网站在发起专题活动时,需要只针对观看当前直播间的活跃用户或者在网站上活跃的用户进行互动,这时就需要通过一个活跃用户集来对活跃用户进行实时记录和更新。
目前,在视频直播领域中,维护活跃用户集的通常思路为:当服务器连续一段时间内(通常需要自定义该时间,该时间即为超时时长Timeout)没有收到页面心跳事件数据,就把该用户剔除出活跃用户集。具体来说,通常分为以下两种方法:
(1)针对每个用户,保存相应的lastReceiveTime(最后收到页面心跳事件数据的时间);然后通过一个定时器,每秒钟遍历一遍所有用户会话,剔除满足以下公式的用户会话:
now-lastReceiveTime>Timeout,其中now为当前时间。
方法(1)为的缺点为:方法(1)全局只设有一个repeated timer(重复定时器),当用户数量较多时(例如同时保持上万个用户),repeated timer每次遍历所有用户会话的工作量较大,而且耗时较长,工作效率低下。
(2)与方法(1)趋近于相同,区别仅在于方法(2)是为每个用户会话设置一个one-shot timer(一次性定时器),每个one-shot timer在收到相应的页面心跳事件数据的时间时自动更新,每个one-shot timer若发现超时,则剔除对应的用户会话。
方法(2)虽然一定程度上提高了检查的效率,但是依旧存在缺点:即方法(2)需要设置的one-shot timer的数量较多,且one-shot timer的更次频率较快。当用户数量较多时,用户会话的连接数目较大,进而会“待更新计时器队列”造成压力,严重时还会造成系统拥塞甚至崩溃。
发明内容
针对现有技术中存在的缺陷,本发明解决的技术问题为:提供一种基于时间轮盘和页面心跳的活跃用户集维护方法及系统。本发明能够利用时间轮盘对活跃用户集进行更新,完成对活跃用户集的及时维护;不仅工作效率较高,而且不会对系统造成较大负荷,能在某些互动活动中,有效限制非活跃用户的参与,保证互动活动的有效进行。
为达到以上目的,本发明提供的基于时间轮盘和页面心跳的活跃用户集维护方法,包括以下步骤:
A、根据用户观看的直播视频生成视频心跳信息,视频心跳信息中包括若干心跳信息识别标识,转到步骤B;
B、根据心跳信息识别标识确定符合规定的视频心跳信息,对符合规定的视频心跳信息进行缓存和预处理后,得到页面心跳预处理数据,转到步骤C;
C、将页面心跳预处理数据组成若干数据片,每片数据片包括至少1条页面心跳预处理数据;定时将当前所有缓存的数据片,按照哈希策略分配为若干组,转到步骤D;
D、确定每组数据片中所有验证通过的页面心跳预处理数据;将所有验证通过的页面心跳预处理数据对应的用户ID,更新至与当前时间对应的活跃用户集分片中,转到步骤E;所述活跃用户集分片是指:预先将活跃用户集按照指定的活跃计算时间段划分成的若干分片;
E、定时将更新后的活跃用户集分片添加至预先创建的时间轮盘中。
本发明提供的实现上述方法的基于时间轮盘和页面心跳的活跃用户集维护系统,该系统包括位于每个终端设备上的视频心跳信息生成模块、位于服务器上的缓存预处理模块、位于服务器上的数据片组成模块、位于服务器上的若干实时计算模块、以及位于服务器上的活跃用户集功能模块;
视频心跳信息生成模块用于:根据用户观看的直播视频生成视频心跳信息,视频心跳信息中包括若干心跳信息识别标识,将视频心跳信息提交至缓存预处理模块;
缓存预处理模块用于:根据心跳信息识别标识确定符合规定的视频心跳信息;对符合规定的视频心跳信息进行缓存和预处理后,得到页面心跳预处理数据,定时向数据片组成模块发送数据片组成信号;
数据片组成模块用于:收到数据片组成信号后,将页面心跳预处理数据组成若干数据片,每片数据片包括至少1条页面心跳预处理数据;定时将当前所有缓存的数据片,按照哈希策略分配至每个实时计算模块;
实时计算模块用于:对数据片组成模块分配的数据片中的所有页面心跳预处理数据进行验证,确定所有验证通过的页面心跳预处理数据;将所有验证通过的页面心跳预处理数据对应的用户ID,更新至与当前时间对应的活跃用户集分片中;活跃用户集分片是指:预先将活跃用户集按照指定的活跃计算时间段划分成的若干分片;
活跃用户集功能模块用于:定时将实时计算模块更新后的活跃用户集分片添加至预先创建的时间轮盘中。
与现有技术相比,本发明的优点在于:
(1)本发明根据用户观看的直播视频生成视频心跳信息、并将验证通过的视频心跳信息作为活跃用户更新至对应的活跃用户集分片。有鉴于此,与现有技术相比,本发明并不是采用重复定时器或一次性定时器,而是定期将活跃用户集分片添加到已创建的时间轮盘中,以此利用时间轮盘来对活跃用户集进行更新,完成对活跃用户集的及时维护;不仅工作效率较高,而且不会对系统造成较大负荷,能在某些互动活动中,有效限制非活跃用户的参与,保证互动活动的有效进行。
(2)本发明的活跃用户集分片的划分时间、以及将活跃用户集分片添加至时间轮盘的定时周期,均能够根据具体使用情形自行设置和调整;进而使得活跃用户集分片的数量、活跃用户的统计颗粒度(即可按小时活跃度、分钟活跃度或其他活跃度来统计计算)、以及时间轮盘的维护周期(维护周期与定时周期相同,可按1小时维护、1分钟维护或其他周期来维护)均能够进行对应调整。因此,本发明的灵活性较强,适用性较高。
(3)本发明的系统包括多个用于处理数据片的实时计算模块,多个实时计算模块能同时处理多个数据片,进一步提高了工作效率实时性。
附图说明
图1为本发明实施例中基于时间轮盘和页面心跳的活跃用户集维护方法的流程图;
图2为本发明实施例中时间轮盘的结构示意图;
图3为基于时间轮盘和页面心跳的活跃用户集维护系统的结构框图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图1所示,本发明实施例中的基于时间轮盘和页面心跳的活跃用户集维护方法,包括以下步骤:
S1:每个用户使用的终端设备,根据用户观看的直播视频生成视频心跳信息,视频心跳信息中包括若干心跳信息识别标识,转到S2。
心跳信息识别标识包括用户ID(即用户唯一性的ID)和识别码。识别码为固定长度,生成后会进行加密;识别码的生成规则为:由时间戳、用户使用的终端设备ID和随机数排列而成,其中用户使用的终端设备ID根据终端设备的API(Application ProgrammingInterface,应用程序编程接口)获取。
S2:根据心跳信息识别标识确定符合规定的视频心跳信息(丢弃不符合规定的视频心跳信息),对符合规定的视频心跳信息进行缓存和预处理后(即统一数据格式),得到页面心跳预处理数据,转到S3。
S2中符合规定的视频心跳信息中的心跳信息识别标识需要同时满足以下条件:用户ID不为空(为空则不符合规定)、用户ID符合数据字段类型(不符合数据字段类型则不符合规定)、时间戳格式正确(错误则不符合规定)、用户终端类型标识合法(非法则不符合规定)。
S2中的页面心跳预处理数据格式为:
S3:将页面心跳预处理数据组成若干数据片,每片数据片的容量小于等于1MB,每片数据片包括至少1条完整的页面心跳预处理数据,转到S4。
S3的具体流程举例如下:当前缓存的页面心跳预处理数据为3条,其大小分别为0.3M、0.4M和0.5M,此时S3的流程为:将0.3M、0.4M的两条预处理数据组成一片数据片,再将0.5M的预处理数据组成另一片数据片,依次类推。
S4:定时将当前所有缓存的数据片,按照哈希策略分配为至少3组,转到S5。S4的具体流程为:定义若干组的总数量为N,为每片数据片分配一个唯一的ID号UUID,将每个UUID和N进行取模运算(UUID mod N),取模运算得到的余数相同的所有数据片为相同组。
S4中对数据片按哈希策略分组的目的在于:分组时可以根据数据片的数量对N进行增减,进而提高后续计算每组数据片的水平扩展能力。
S5:分别对每组数据片中所有的页面心跳预处理数据进行验证,若验证通过,转到S6;若验证未通过,丢弃验证未通过的页面心跳预处理数据,结束。
S5的具体流程为:分别对每组数据片中所有的页面心跳预处理数据的识别码进行解密,得到时间戳和终端设备ID;判断时间戳是否在合理范围内(即时间戳与当前服务器的时差是否在一分钟内)、且终端设备ID符合规范(终端设备ID满足识别码的生成规则视为符合规范),若是,则确定当前页面心跳预处理数据验证通过,否则确定当前页面心跳预处理数据验证未通过。
S6:将所有验证通过的页面心跳预处理数据对应的用户ID,更新至与当前时间(即验证通过的时间)对应的活跃用户集分片中,转到S7。活跃用户集分片是指:预先将活跃用户集按照指定的活跃计算时间段划分成的若干分片。
S6中的活跃用户集分片举例如下:若指定的活跃计算时间段为1小时,则活跃用户集对应一天24小时,就有24个相应的活跃用户集分片;若指定的活跃计算时间段为1分钟,则活跃用户集对应一天24*60=1440分钟,就有1440个相应的活跃用户集分片。
S7:定时(定时周期可以自行设置,一般为1分钟)将更新后的活跃用户集分片添加至预先创建的时间轮盘中,结束。
参见图2所示,S7中的时间轮盘包括1个首尾相连的环形数据结构缓冲循环队列(即circular buffer),环形数据结构缓冲循环队列分为若干单元槽,每个单元槽中填充有一片活跃用户集分片;环形数据结构缓冲循环队列中设置有1个指向队尾单元槽的指针。
S7具体包括以下流程:定义时间轮盘中的顺时针方向为队尾至队首方向,逆时针方向为队首至队尾方向。定时周期过后,将时间轮盘中队首单元槽内的活跃用户集分片移出,其余每个单元槽内的活跃用户集分片,分别按照顺时针方向移动至下一个单元槽(此时队尾的单元槽为空)。将S6中更新后的活跃用户集分片添加至时间轮盘队尾的单元槽,将指针按照顺时针方向移动至下一个单元槽。
S7中的时间轮盘(活跃用户集)会通过Restful接口或者RPC接口形式,暴露给其他应用使用。基于此活跃用户集,可以在多个重要场景中保证参与互动活动的用户均为当前活跃用户。
参见图3所示,本发明实施例中的实现上述方法的基于时间轮盘和页面心跳的活跃用户集维护系统,包括位于每个终端设备上的视频心跳信息生成模块、位于服务器上的缓存预处理模块、位于服务器上的数据片组成模块、位于服务器上的若干实时计算模块、以及位于服务器上的活跃用户集功能模块。
视频心跳信息生成模块用于:根据用户观看的直播视频生成视频心跳信息,视频心跳信息中包括若干心跳信息识别标识,将视频心跳信息提交至缓存预处理模块。心跳信息识别标识包括用户ID和识别码,识别码为固定长度,生成后会进行加密;识别码的生成规则为:由时间戳、用户使用的终端设备ID和随机数排列而成。
缓存预处理模块用于:根据心跳信息识别标识确定符合规定的视频心跳信息,对符合规定的视频心跳信息进行缓存和预处理后,得到页面心跳预处理数据,定时向数据片组成模块发送数据片组成信号。符合规定的视频心跳信息中的心跳信息识别标识需要同时满足以下条件:用户ID不为空、用户ID符合数据字段类型、时间戳格式正确、用户终端类型标识合法。
数据片组成模块用于:收到数据片组成信号后,将页面心跳预处理数据组成若干数据片,每片数据片包括至少1条页面心跳预处理数据;定时将当前所有缓存的数据片,按照哈希策略分配至每个实时计算模块,具体流程为:定义若干组的总数量为N,为每片数据片分配一个唯一的ID号UUID;将每个UUID和N进行取模运算,取模运算得到的余数相同的所有数据片为相同组。
实时计算模块用于:对数据片组成模块分配的数据片中的所有页面心跳预处理数据进行验证,具体流程为:对分配的所有数据片中的页面心跳预处理数据的识别码进行解密,得到时间戳和终端设备ID。判断时间戳是否在合理范围内、且终端设备ID符合规范,若不是,确定当前页面心跳预处理数据验证未通过,丢弃当前页面心跳预处理数据;若是,确定当前页面心跳预处理数据验证通过,将所有验证通过的页面心跳预处理数据对应的用户ID,更新至与当前时间对应的活跃用户集分片中;活跃用户集分片是指:预先将活跃用户集按照指定的活跃计算时间段划分成的若干分片。
活跃用户集功能模块用于:定时将实时计算模块更新后的活跃用户集分片添加至预先创建的时间轮盘中。时间轮盘包括1个首尾相连的环形数据结构缓冲循环队列,环形数据结构缓冲循环队列分为若干单元槽,每个单元槽中填充有一片活跃用户集分片;环形数据结构缓冲循环队列中设置有1个指向队尾单元槽的指针。
在此基础上,活跃用户集功能模块具体用于:定时周期过后,将时间轮盘中队首单元槽内的活跃用户集分片移出,其余每个单元槽内的活跃用户集分片,分别按照顺时针方向移动至下一个单元槽,顺时针方向为队尾至队首方向,逆时针方向为队首至队尾方向;将实时计算模块更新后的活跃用户集分片添加至时间轮盘队尾的单元槽,将指针按照顺时针方向移动至下一个单元槽。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。