一种数据流量的限制方法、装置和系统与流程

文档序号:16925769发布日期:2019-02-22 19:51阅读:212来源:国知局
一种数据流量的限制方法、装置和系统与流程

本申请涉及互联网技术领域,尤其涉及一种数据流量的限制方法、装置和系统。



背景技术:

随着互联网技术的飞速发展,越来越多的终端可以通过互联网访问服务器的数据。具体地,终端可以通过互联网向服务器发送访问请求,服务器在接收到访问请求后,可以根据访问请求,将终端访问的数据返回给终端,以便终端获得所需的数据。

在实际应用中,通常会有多个终端同时访问服务器中的同一数据,在这种情况下,当服务器瞬时接收到的访问请求量比较多时,服务器将会承受较大的数据压力,存在崩溃或宕机的风险。为了保护服务器,现有技术中可以对终端采取限流措施,以限制终端的访问请求量。然而,现有的限流方法通常具有局限性,不能有效地对终端进行限流。



技术实现要素:

本申请实施例提供一种数据流量的限制方法、装置和系统,用于解决现有的限流方法不能有效地对终端进行限流的问题。

为了解决上述技术问题,本申请是这样实现的:

第一方面,提供一种数据流量的限制方法,应用于服务器,包括:

将所述服务器与多个终端进行时间同步;

接收所述多个终端的令牌请求,所述令牌请求中包含时间标签;

根据所述时间标签,确定返回给每个所述终端的令牌的生效时间,其中,返回给不同终端的令牌的生效时间不同;

向所述多个终端分别发送携带有生效时间的令牌,以便所述多个终端分别基于接收到的令牌的生效时间发送访问请求。

第二方面,提供一种数据流量的限制装置,应用于服务器,包括:

时间同步单元,将所述服务器与多个终端进行时间同步;

接收单元,接收所述多个终端的令牌请求,所述令牌请求中包含时间标签;

确定单元,根据所述时间标签,确定返回给每个所述终端的令牌的生效时间,其中,返回给不同终端的令牌的生效时间不同;

发送单元,向所述多个终端分别发送携带有生效时间的令牌,以便所述多个终端分别基于接收到的令牌的生效时间发送访问请求。

第三方面,提供一种数据流量的限制方法,应用于终端,包括:

将所述终端与服务器以及其他终端进行时间同步;

向所述服务器发送令牌请求,所述令牌请求中包含时间标签;

接收来自所述服务器的令牌的生效时间,所述令牌的生效时间由所述服务器根据所述时间标签确定得到,所述服务器返回给不同终端的令牌的生效时间不同;

基于接收到的令牌的生效时间发送访问请求。

第四方面,提供一种数据流量的限制装置,应用于终端,包括:

时间同步单元,将所述终端与服务器以及其他终端进行时间同步;

第一发送单元,向所述服务器发送令牌请求,所述令牌请求中包含时间标签;

接收单元,接收来自所述服务器的令牌的生效时间,所述令牌的生效时间由所述服务器根据所述时间标签确定得到,所述服务器返回给不同终端的令牌的生效时间不同;

第二发送单元,基于接收到的令牌的生效时间发送访问请求。

第五方面,提供一种数据流量的限制系统,包括:服务器和多个终端,其中:

所述服务器,对所述服务器以及所述多个终端进行时间同步;

所述多个终端,向所述服务器发送令牌请求,所述令牌请求中包含时间标签;

所述服务器,接收来自所述多个终端的令牌请求;根据所述时间标签,确定返回给每个所述终端的令牌的生效时间,其中,返回给不同终端的令牌的生效时间不同;向所述多个终端分别发送携带有生效时间的令牌;

所述多个终端,接收来自所述服务器的令牌的生效时间;分别基于接收到的令牌的生效时间发送访问请求。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

本申请实施例提供的技术方案,在对终端进行限流时,服务器可以对自身以对多个终端进行时间同步。在时间同步的基础上,所述多个终端在发向服务器发送访问请求之前,可以向服务器发送令牌请求,服务器在接收到令牌请求时,可以根据令牌请求中包含的时间标签,确定返回给每个终端的令牌的生效时间,并将生效时间携带在令牌中返回给每个终端,其中,返回给不同终端的令牌的生效时间不同。这样,多个终端在基于接收到的令牌向服务器发送访问请求时,由于不同终端接收到的令牌的生效时间不同,因此,可以避免不同终端在同一时间发送访问请求,进而避免服务器的瞬时访问请求量过大,有效地对终端进行限流。

此外,本申请实施例提供的技术方案可以应用于各种分布式的数据访问场景,在这些场景中,基于本申请实施例的技术方案可以有效地对终端进行限流,从而降低服务器的数据压力,实现保护服务器的目的。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本申请的一个实施例数据流量的限制方法的流程示意图;

图2是本申请的一个实施例多个终端抢注同步时间的示意图;

图3是本申请的一个实施例数据流量的限制方法的流程示意图;

图4是本申请的一个实施例数据流量的限制方法的流程示意图;

图5是本申请的一个实施例终端等待时长的示意图;

图6是本申请的一个实施例数据流量的限制方法的场景示意图;

图7为本申请实施例提供的一种电子设备的结构示意图;

图8为本申请实施例提供的一种数据流量的限制装置的结构示意图;

