发明内容
本申请所要解决的技术问题是提供一种网站流量控制方法及系统,能够合理的对网站流量进行控制。
为了解决上述问题,本申请公开了一种网站流量控制方法,包括以下步骤:
接收用户访问请求,获取用户标识;
根据用户标识查询用户针对当前网站的临界访问请求的记录信息,所述临界访问请求指从最近一次成功访问请求前推预设次数后所确定的成功访问请求;若能查询到目标记录信息,则进行下一步骤,反之,则响应当前访问请求;
判断所述临界访问请求的请求时间是否在距离当前访问请求时间的一个预定单位时间内,如果是,则拒绝当前访问请求,反之,则响应当前访问请求。
进一步地,所述根据用户标识查询用户针对当前网站的临界访问请求的记录信息之前还包括以下步骤:
采用动态缓存存储成功访问请求记录信息,对所述记录信息进行老化处理。
进一步地,所述动态缓存存储的成功访问请求记录信息包括:
成功访问请求的到期时间,所述到期时间为成功访问请求的请求时间加上预定单位时间。
进一步地,对所述记录信息进行老化处理包括:
删除到达过期时间的成功访问请求记录信息。
进一步地,所述采用缓存存储成功访问请求记录信息包括以下步骤:
采用总计数器记录用户最近一次访问请求的到期时间及访问请求的总次数;
采用单次计数器记录用户本次访问请求的过期时间及本次访问请求的序列号。
进一步地,所述方法还包括:
判断动态缓存中是否存储有当前用户的成功访问请求记录信息;
若是,则为新的成功访问请求记录信息新建一个单次计数器,并更新总计数器,所述单次计数器中的序列号为更新后总计数器中记录的总次数;
反之,则为新的成功访问请求记录信息新建一个单次计数器和总计数器,所述单次计数器中的序列号与所述总计数器的总次数相同。
进一步地,所述查询用户针对当前网站的临界访问请求的记录信息包括以下步骤:
查询当前用户总计数器中记录的总次数;
将总次数减去访问请求阈值后的值加一,得到临界访问请求的序列号;
根据序列号查询临界访问请求对应的单次计数器。
进一步地,所述总计数器和单次计数器采用三元组(key,timeout,value)表示,其中,key表示用户标识,timeout为访问请求的过期时间,value为取值。
为了解决上述问题,本申请还公开了一种网站流量控制装置,包括:
用户标识获取模块,接收用户访问请求,并获取用户标识;
临界访问请求记录信息查询模块,根据用户标识来查询临界访问请求记录信息,若能查询到,则将信息传递给判断模块,反之,则将信息传递给响应模块;
判断模块,判断临界访问请求的请求时间是否在距离当前访问请求时间的一个预定单位时间内;
响应模块,根据临界访问请求记录信息查询模块及判断模块传递的信息对用户访问请求作出回应。
进一步地,所述装置还包括:
动态缓存模块,存储用户的成功访问请求记录信息,并对所述记录信息进行老化处理。
与现有技术相比,本申请包括以下优点:
本申请的网站流量控制方法及装置采用动态的单位时间,即以当前时间倒推一个预定单位时间来判断同一用户针对某一网站的成功访问请求的次数,可以保证每一个访问请求发生时往前推的一个单位时间内用户的访问请求次数都是在控制的访问请求阈值内,从而能合理的控制网站流量。
其次,本申请采用动态缓存的方式对用户针对某一网站的成功访问请求记录信息进行存储,并对记录信息实现自动老化,从而减少大量访问请求记录信息对系统资源的占用,减少存储的数据量。
再次,成功访问请求记录信息采用三元组的记录方法,动态缓存中记录的是每次成功访问请求的到期时间,采用过期自动老化的机制便可以实现数据的自动删除,而不需要定期来进行删除更新处理。
另外,同一用户针对同一网站的成功访问请求记录信息采用总计数器和单次计数器的方式,总计数器用于累计用户访问请求的总次数,在每次新建单次计数器时都以总计数器为参照,查找位置固定,可以节省记录时间,提高计算机的反应速度,同时可以避免因为采用动态参照而带来的不便或者错误。
当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优点。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请提供一种网站流量控制方法及装置,可以应用于各种用户访问网站的浏览器等客户端、网站的插件、或者网站对应的服务器中,用于对网站访问流量进行合理有效的控制。具体的,本申请的网站流量控制方法及装置可以通过计算机程序来实现。
参照图1,示出本申请的一种网站流量控制方法实施例一,包括以下步骤:
步骤101,接收用户访问请求,获取用户标识。
客户端或者服务器接收用户针对某个网站提出的访问请求,用户标识通过用户访问请求里面包含的信息来获取。此处的用户标识为用于识别用户身份的信息,例如,用户名称、用户IP地址等。
步骤102,根据用户标识查询用户针对当前网站的临界访问请求记录信息,所述临界访问请求指从最近一次成功访问请求前推预设次数后所确定的成功访问请求,若能查询到目标记录信息,则进行下一步骤,反之,则响应当前访问请求。
此处的记录信息是指与流量控制相关的信息,例如,用户标识、访问请求的时间、访问请求的到期时间、访问请求的序列号(即表示访问请求属于用户针对当前网站的第几次访问请求的数值)等等。记录信息可以一直保存,也可以根据预定的规则被删除,例如,到达访问请求的过期时间就被删除等等。
预设次数的取值为预定单位时间内用户访问当前网站次数的上限(访问请求阈值)减去一后得到的数,具体的根据网站流量控制的程度来确定。例如,若希望将预定单位时间内访问请求的次数控制在20次以内,那么预设次数则为19;若希望将预定单位时间内访问请求的次数控制在30次以内,那么预设次数则为29。
成功访问请求是指用户针对当前网站提出访问并得到响应的访问请求。
若能查到临界访问请求记录信息,则进行后续判断,反之,则说明临界访问请求不存在。临界访问请求不存在表示用户针对当前网站的成功访问请求的总数量小于或者等于预设次数,也就是说,访问请求次数还没有达到访问请求阈值,当前访问请求能被允许,那么便对当前访问请求作出响应。另外,临界访问请求不存在也可能表示用户针对当前网站的成功访问请求的总数量虽然大于预设次数,但是因为临界访问请求时间距离当前访问请求时间较长,例如超过一个预定单位时间,已经被更新删除了,此时,也可以说明在距离当前访问请求时间的一个预定单位时间内的成功访问请求的总数量是小于或者等于预设次数,即小于访问请求阈值的,那么当前访问请求能被允许,所以响应当前访问请求。
步骤103,判断所述临界访问请求的请求时间是否在距离当前访问请求时间的一个预定单位时间内,如果是,则拒绝当前访问请求,反之,则响应当前访问请求。
预定单位时间可以根据实际情况来设定,例如24小时,一个星期等等。距离当前访问请求时间的一个预定单位时间是指当前接收访问请求的时间再往前推一个预定单位时间,例如,当前接收访问请求的时间为2011年2月11日12:00:00,预定单位时间为24小时,那么距离当前时间的一个预定单位时间内则是指2011年2月10日12:00:00至2011年2月11日12:00:00这段时间。如果临界访问请求的请求时间是在这个时间段内,则说明在这个时间段内用户至少已经提出过的成功访问请求次数达到访问请求阈值了,需要对其访问请求进行控制,所以,拒绝当前访问请求,反之,则说明在这个时间段内用户提出的成功访问请求还未达到访问请求阈值,可以响应当前访问请求。
因为对于实现本申请的其中一个难点在于如何平滑、均匀地控制预定单位时间内的网站流量,即保证在任何一个时间往前推一个预定单位时间内的访问请求数量都在访问请求阈值之内,在前述的方法中,采用动态的单位时间,即通过判断最近一次访问请求往前推预设次数的临界访问请求是否存在以及若存在,其请求时间是否在当前时间往前推的一个预定单位时间内来实现平滑、均匀的控制预定单位时间内的网站流量。
参照图2,示出本申请的网站流量控制方法实施例二,进一步地,在实施例一的步骤102之前还包括步骤:
步骤201,采用动态缓存存储成功访问请求的记录信息,对所述记录信息进行老化处理。
具体的动态缓存存储的每次成功访问请求的记录信息包括成功访问请求的到期时间,老化处理为删除到达到期时间的成功访问请求的记录信息。
此处的成功访问请求的到期时间是指访问请求时间加上一个预定单位时间。动态缓存存储每次成功访问请求信息时就记录下访问请求的到期时间,同时结合动态缓存的过期老化机制,可以保证访问请求信息过期自动被老化删除。优先的,采用缓存存储每次成功访问请求记录信息时,其中的信息数据采用两个计数器共同记录来实现,分别为总计数器和单次计数器。
总计数器记录的信息包括:用户标识、该用户最近一次访问请求的过期时间以及访问请求的总次数,每增加一次访问请求,则更新一次总计数器,更新总计数器包括更新过期时间及总次数。单次计数器记录的信息包括:用户标识,该用户本次访问请求的过期时间以及本次访问请求的序列号(即用户的第几次访问请求),每增加一次访问请求,则新建一个单次计数器。单次计数器中记录的用户第几次访问请求依赖于总计数器中所记录的总次数来确定,每次新建单次计数器参照总计数器中的数据来实现。例如,假设在有新的访问请求提出之前,总计数器中记录的总次数为20,那么当新的访问请求提出时,会新建一个单次计数器,会在其中记录这是用户的第21次请求,同时会将总计数器中记录的总次数更新为21。
单次计数器和总计数器都会在到达过期时间时自动被删除,当有新的访问请求提出时,则重新建立总计数器和单次计数器,重新开始从1计数。但是若在总计数器中记录的过期时间到达之前有新的成功访问请求,那么会产生新的过期时间覆盖原来的更新时间。因此,可能会出现总计数器一直存在,但是单次计数器大部分都因为过期被删除的情况,此时,当有新的访问请求提出时,则新建单次计数器,同时更新总计数器,单次计数器中的序列号仍然根据总计数器中记录的总次数确定。
采用两个计数器来对同一用户实现记录的方式,在建立每个单次计数器的时候都只用参照总计数器就能实现记录,即查找位置固定,可以节省记录的时间,提高计算机的反应速度,同时可以避免记录错误。
其中,利用总计数器和单次计数器查询用户针对当前网站的临界访问请求记录信息可以通过以下方式来实现:
步骤D1,根据用户标识查询当前用户总计数器中记录的总次数。
步骤D2,将总次数减去预设次数得到临界访问请求的序列号。
例如,记录的总次数为30次,预设次数为19,那么可以得到临界访问请求的序列号为11。
步骤D3,通过临界访问请求序列号查找对应的单次计数器。
因为采用数据库进行存储时,会有较多的问题。例如,在高并发的情况下,会产生大量对数据库的请求,造成数据库I/O巨大的压力。另外,流量控制数据需要频繁更新、过期,而数据库在更新、过期的能力并不高,采用索引并不能体现出优势,但是如果不用索引,高并发的检索响应则又会比较慢。最重要的是,我们需要自己去实现主动更新、主动过期的代码来调度这些数据,容易出错。
因此本申请的另一个难点在于,如何使控制流量的方式简单、容易实现,同时对于高并发的网站应用来说比较高效、响应迅速。
通过动态缓存的方式来存储成功访问请求的记录信息,可以利用动态缓存的老化机制来实现成功访问请求的自动老化处理,从而可以使过期的数据被删除,避免产生大量的垃圾数据占用系统资源。另外,采用动态缓存的方式来存储成功访问请求的记录信息,当有新的访问请求提出时,查询该用户对应的总计数器以及某个单次计数器便可以确定是否给出响应,而无需在数据库中进行大量的检索等,控制方式简单,容易实现,且可以缩短响应的时间,使响应变得高效快速。即使出现访问请求高并发的情况,因为采用动态缓存,且所需查询的数据量较小,可以避免对其他资源的占用,同时可以避免采用数据库存储时的对数据库所造成的I/O压力。可以理解,参照图3,对于前述的方法实施例二来说,若采用动态缓存自动删除到达过期时间的成功访问请求记录信息,那么步骤102和步骤103可以合并为一步,因为每个成功访问请求记录信息在到达过期时间时就会被删除,若是临界访问请求时间在距离当前访问请求时间的一个预定单位时间之前,那么到当前访问请求时间时,其记录信息已经因为到达过期时间被删除了。所以,可以将步骤102和步骤103合并修改为:
步骤301,根据用户标识查询用户针对当前网站的临界访问请求记录信息,所述临界访问请求指从最近一次成功访问请求前推预设次数后所确定的成功访问请求;若能查询到目标记录信息,则拒绝当前访问请求,反之,则响应当前访问请求。
假设,计数器采用三元组(key,timeout,value)表示。其中,key表示用户标识,timeout为访问请求的过期时间,value为取值。为了区别,总计数器中的key采用用户名加上总数等区别字样来命名,timeout为最近一次成功访问请求的到期时间,value为累积请求的次数;单次计数器中的key采用用户名与次数来命名,timeout为本次成功访问请求的到期时间,value用true,表示单次计数器存在。下面,以用户名为Tom为例,假设预定单位时间为24小时,访问请求阈值为20对本申请前述方法实施例进行说明。
若Tom在2011年4月20日12:00:00针对某个网站提出访问请求,当系统接收到访问请求后,获取用户标识“Tom”,然后查找与“Tom”对应的三元组计数器,可能出现能查找到与不能查找到的情况。
若能查找到,则将总计数器中记录的总次数减去访问请求阈值,再加1,得到一个数值。例如,总计数器为(Tom total,2011-4-20 08:00:00,80),可以得出总次数为80,那么得到的数值应为61。然后查找第61次访问请求对应的单次计数器,若不能查找到,则说明单次计数器已经被过期删除了,在距离当前访问请求时间的24小时之内,用户的成功访问请求小于20次,系统会接收当前访问请求,并建立一个新的单次计数器(Tom 81,2011-4-21 12:00:00,true),同时更新总计数器为(Tom total,2011-4-21 12:00:00,81),然后对用户当前访问请求给出响应。若能查找到单次计数器,则说明在距离当前访问请求时间的24小时之内,用户的成功访问请求至少为20次,已经达到上限,所以拒绝用户当前的访问请求。
若不能查找到,则说明用户未对该网站提出过成功访问请求或者所有的成功访问请求时间都发生在至少24小时之前,所以系统会接收当前访问请求,同时建立一个新的总计数器和单次计数器,分别为(Tom total,2011-4-21 12:00:00,1),(Tom 1,2011-4-21 12:00:00,true),然后对用户当前访问请求给出响应。
其中,对与单次计数器和总计数器的三元组数据可以采用memcached来存储,可以满足三元组的高可用性、高并发性、事务保障的要求。memcached具有如下优点:
(a)memcached的读写性能较好,因为是基于内存存储而设计的,性能会好于基于磁盘的数据库,同时没有磁盘输入/输入压力,另外采用缓存自动过期的老化机制可以大大减少存储的数据量,所以也没有必要采用存储大量数据的数据库。
(b)memcached是基于key-value的结构,增、删、改、查的效率较高,从而不需要考虑类似数据的索引的问题,同时所有修改操作都是简单的代码序列,需要实现的事务保障,因此具有较高的效率。
(c)memcached的部署方便,对环境要求低,另外memcached有自动过期的功能,对于采用过期时间定义的三元组,能很好实现自动删除过期三元组,既保证业务逻辑正确又能控制内存使用。
参照图4,示出本申请的一种网站流量控制装置实施例一,此处的装置中的各个模块是指基于计算机语言编写的计算机程序,存储于服务器或者客户端中,并通过处理器运行。网站流量控制装置包括用户标识获取模块10、临界访问请求的记录信息查询模块30、判断模块40及响应模块50。
用户标识获取模块10,用于接收用户访问请求,并获取用户标识。
临界访问请求记录信息查询模块30,用于根据用户标识来查询临界访问请求的记录信息,若能查询到,则将信息传递给判断模块40,反之,则将信息传递给响应模块50。具体的,临界访问请求记录信息查询模块30可以通过计数器来实现,例如,用三元组表示的计数器。
判断模块40,用于判断临界访问请求的请求时间是否在距离当前访问请求时间的一个预定单位时间内,并将判断结果传递给响应模块50。
响应模块50,用于根据临界访问请求的记录信息查询模块30及判断模块40传递的信息对用户访问请求作出回应。若是临界访问请求记录信息查询模块30传递的信息以及判断模块40判断出的临界访问请求时间在距离当前访问请求时间的一个预定单位时间内,那么响应用户访问请求,反之则拒绝用户访问请求。
参照图5,示出本申请的网站流量控制装置实施例二,进一步地,网站流量控制装置还包括动态缓存模块60,用于存储用户的成功访问请求记录信息,并根据访问请求的到期时间对记录信息进行老化处理。判断模块30根据动态缓存模块60的记录信息来读取相关成功访问请求的到期时间。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本申请所提供的网站流量控制方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。