图9为本申请实施例提供的一种数据流量的限制装置的结构示意图;

图10为本申请实施例提供的一种数据流量的限制系统的结构示意图。

具体实施方式

现有技术中,越来越多的终端可以通过互联网访问服务器的数据。通常,针对服务器中的同一数据,多个终端可以同时向服务器发送针对该数据的访问请求,以获得该数据。然而,当某一时刻不同终端针对同一数据的访问请求量较多时,服务器将会承受较大的数据压力,存在宕机或崩溃的风险。

例如,在某个购物应用中,针对某个商品在某个时刻会有秒杀活动,那么,在该时刻,终端的瞬时访问量会比较多,相应地,购物应用对应的服务器将会在瞬间接收到大量的访问请求,承受较大的数据压力,这种情况下,服务器很容易宕机或崩溃,导致无法提供正常的服务。

在现有技术中,为了保证服务器可以提供正常的服务,可以增加服务器的容量,例如在服务器增加用于数据处理的机器,以保证服务器在较大的数据压力下不会宕机或崩溃。然而,在实际应用中,服务器瞬时访问请求量较大的情况仅在某个时间段出现,在其他访问请求量不大的时间段,服务器的容量将会出现过剩的现象,导致资源浪费。

为了避免服务器的资源浪费,同时保证服务器在瞬时请求量较大时不会宕机或崩溃,现有技术中还可以对终端进行限流,以限制终端的访问请求量,避免服务端出现瞬时请求量较大过大的问题。

现有的限流方法通常包括令牌桶算法、漏桶算法和ratelimt算法,这三种方法在一定程度上都可以起到限流的作用。然而,在实际应用中,针对令牌桶算法,由于其允许突发数据的发送,因此,存在瞬时流量较大的问题;针对漏桶算法,由于需要定时任务补充令牌,因此,存在令牌资源浪费的问题;针对ratelimt算法,由于其仅适用于单机的场景,因此,在分布式场景中,这种算法将不能有效地起到限流作用。

由此可见,现有的限流方法各自具有一定的局限性,导致不能有效地对终端进行限流。

为了解决上述技术问题,本申请实施例提供一种数据流量的限制方法、装置和系统,该方法应用于服务器时,包括:将所述服务器与多个终端进行时间同步;接收所述多个终端的令牌请求,所述令牌请求中包含时间标签;根据所述时间标签,确定返回给每个所述终端的令牌的生效时间,其中,返回给不同终端的令牌的生效时间不同;向所述多个终端分别发送携带有生效时间的令牌,以便所述多个终端分别基于接收到的令牌的生效时间发送访问请求。

这样,多个终端在基于接收到的令牌向服务器发送访问请求时,由于不同终端接收到的令牌的生效时间不同,因此,可以避免不同终端在同一时间发送访问请求,进而避免服务器的瞬时访问请求量过大,有效地对终端进行限流。

此外,本申请实施例提供的技术方案可以应用于各种分布式的数据访问场景,在这些场景中,基于本申请实施例的技术方案可以有效地对终端进行限流,从而降低服务器的数据压力,实现保护服务器的目的。

下面结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

需要说明的是,本申请实施例中记载的令牌可以用于数据传输,具体地,当终端通过互联网发送访问请求时,首先需要获取令牌,在已获得令牌的基础上,才可以发送访问请求,反之,若终端没有令牌,则不能通过互联网发送访问请求。令牌的生效时间可以表征能够使用令牌发送访问请求的时间,即在终端获得令牌后,允许终端使用令牌发送访问请求的时间。

用于执行本申请实施例的技术方案的服务器,可以是终端在执行业务逻辑时,与终端进行数据交互的服务端,也可以是不同于该服务端的其他服务器,这里不做具体限定。当所述服务器与所述服务端不同时,所述服务器可以是日志型的key-value数据库,例如redis。

以下结合附图,详细说明本申请各实施例提供的技术方案。

图1为本申请实施例提供的一种数据流量的限制方法的流程示意图。所述方法应用于服务器,所述方法包括以下步骤。

s102:将所述服务器与多个终端进行时间同步。

在对终端进行限流时,服务器可以将自身与待限流的多个终端进行时间同步,以便统一服务器与所述多个终端的时间,这样,可以在时间同步的基础上,成功执行后续步骤,实现对终端限流的目的。

服务器在对自身以及多个终端进行时间同步时,可以判断内部是否包含时间戳,若是,则可以将该时间戳作为同步时间,并将该时间戳发送给多个终端,多个终端在接收到该时间戳后,可以分别基于该时间戳更新本地时间,以实现时间同步。

若服务器内部不包含时间戳,则可以由多个终端抢注同步时间。具体地,多个终端可以分别将各自的本地时间发送给服务器,服务器成功接收到某个终端的本地时间时,表明该终端抢注成功。

需要说明的是,为了便于多个终端抢注本地时间,本申请实施例中,服务器在多个终端发送本地时间时,可以执行单线程操作,这样,服务器仅能成功接收到其中一个终端发送的本地时间,以避免服务器同时接收到多个本地时间,导致终端抢注失败。

服务器在接收到来自其中一个终端的本地时间后,一方面可以在内部存储该本地时间,并基于该本地时间进行时间同步;另一方面可以将该本地时间发送其他终端,其他终端在接收到该本地时间后,可以基于该本地时间,分别更新各自的本地时间,以实现时间同步,具体过程请参考图2。

图2为本申请的一个实施例多个终端抢注同步时间的示意图,图2中,终端1至终端n在抢注同步时间时,可以分别向服务器发送本地时间,其中,终端1向服务器发送本地时间1,终端2向服务器发送本地时间2,……,终端n向服务器发送本地时间n。

假设终端1抢注成功,即服务器仅接收到终端1的本地时间1,那么,服务器一方面可以将本地时间1进行存储,并作为同步时间;另一方面,将本地时间1返回给终端2至终端n,终端2至终端n在接收到本地时间1后,可以将各自的本地时间更新为本地时间1,以实现时间同步。

服务器在对自身以及待限流的多个终端进行时间同步后,可以执行s104。

s104:接收所述多个终端的令牌请求,所述令牌请求中包含时间标签。

在s104中,以多个终端同时访问同一数据为例,多个终端在发送访问请求之前,可以向服务器发送携带有时间标签的令牌请求,此时,服务器可以接收到来自多个终端的令牌请求。

本实施例中,服务器接收到的令牌请求可以是多个终端同时发送的,其中,不同终端发送的令牌请求中携带的时间标签相同;此外,服务器接收到的令牌请求也可以是多个终端在不同时间发送的,其中,不同时间发送的令牌请求携带的时间标签不同,本实施例可以以服务器接收到的令牌请求由多个终端同时发送为例进行说明。

s106:根据所述时间标签,确定返回给每个所述终端的令牌的生效时间。

在s106中,服务器在接收到多个终端的令牌请求后,可以根据令牌请求,确定向每个终端返回的令牌的个数,同时,还可以基于令牌请求中携带的时间标签,确定需要返回给每个终端的令牌的生效时间,所述令牌的生效时间可以表征终端可以使用令牌发送访问请求的时间。

本实施例中,服务器返回给不同终端的令牌的生效时间不同,这样,当不同终端基于令牌的生效时间发送访问请求时,可以避免不同终端同时发送访问请求,以实现对终端的限流。

服务器在根据令牌请求中的时间标签,确定返回给每个终端的令牌的生效时间时,可以首先判断服务器是否已对限流参数进行初始化,若已对限流参数进行初始化,则可以基于限流参数以及时间标签,确定返回给每个终端的令牌的生效时间,若没有对限流参数进行初始化,则,可以首先执行对限流参数进行初始化的步骤,之后,再基于限流参数以及时间标签,确定返回给每个终端的令牌的生效时间。

所述限流参数可以包括令牌的初始数量、生成令牌的时间间隔以及渐变点中的至少一种。所述令牌的初始数量可以理解为在初始化的状态下,令牌桶(用于存储令牌,可以由服务器预先设置)中包含的令牌的数量,所述生成令牌的时间间隔可以理解为间隔多长时间生成一个令牌,所述渐变点为数值,可以表征令牌的生效时间中是否包含惩罚时间,所述惩罚时间可以表征令牌桶中的令牌数量为负时,将令牌桶中的令牌数量补充为非负时所需的时间,本实施例中,当令牌桶的令牌数量大于渐变点时,令牌的生效时间可以包含惩罚时间,反之,则不包含。

在一个典型的实施例中,在对限流参数进行初始化时,所述令牌的初始数量可以设置为5个,所述生成令牌的时间间隔可以设置为0.2秒,所述渐变点可以设置为2.5。

服务器在对限流参数进行初始化后,可以基于初始化后的限流参数生成一个标记值,这样,在判断服务器是否已对限流参数进行初始化时,可以判断服务器中是否包含该标记值,若是,则可以说明已对限流参数进行初始化,若否,则可以说明未对限流参数进行初始化。

此外,服务器在对限流参数进行初始化后,还可以将限流参数写入到lua脚本的参数变量中,以便后续服务器在确定令牌的生效时间时使用。

在已对限流参数进行初始化的基础上,服务器在根据时间标签,确定返回给每个终端的令牌的生效时间时,以其中一个目标终端为例,具体可以包括以下步骤:

首先,确定待返回的令牌的初始生效时间。

所述待返回的令牌可以理解为待返回给所述目标终端的令牌,所述初始生效时间可以理解为服务器初始为该待返回的令牌确定的生效时间,其中,当对服务器以及多个终端进行时间同步后,假设服务器中初始令牌数量不为零,则所述初始生效时间可以是服务器进行时间同步后的时间,当服务器已向一个或多个终端返回令牌,所述待返回的令牌将会发生变化,相应地,所述初始生效时间也会发生变化,具体可以是服务器在后续步骤中,根据生成令牌的时间间隔,重新确定的初始生效时间。

其次,判断所述目标终端的目标时间标签是否晚于或等于所述初始生效时间。

所述目标终端的目标时间标签为所述目标终端发送的令牌请求中包含的时间标签,若所述目标时间标签晚于所述初始生效时间,则可以说明,目标终端在令牌的初始生效时间之后发起的令牌请求,此时,服务器返回给目标终端的令牌可以即刻生效,也就是说,可以将所述目标时间标签确定为返回给目标终端的令牌的生效时间。

若所述目标时间标签等于所述初始生效时间,则可以说明,目标终端在令牌的初始生效时间时发起的令牌请求,此时,服务器返回给目标终端的令牌也可以即刻生效,也就是说,可以将所述目标时间标签确定为返回给目标终端的令牌的生效时间。

若所述目标时间标签早于所述初始生效时间,则可以说明,目标终端在令牌的初始生效时间之前发起的令牌请求,此时,服务器返回给目标终端的令牌不能即刻生效,至少等到所述初始生效时间才可以生效,也就是说,可以将所述初始生效时间确定为返回给目标终端的令牌的生效时间。

需要说明的是,本实施例中,服务器返回给目标终端的令牌的个数可能是1个,也可以是多个,当返回给目标终端的令牌个数为多个时,该多个令牌的生效时间可以视为同一个时间。

本实施例中,服务器在确定返回给目标终端的令牌的生效时间,还需要根据上述记载的生成令牌的时间间隔,确定下一个待返回的令牌的初始生效时间,其中,所述下一个待返回的令牌可以理解为待返回给其他终端的令牌。这样,可以便于根据所述下一个待返回的令牌的初始生效时间,确定返回给其他终端的令牌的生效时间。

在确定所述下一个待返回的令牌的初始生效时间时,具体地:

若返回给目标终端的令牌的生效时间为目标终端的目标时间标签,则可以计算返回给目标终端的令牌数量与生成令牌的时间间隔的乘积(以下可以由第一乘积表示),并将该第一乘积与目标终端的目标时间标签的和作为所述下一个待返回的令牌的初始生效时间。

若返回给目标终端的令牌的生效时间为返回给目标终端的令牌的初始生效时间,则可以计算所述第一乘积,并将该第一乘积与该初始生效时间作为所述下一个待返回的令牌的初始生效时间。

在确定所述下一个待返回的令牌的初始生效时间后,可以将该初始生效时间作为待返回给其他某个终端的令牌的初始生效时间,并循环执行上述s106记载的确定令牌的生效时间以及确定下一个待返回的令牌的步骤,进而可以确定返回给其他终端的令牌的生效时间。

以下将举例说明整个过程。

例如,服务端和多个终端在进行时间同步后,假设同步时间为t0,则令牌的初始生效时间可以是t0,之后,在t1时刻服务端同时接收到三个终端a、b、c的令牌请求,令牌请求中均包含时间标签t1,那么,在确定返回给三个终端的令牌的生效时间时,以依次确定返回给终端a、终端b、终端c的令牌的生效时间为例:

针对终端a,假设终端a请求一个令牌,由于时间标签t1晚于初始生效时间t0,因此,返回给终端a的一个令牌的生效时间为t1。

之后,更新下一个待返回的令牌的初始生效时间。由于返回给终端a的令牌的生效时间为终端a的时间标签t1,且返回的令牌数量为一,因此,下一个待返回的令牌的初始生效时间为t1+δt,其中,δt为生成令牌的间隔时间,t1+δt可以作为返回给终端b的令牌的初始生效时间。

针对终端b,假设终端b请求两个令牌,由于时间标签t1早于初始生效时间t1+δt,因此,返回给终端b的两个令牌的生效时间均为t1+δt。

之后,更新下一个待返回的令牌的初始生效时间。由于返回给终端b的令牌的生效时间为初始生效时间t1+δt,且返回的令牌数量为二,因此,下一个待返回的令牌的初始生效时间为t1+3δt,其中,t1+3δt可以作为返回给终端c的令牌的初始生效时间。

针对终端c,假设终端c请求一个令牌,由于时间标签t1早于初始生效时间t1+3δt,因此,返回给终端c的一个令牌的生效时间为t1+3δt。

之后,更新下一个待返回的令牌的初始生效时间。由于返回给终端c的令牌的生效时间为初始生效时间t1+3δt,且返回的令牌数量为一,因此,下一个待返回的令牌的初始生效时间为t1+4δt,其中,t1+4δt可以作为返回给其他终端的令牌的初始生效时间。

服务器在通过上述记载的方法确定返回给每个终端的令牌的生效时间后,可以执行s108。

s108:向所述多个终端分别发送携带有生效时间的令牌,以便所述多个终端分别基于接收到的令牌的生效时间发送访问请求。

本实施例中,服务器可以将每个终端请求的令牌对应返回给相应终端,其中,在将令牌返回给终端时,可以将令牌的生效时间携带在令牌中,这样,终端在获得令牌的同时,可以获得令牌的生效时间,在发送访问请求时,可以基于令牌的生效时间发送访问请求。

由于返回给不同终端的令牌的生效时间不同,因此,不同终端在基于各自接收到的令牌发送访问请求时,可以避免在同一时间发送访问请求,进而避免服务器的瞬时访问请求量过大,有效地对终端进行限流。

需要说明的是,服务器在每返回给终端一个或多个令牌后,服务器内令牌桶中的令牌数量会减少相应个数,其中,可以允许令牌桶中的令牌数量为负,当令牌桶中的令牌数量为负时,当前返回给终端的令牌的生效时间不会变化,即不会惩罚当前请求令牌的终端,但是,会惩罚下一个请求令牌的终端,即下一个待返回的令牌的初始生效时间将会延长。

仍以上述三个终端a、b和c为例,假设令牌桶中的初始令牌数量为5个,终端a申请的令牌个数为6,大于令牌桶中的令牌数量,那么,服务器在确定返回终端a的令牌的生效时间时,该生效时间仍为t1,即不惩罚终端a,但是,在确定下一个待返回的令牌的初始生效时间时,该初始生效时间将会变为t1+6δt,该初始生效时间中包含对-1个令牌的惩罚时间。在确定返回给终端b的令牌的生效时间时,该生效时间将变为t1+6δt,即延长了返回给终端b的令牌的生效时间,将终端b进行惩罚。

为了便于理解服务器对终端进行限流的整个过程,可以参见图3。图3为本申请的一个实施例数据流量的限制方法的流程示意图,具体包括以下步骤:

s301:判断服务器中是否包含时间戳。

所述时间戳可以用于对服务器以及多个终端进行时间同步。若服务器中包含时间戳,则执行s302,若不包含,则执行s303。

s302:将所述时间戳发送给多个终端。

将时间戳发送给多个终端之和,多个终端可以分别基于所述时间戳更新本地时间,以实现服务器与多个终端之间的时间同步。

在执行s302后,可以执行s305。

s303:接收来自其中一个终端的本地时间。

在s303中,多个终端可以抢注同步时间,并分别向服务器发送本地时间,服务器可以成功接收其中一个终端的本地时间。

s304:存储所述本地时间,并将所述本地时间发送给其他终端。

服务器存储起接收到的本地时间后,可以实现与所述其中一个终端的时间同步,在将接收到的本地时间发送给其他终端后,其他终端可以基于该本地时间更新各自的本地时间,实现与服务器以及所述其中一个终端的时间同步。

在执行s304后,可以执行s305。

s305:接收所述多个终端的令牌请求,所述令牌请求中包含时间标签。

这里以同时接收到多个终端的令牌请求为例,多个终端发送的令牌请求中包含的时间标签相同。

s306:判断是否已对限流参数进行初始化。

所述限流参数可以包括初始令牌数量、生成令牌的时间间隔、渐变点中的至少一种。

若已对限流参数进行初始化,则执行s308,否则,执行s307。

s307:对所述限流参数进行初始化。

在执行s307后,可以执行s308。

s308:针对其中一个目标终端,确定待返回的令牌的初始生效时间。

所述初始生效时间与图1所示实施例中s106记载的初始生效时间相同,这里不再重复描述。所述初始生效时间不一定是令牌最终的生效时间。

s309:判断所述目标终端的目标时间标签是否晚于或等于所述初始生效时间。

若是,则执行s310,若否,则执行s311。

s310:将所述目标时间标签确定为返回给所述目标终端的令牌的生效时间。

在执行s310后,可以执行s312。

s311:将所述初始生效时间确定为返回给所述目标终端的令牌的生效时间。

在执行s311后,可以执行s312。

s312:根据所述生成令牌的时间间隔,确定下一个待返回的令牌的初始生效时间。

所述生成令牌的时间间隔为限流参数,可以在初始化限流参数时确定得到。s312的具体实现可以参见图1所示实施例中s106的相应步骤的具体实现,这里不再重复描述。所述下一个待返回的令牌的初始生效时间可以视为待返回给其他终端的令牌的生效时间。

在执行s312后,可以循环执行上述s308至s312,直至确定返回给每个终端的令牌的生效时间。其中,返回给不同终端的令牌的生效时间不同。

s313:向所述多个终端分别发送携带有生效时间的令牌。

本实施例中,服务器每确定返回给一个终端的令牌的生效时间后,就可以向该终端返回携带有生效时间的令牌。终端在接收到令牌后,可以基于令牌的生效时间发送访问请求。

本申请实施例提供的技术方案,在对终端进行限流时,服务器可以对自身以对多个终端进行时间同步。在时间同步的基础上,所述多个终端在发向服务器发送访问请求之前,可以向服务器发送令牌请求,服务器在接收到令牌请求时,可以根据令牌请求中包含的时间标签,确定返回给每个终端的令牌的生效时间,并将生效时间携带在令牌中返回给每个终端,其中,返回给不同终端的令牌的生效时间不同。这样,多个终端在基于接收到的令牌向服务器发送访问请求时,由于不同终端接收到的令牌的生效时间不同,因此,可以避免不同终端在同一时间发送访问请求,进而避免服务器的瞬时访问请求量过大,有效地对终端进行限流。

此外,本申请实施例提供的技术方案可以应用于各种分布式的数据访问场景,在这些场景中,基于本申请实施例的技术方案可以有效地对终端进行限流,从而降低服务器的数据压力,实现保护服务器的目的。

图4为本申请的一个实施例数据流量的限制方法的流程示意图,本实施例的执行主体可以是图1所示实施例中多个终端中的某个终端,所述方法包括以下步骤。

s402:将所述终端与服务器以及其他终端进行时间同步。

在s402中,终端在启动限流后,可以将自身与服务器以及其他终端进行时间同步。其中,终端在启动限流时,可以确定终端需要访问的数据,并建立与服务器之间的连接。

终端在将其与服务器以及其他终端进行时间同步时,可以向服务器发送时间请求,所述时间请求用于请求服务器中的时间戳。服务器在接收到时间请求后,若内部包含时间戳,则可以将时间戳返回给终端,终端在接收到时间戳后,可以根据时间戳更新本地时间,实现与服务器之间的时间同步。此外,服务器还可以将时间戳发送给其他终端,其他终端在接收到时间戳后,可以基于时间戳更新各自的本地时间,实现与终端以及服务器的时间同步。

若服务器中不包含时间戳,则该终端可以和其他终端抢注同步时间。具体地,该终端与其他终端可以同时向服务器发送本地时间,此时,服务器可以执行单线程操作,即服务器仅会成功接收其中一个终端的本地时间。

若服务器接收到的是该终端的本地时间,则服务器可以将该本地时间存储并发送给其他终端,以便服务器和其他终端基于该本地时间进行时间同步;若服务器接收到的是其他终端中某个终端的本地时间,则服务器可以将该本地时间作为同步时间发送给该终端,这样,该终端可以根据接收到的同步时间更新本地时间,实现时间同步。具体实现过程可以参见上述图2。

终端在将其与服务器以及其他终端进行时间同步后,可以执行s404。

s404:向所述服务器发送令牌请求,所述令牌请求中包含时间标签。

本实施例中,终端在与其他终端同时访问同一数据之前,可以与其他终端同时向服务器发送令牌请求,其中,由于已进行时间同步,因此每个终端发送的令牌请求中包含的时间标签相同。

应理解,若终端与其他终端在不同时间访问同一数据,也可以与其他终端在不同时间发送令牌请求,其中,不同时间发送的令牌请求中包含的时间标签不同,本实施例可以以多个终端同时向服务器发送令牌请求为例进行说明。

s406:接收来自所述服务器的令牌的生效时间。

终端向服务器发送令牌请求后,服务器可以基于令牌请求中的时间标签,确定返回给终端的令牌的生效时间,具体实现方式可以参见图1所示实施例中相应步骤的具体实现,这里不再重复说明。

服务器在确定返回给终端的令牌的生效时间后,可以向终端发送携带有生效时间的令牌,这样,终端可以接收到服务器返回的令牌的生效时间。

s408:基于接收到的令牌的生效时间发送访问请求。

在s408中,终端在向存储有数据的服务端发送访问请求时,可以基于接收到的令牌的生效时间进行发送,其中,所述服务端可以是所述服务器,也可以不同于所述服务器。

终端在基于接收到的令牌的生效时间发送访问请求时,首先,可以根据终端发送令牌请求时的时间标签以及令牌的生效时间,确定一个差值,该差值可以视为终端需要等待的时长,在该时长中,终端可以处于休眠状态,在休眠状态,终端可以不发送访问请求;其次,在等待时长结束后,终端可以基于接收到的令牌,发送访问请求。

例如,终端发送令牌请求时的时间标签为t1,那么,若终端接收到的令牌的生效时间也为t1,则终端可以直接发送访问请求,无需等待;若终端接收到的令牌的生效时间为t1+3δt,则终端需要等待3δt的时长,待等待时长结束后,才可以发送访问请求。

需要说明的是,在实际应用中,终端在接收到服务器返回的令牌的过程中,终端的等待时长会有一个从大到小并趋于平稳的过程,如图5所示。

图5中,横坐标n代表终端向服务器请求令牌的次数,纵坐标t代表终端的等待时长,单位为秒,其中,生成令牌的时间间隔可以假设为0.2秒。图5所示的终端等待时长的变化过程如下:

当终端第一次请求令牌时,假设当前待返回的令牌的初始生效时间与终端请求令牌的时间相同,那么,终端接收到令牌后,等待时长为0,终端可以立刻发送访问请求。

当终端第二次请求令牌时,假设但下一个令牌并未生效,即此次令牌的请求时间早于下一个待返回的令牌的初始生效时间,那么,终端接收到令牌后,需要等待一定的时长,由于存在缓冲期,因此,等待时长会被延长一定的时间,终端的等待时长可以是0.876297秒。

当终端再次请求令牌时,由于服务器中的令牌不断被申请,因此,服务器已经被缓缓加热,由冷启动缓慢变为热启动,对应线上情景为,服务器刚启动时,缓存并未被加载到内存中,随着不断的令牌请求,缓存不断被填满,因此服务器可以承受最高的qps(即每秒产生5个令牌,可以接收5个令牌请求),终端的等待时长将会保持在一个稳定值。

如图5所示,终端在第三次请求令牌并接收到令牌后,等待时长将会减少为0.635359秒,在第四次请求令牌并接收到令牌后,等待时长将会进一步减少为0.396591秒,在第五次请求令牌时,服务器可以达到最大qps,此时,终端在接收到令牌后,等待时长将变为0.210823秒。之后,终端再请求令牌并接收返回的令牌时,等待时长将会稳定在0.2秒左右。这样,可以有效地对终端进行限流。

之后,当连续的令牌请求中断之后,服务器会重新进入预热的阶段,当终端再次请求令牌并接收到令牌后,等待时长将会如图5所示。

还需要说明的是,基于图1所示实施例记载的内容可知,当令牌桶中令牌数量出现负数时,令牌的生效时间可以包含两部分,一部分是生成所需令牌的时间,另一部分是对令牌数量为负数时的惩罚时间。当令牌的生效时间包含惩罚时间时,终端在不断接收服务器返回的令牌的过程中,当等待时长稳定后,等待时长将会包含惩罚时间,也就是说,图5所示的稳定状态下的等待时长将会增加,对应的曲线将会上移。

在本实施例中,终端的等待时长稳定后,该等待时长是否包含惩罚时间,可以取决于图1所示实施例中记载的渐变点,当渐变点小于或等于设定值时,等待时长不包含惩罚时间,反之,则包含惩罚时间。

例如,当生产令牌的时间间隔为0.2秒时,每秒可以生成5个令牌,此时恶意设置渐变点为2.5,这样,当令牌桶中的令牌数量小于等于2.5时,终端的等待时长中可以不包含惩罚时间,反之,则包含惩罚时间。

本申请实施例提供的技术方案,终端在启动限流后,可以与服务器和其他终端进行时间同步,在时间同步的基础上,可以向服务器发送包含时间标签的令牌请求,服务器根据令牌请求的包含的时间标签确定返回给终端的令牌的生效时间,这样,终端在发送访问请求时,可以基于接收到的令牌的生效时间进行发送。由于服务器返回给不同终端的令牌的生效时间不同,因此,终端可以避免与其他终端同时发送访问请求,进而避免服务器的瞬时访问请求量过大,有效地对终端进行限流。

图6为本申请的一个实施例数据流量的限制方法的场景示意图。

图6中,终端1至终端n在于服务器1进行时间同步的基础上,可以在t1时刻同时向服务器1发送令牌请求,服务器在接收到令牌请求后,根据令牌请求中包含的时间标签确定返回给各终端的令牌的生效时间,并将各生效时间携带在令牌中分别发送给终端1至终端n,其中,服务器1向终端1至终端n返回的令牌的生效时间依次为t1、t2、……、tn。

假设t1、t2、……、tn从早到晚的顺序依次为t1、t2、……、tn,那么,终端1至终端n在请求服务器2中的同一数据时,终端1可以在t1时刻想服务器2发送访问请求,终端2需要等待(t2-t1)的时长后向服务器2发送访问请求,……,终端n需要等待(tn-t1)的时长后向服务器2发送访问请求。这样,可以避免终端1至终端n同时向服务器2发送针对同一数据的访问请求,避免服务器2的瞬时访问请求量过大,从而有效地对各终端进行限流。

需要说明的是,图6中,服务器1与服务器2为不同的服务器,在其他实现方式中,服务器1还可以与服务器2为同一个服务器。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

图7是本申请的一个实施例电子设备的结构示意图。请参考图7,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(random-accessmemory,ram),也可能还包括非易失性存储器(non-volatilememory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。

处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是isa(industrystandardarchitecture,工业标准体系结构)总线、pci(peripheralcomponentinterconnect,外设部件互连标准)总线或eisa(extendedindustrystandardarchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。

处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成数据流量的限制装置。

当处理器应用于服务器时,处理器,执行存储器所存放的程序,并具体用于执行以下操作:

将所述服务器与多个终端进行时间同步;

接收所述多个终端的令牌请求,所述令牌请求中包含时间标签;

根据所述时间标签,确定返回给每个所述终端的令牌的生效时间,其中,返回给不同终端的令牌的生效时间不同;

向所述多个终端分别发送携带有生效时间的令牌,以便所述多个终端分别基于接收到的令牌的生效时间发送访问请求。

当处理器应用于终端时,处理器,执行存储器所存放的程序,并具体用于执行以下操作:

将所述终端与服务器以及其他终端进行时间同步;

向所述服务器发送令牌请求,所述令牌请求中包含时间标签;

接收来自所述服务器的令牌的生效时间,所述令牌的生效时间由所述服务器根据所述时间标签确定得到,所述服务器返回给不同终端的令牌的生效时间不同;

基于接收到的令牌的生效时间发送访问请求。

上述如本申请图7所示实施例揭示的数据流量的限制装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。

该电子设备还可执行图1、图3和图4的方法,并实现数据流量的限制装置在图1、图3和图4所示实施例的功能,本申请实施例在此不再赘述。

当然,除了软件实现方式之外,本申请的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

本申请实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1和图3所示实施例的方法,并具体用于执行以下操作:

将所述服务器与多个终端进行时间同步;

接收所述多个终端的令牌请求,所述令牌请求中包含时间标签;

根据所述时间标签,确定返回给每个所述终端的令牌的生效时间,其中,返回给不同终端的令牌的生效时间不同;

向所述多个终端分别发送携带有生效时间的令牌,以便所述多个终端分别基于接收到的令牌的生效时间发送访问请求。

该指令当被包括多个应用程序的便携式电子设备执行时,还能够使该便携式电子设备执行图4所示实施例的方法,并具体用于执行以下操作:

将所述终端与服务器以及其他终端进行时间同步;

向所述服务器发送令牌请求,所述令牌请求中包含时间标签;

接收来自所述服务器的令牌的生效时间,所述令牌的生效时间由所述服务器根据所述时间标签确定得到,所述服务器返回给不同终端的令牌的生效时间不同;

基于接收到的令牌的生效时间发送访问请求。

图8为本申请实施例提供的一种数据流量的限制装置的结构示意图,所述装置可以应用于服务器。请参考图8,在一种软件实施方式中,所述装置可以包括:时间同步单元81、接收单元82、确定单元83和发送单元84,其中:

时间同步单元81,将所述服务器与多个终端进行时间同步;

接收单元82,接收所述多个终端的令牌请求,所述令牌请求中包含时间标签;

确定单元83,根据所述时间标签,确定返回给每个所述终端的令牌的生效时间,其中,返回给不同终端的令牌的生效时间不同;

发送单元84,向所述多个终端分别发送携带有生效时间的令牌,以便所述多个终端分别基于接收到的令牌的生效时间发送访问请求。

可选地,所述时间同步单元81,将所述服务器与多个终端进行时间同步,包括:

判断所述服务器中是否包含时间戳;

若是,则将所述时间戳发送给所述多个终端,以便所述多个终端分别基于所述时间戳进行时间同步;

若否,则接收来自其中一个终端的本地时间;存储所述本地时间,并将所述本地时间发送给其他终端,以便所述服务器以及所述其他终端分别基于所述本地时间进行时间同步。

可选地,所述确定单元83,根据所述时间标签,确定返回给每个所述终端的令牌的生效时间,包括:

判断所述服务器是否已对限流参数进行初始化,所述限流参数包括初始令牌数量、生成令牌的时间间隔、渐变点中的至少一种;

若是,则根据所述时间标签,确定返回给每个所述终端的令牌的生效时间。

可选地,所述确定单元83,根据所述时间标签,确定返回给每个所述终端的令牌的生效时间,包括:

针对其中一个目标终端,执行以下操作:

确定待返回的令牌的初始生效时间;

判断所述目标终端的目标时间标签是否晚于或等于所述初始生效时间;

若是,则将所述目标时间标签确定为返回给所述目标终端的令牌的生效时间;

若否,则将所述初始生效时间确定为返回给所述目标终端的令牌的生效时间。

可选地,所述确定单元83,在确定返回给所述目标终端的令牌的生效时间后,还根据所述生成令牌的时间间隔,确定下一个待返回的令牌的初始生效时间。

可选地,所述确定单元83,根据所述生成令牌的时间间隔,确定下一个待返回的令牌的初始生效时间,包括:

若将所述目标时间标签确定为返回给所述目标终端的令牌的生效时间,则将第一乘积与所述目标时间标签的和确定为所述下一个待返回的令牌的初始生效时间,所述第一乘积为所述目标终端请求的令牌数量与所述生成令牌的时间间隔的乘积;

若将所述初始生效时间确定为返回给所述目标终端的令牌的生效时间,则将所述第一乘积与所述初始生效时间的和确定为所述下一个待返回的令牌的初始生效时间。

本申请实施例提供的数据流量的限制装置还可执行图1和图3的方法,并实现数据流量的限制装置在图1和图3所示实施例的功能,本申请实施例在此不再赘述。

图9为本申请实施例提供的一种数据流量的限制装置的结构示意图,所述装置可以应用于终端。请参考图9,在一种软件实施方式中,所述装置可以包括:时间同步单元91、第一发送单元92、接收单元93和第二发送单元94,其中:

时间同步单元91,将所述终端与服务器以及其他终端进行时间同步;

第一发送单元92,向所述服务器发送令牌请求,所述令牌请求中包含时间标签;

接收单元93,接收所述服务器返回的令牌的生效时间,所述令牌的生效时间由所述服务器根据所述时间标签确定得到,所述服务器返回给不同终端的令牌的生效时间不同;

第二发送单元94,基于接收到的令牌的生效时间发送访问请求。

可选地,所述时间同步单元91,将所述终端与服务器以及其他终端进行时间同步,包括:

向所述服务器发送时间请求;接收来自所述服务器的时间戳;根据所述时间戳进行时间同步;或,

向所述服务器发送本地时间,所述本地时间用于所述服务器以及所述其他终端进行时间同步;或,

接收来自所述服务器的同步时间,所述同步时间为所述其他终端中某个终端的本地时间;根据所述同步时间进行时间同步。

可选地,所述第二发送单元94,基于接收到的令牌的生效时间发送访问请求,包括:

根据所述时间标签以及所述令牌的生效时间,确定等待时长;

在所述等待时长结束后,基于接收到的令牌发送访问请求。

本申请实施例提供的数据流量的限制装置还可执行图4的方法,并实现数据流量的限制装置在图4所示实施例的功能,本申请实施例在此不再赘述。

图10为本申请的一个实施例数据流量的限制系统的结构示意图。请参考图10,所述系统可以包括:服务器101和多个终端102(图10仅示出了一个),,其中:

所述服务器101,对所述服务器101以及所述多个终端102进行时间同步;

所述多个终端102,向所述服务器101发送令牌请求,所述令牌请求中包含时间标签;

所述服务器101,接收来自所述多个终端102的令牌请求;根据所述时间标签,确定返回给每个所述终端102的令牌的生效时间,其中,返回给不同终端102的令牌的生效时间不同;向所述多个终端102分别发送携带有生效时间的令牌;

所述多个终端102,接收来自所述服务器101的令牌的生效时间;分别基于接收到的令牌的生效时间发送访问请求。

本实施例中,所述服务器101的作用与图1和图3所示实施例中记载的服务器的作用相同,所述服务器101执行的各步骤的具体实现可以参见图1和图3所示实施例中相应步骤的具体实现,这里不再重复说明。

所述终端102的作用与图4所示实施例中记载的终端的作用相同,所述终端102执行的各步骤的具体实现可以参见图4所示实施例中相应步骤的具体实现,这里也不再重复说明。

总之,以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1