限流方法、装置、计算机设备和存储介质与流程

文档序号:15197699发布日期:2018-08-19 01:18阅读:170来源:国知局
本申请涉及计算机
技术领域
:,特别是涉及一种限流方法、装置、计算机设备和存储介质。
背景技术
::为了防止某一服务器访问量过大而导致系统瘫痪,常常采用限流的方式来对服务器进行保护。传统的限流方式如果发现限流参数不合适需要调整时,则需要重启nginx服务器,导致处理效率较低。技术实现要素:基于此,有必要针对上述技术问题,提供了一种不需要重启nginx服务器,提高限流效率的限流方法、装置、计算机设备和存储介质。一种限流方法,所述方法包括:nginx服务器根据预设的规则定时查找高速缓存cache里面是否存在当前限流策略标识和相应的用户解析文件标识,若否,则从etcd服务器中读取当前限流策略标识和相应的用户解析文件标识;根据所述当前限流策略标识和用户解析文件标识在内存中查找是否存在与所述当前限流策略标识对应的限流策略以及用户解析文件标识对应的用户解析文件;当内存中不存在所述限流策略和用户解析文件时,则在所述etcd服务器中查找所述当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中;根据所述限流策略和所述用户解析文件进行限流处理。在其中一个实施例中,所述当内存中不存在所述限流策略和用户解析文件时,则在所述etcd服务器中查找所述当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中的步骤包括:当内存中不存在所述限流策略和用户解析文件时,则通过加载json的方式将在etcd服务器中的以json格式存在的限流策略和用户解析文件通过lua加载到内存并转换为table的形式进行存储。在其中一个实施例中,将内存中以table形式存在的限流策略转换为字符串的形式存储到高速缓存cache中。在其中一个实施例中,所述方法还包括:nginx服务器接收用户请求,所述用户请求中携带有用户信息;根据所述用户解析文件对所述用户信息进行解析,得到用户特征;根据所述用户特征从所述限流策略中获取与所述用户特征对应的限流参数;根据所述限流参数对所述用户请求进行限流处理。在其中一个实施例中,所述限流参数包括限流类型和容量;所述根据所述限流参数对所述用户请求进行限流处理的步骤包括:当所述限流类型为令牌类型时,则获取限流参数中包含的更新速率,根据所述容量和更新速率的比值计算得到令牌的失效时间;根据所述失效时间和所述更新速率实时更新令牌桶中的令牌数;根据用户请求对应的当前时间获取所述令牌桶中剩余的令牌数;当剩余的令牌数为0时,则拒绝所述用户请求。在其中一个实施例中,所述限流参数包括限流类型和容量;所述根据所述限流参数对所述用户请求进行限流处理的步骤包括:当所述限流类型为并发类型时,实时统计已记录的用户请求数;若已记录的用户请求数等于所述容量,则拒绝所述用户请求。在其中一个实施例中,所述根据所述限流参数对所述用户请求进行限流处理的步骤包括:将所述限流参数发送给redis服务器,指示所述redis服务器根据所述限流参数判断是否对所述用户请求放行,并将是否放行的结果返回;接收redis服务器返回的结果,根据所述结果进行限流处理。一种限流系统,所述系统包括:etcd服务器,用于接收上传的限流策略以及对应的用户解析文件并进行存储;nginx服务器,用于根据预设的规则定时查找高速缓存cache里面是否存在当前限流策略标识和相应的用户解析文件标识,若否,则从etcd服务器中读取当前限流策略标识和相应的用户解析文件标识;所述nginx服务器还用于根据所述当前限流策略标识和用户解析文件标识在内存中查找是否存在与所述当前限流策略标识对应的限流策略以及用户解析文件标识对应的用户解析文;当内存中不存在所述限流策略和用户解析文件时,则在所述etcd服务器中查找所述当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中;所述nginx服务器还用于根据所述限流策略和所述用户解析文件进行限流处理。在其中一个实施例中,所述nginx服务器还用于当内存中不存在所述限流策略和用户解析文件时,则通过加载json的方式将在etcd服务器中的以json格式存在的限流策略和用户解析文件通过lua加载到内存并转换为table的形式进行存储。在其中一个实施例中,所述nginx服务器还用于将内存中以table形式存在的限流策略转换为字符串的形式存储到高速缓存cache中。在其中一个实施例中,所述nginx服务器还用于接收用户请求,所述用户请求中携带有用户信息,根据所述用户解析文件对所述用户信息进行解析,得到用户特征;根据所述用户特征从所述限流策略中获取与所述用户特征对应的限流参数;根据所述限流参数对所述用户请求进行限流处理。在其中一个实施例中,所述限流参数包括限流类型和容量;所述nginx服务器还用于当所述限流类型为令牌类型时,则获取限流参数中包含的更新速率,根据所述容量和更新速率的比值计算得到令牌的失效时间;根据所述失效时间和所述更新速率实时更新令牌桶中的令牌数;根据用户请求对应的当前时间获取所述令牌桶中剩余的令牌数;当剩余的令牌数为0时,则拒绝所述用户请求。在其中一个实施例中,所述限流参数包括限流类型和容量;;所述nginx服务器还用于当所述限流类型为并发类型时,实时统计已记录的用户请求数;若已记录的用户请求数等于所述容量,则拒绝所述用户请求。在其中一个实施例中,所述nginx服务器还用于将所述限流参数发送给redis服务器;所述系统还包括:redis服务器,用于根据所述限流参数判断是否对所述用户请求放行,并将是否放行的结果返回给nginx服务器;所述nginx服务器还用于接收redis服务器返回的结果,根据所述结果进行限流处理。一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述限流方法。一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述限流方法。上述限流方法、系统、计算机设备及存储介质,当需要新增限流策略时,只需要将新增的限流策略以及对应的用户解析文件上传到etcd服务器,nginx服务器当需要使用新增的限流策略和用户解析文件时,则从etcd服务器中查找对应的新增限流策略和用户解析文件,然后通过lua加载到nginx服务器的内存中,之后根据新增的限流策略进行限流处理。在这个过程中,当需要新增限流策略时,只需要将限流策略和相应的用户解析文件上传到etcd服务器,nginx服务器能够动态的从etcd服务器中加载新的限流策略和用户解析文件到内存中,不需要reload和重启nginx服务器,简单易操作,节省时间,从而提高了相应的限流效率。附图说明图1为一个实施例中限流方法的应用环境图;图2为一个实施例中限流方法的流程图;图3为另一个实施例中限流方法的流程图;图4为一个实施例中进行限流处理的方法流程图;图5为另一个实施例中进行限流处理的方法流程图;;图6为一个实施例中限流系统的结构框图;图7为另一个实施例中限流系统的结构框图;图8为一个实施例中计算机设备的内部结构图。具体实施方式为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。图1为一个实施例中限流方法的应用环境图。参照图1,该限流方法应用于限流系统。该限流系统包括:终端102,nginx服务器104和etcd服务器106;其中,终端102通过网络与nginx服务器104进行通信,nginx服务器104通过网络与etcd服务器106进行通信。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,nginx服务器104、etcd服务器106可以用独立的服务器或者是多个服务器组成的服务器集群来实现。首先,终端102向nginx服务器104发送用户请求,nginx服务器104接收到终端102发送的访问请求后,查找高速缓存cache里面是否存在当前限流策略标识和相应的用户解析文件标识,若否,则从etcd服务器106中读取当前限流策略标识和相应的用户解析文件标识;根据所述当前限流策略标识和用户解析文件标识在内存中查找是否存在与所述当前限流策略标识对应的限流策略以及用户解析文件标识对应的用户解析文件;当内存中不存在所述限流策略和用户解析文件时,则在所述etcd服务器106中查找所述当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中,然后根据所述限流策略和所述用户解析文件对所述用户请求进行限流处理。在一个实施例中,如图2所示,提供了一种限流方法,以该方法应用于图1中的nginx服务器104为例进行说明,包括以下步骤:步骤202,nginx服务器根据预设的规则定时查找高速缓存cache里面是否存在当前限流策略标识和相应的用户解析文件标识,若是,则进入步骤206,若否,则进入步骤204。其中,nginx(enginex)服务器是一个高性能的代理服务器。限流策略标识用于唯一标识一个限流策略,因为限流策略可能有多个,当前限流策略标识是指当前使用的限流策略对应的标识。用户解析文件标识用于唯一标识一个用户解析文件。其中,限流策略中记载了用户特征与限流参数的对应关系。用户解析文件用于对用户请求中包含的用户信息进行解析,解析出用户特征。然后根据限流策略确定出与用户特征对应的限流参数,最后根据限流参数对用户请求进行具体的限流处理。所以每个限流策略都对应有相应的用户解析文件,即限流策略和用户解析文件是成对出现的。一般来说,在nginx服务器的高速缓存cache(高速缓存存储器)中会存储有当前限流策略标识,但是如果需要更新限流策略,那么首先要清空高速缓存cache里面之前的内容,也就是说,如果要使用新的限流策略,则需要清除cache里面之前的限流策略标识,即当第一次使用新的限流策略时,cache里面是不存在限流策略标识的。其中,cache里面的内容的清除可以采用专门的清空机制,即设置一个清空cache里面内容的接口,通过该接口进行内容的清除。还可以为cache里面的内容设置时效,比如,如果超过1分钟没有使用里面的限流策略标识,则自动清除cache里面的限流策略标识。这里并不对如何清空cache里面的内容作限制。具体地,nginx服务器根据预设的规则定时(比如,设置每隔3秒查找一次)查找cache里面是否存在限流策略标识,若不存在,则很可能是更换了当前限流策略。而当前限流策略是在etcd服务器中设置的,所以,如果cache里面不存在当前限流策略标识,则需要nginx服务器从etcd服务器中预设的位置读取当前限流策略标识。步骤204,从etcd服务器中读取当前限流策略标识和相应的用户解析文件标识。其中,etcd服务器是一种高可用的存储服务器。当前限流策略标识和相应的用户解析文件标识是在etcd服务器中设置的,所以如果高速缓存cache里面不存在当前限流策略标识和相应的用户解析文件标识,则需要nginx服务器从etcd服务器中预设的位置读取当前限流策略标识和相应的用户解析文件标识。步骤206,根据当前限流策略标识和用户解析文件标识在内存中查找是否存在与当前限流策略标识对应的限流策略以及用户解析文件标识对应的用户解析文件,若不存在,则进入步骤208,若存在,则进入步骤210。其中,nginx服务器获取到当前限流策略标识和用户解析文件标识后,首先,根据该当前限流策略标识和相应的用户解析文件标识查找内存中是否存在与当前限流策略标识对应的限流策略以及与用户解析文件标识对应的用户解析文件,如果不存在,则说明该当前限流策略标识对应的限流策略为新增的限流策略,由于每种限流策略需要配置相应的用户解析文件,所以用户解析文件也是相应新增的用户解析文件。在一个实施例中,限流策略是以json格式(一种存储格式)存在于etcd服务器的,相应的用户解析文件是以字符串格式存在于etcd服务器的。具体地,首先通过调用适配层从etcd服务器中读取用户解析文件和限流策略,然后由适配层将用户解析文件和限流策略都转换为json格式,之后通过lua将json格式的用户解析文件和限流策略转换为table格式存储到nginx服务器的内存中。具体地,当需要新增限流策略时,通过后台管理页面直接将限流策略和相应的用户解析文件上传到etcd服务器。步骤208,在etcd服务器中查找当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中,其中,lua是嵌入到nginx服务器配置文件中的动态脚本语言。其中,当nginx服务器内存中不存在当前限流策略和相应的用户解析文件时,则需要在etcd服务器中查找与当前限流策略标识对应的限流策略以及和用户解析文件标识对应的用户解析文件,然后通过lua加载到nginx服务器的内存中,其中,lua是一个可以嵌入到nginx服务器配置文件中的动态脚本语言。步骤210,根据限流策略和用户解析文件进行限流处理。其中,在获取到与当前限流策略标识对应的限流策略以及相应的用户解析文件后,就可以对用户请求进行限流处理。具体地,当接收到用户请求后,提取用户请求中的用户信息,利用用户解析文件提取用户信息中包含的用户特征,然后确定与该用户特征对应的限流参数。举个例子,如果限流策略是根据ip信息进行限流的,即存储的是ip信息和限流参数的关系,那么用户解析文件将用户请求中ip信息解析出来后,就可以根据ip信息获取相应的限流参数,然后根据限流参数进行相应的限流处理。限流参数中包含有限流类型、容量等信息,根据限流参数就可以对用户请求进行限流处理,即判断是否对用户请求放行。如果超过了当前的访问阈值,则拒绝请求,如果没有超过当前的访问阈值,则放行,从而达到保护服务器的目的。上述限流方法,当需要新增限流策略时,只需要将新增的限流策略以及对应的用户解析文件上传到etcd服务器,nginx服务器当需要使用新增的限流策略和用户解析文件时,则从etcd服务器中查找对应的新增限流策略和用户解析文件,然后通过lua加载到nginx服务器的内存中,之后根据新增的限流策略进行限流处理。在这个过程中,当需要新增限流策略时,只需要将限流策略和相应的用户解析文件上传到etcd服务器,nginx服务器能够动态的从etcd服务器中加载新的限流策略和用户解析文件到内存中,不需要reload和重启nginx服务器,简单易操作,节省时间,从而提高了相应的限流效率。在一个实施例中,当内存中不存在限流策略和用户解析文件,则在etcd服务器中查找当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中的步骤包括:当内存中不存在限流策略和用户解析文件时,则通过加载json的方式将在etcd服务器中的以json格式存在的限流策略和用户解析文件通过lua加载到内存并转换为table的形式进行存储。其中,限流策略和用户解析文件是以json(javascriptobjectnotation)格式存在于etcd服务器的。当nginx服务器的内存中不存在限流策略和用户解析文件时,通过加载json的方式将在etcd服务器中的以json格式存在的限流策略和用户解析文件通过lua加载到内存并转换为table的形式进行存储。这样nginx服务器就可以直接调用用户解析文件对用户请求进行解析,然后根据限流策略得到与用户请求对应的限流参数,根据限流参数进行限流处理。在一个实施例中,上述限流方法还包括:将内存中以table形式存在的限流策略转换为字符串的形式存储到高速缓存cache中。其中,为了能够快速地获取到与用户请求对应的限流参数,将在内存中以table形式存在的限流策略转换字符串的形式存储到高速缓存cache中。这样当确定与用户请求对应的用户特征后,就可以快速根据高速缓存cache中的限流策略得到与用户特征对应的限流参数。如图3所示,在一个实施例中,上述限流方法还包括:步骤212,nginx服务器接收用户请求,用户请求中携带有用户信息。其中,用户信息包括ip信息(internetprotocoladdress,ip地址)、uid(useridentification,用户标识符)信息、url(uniformresourcelocator,统一资源定位符)信息和城市信息中的至少一种。步骤214,根据用户解析文件对用户信息进行解析,得到用户特征。其中,用户解析文件用于对用户信息进行解析,解析出与限流策略相关的用户特征。由于用户信息中的用户特征并不是直接展示出来的,所以需要通过用户解析文件对用户信息进行解析,解析出用户特征。比如,用户请求中包含有ip信息。但是接受到用户请求后,并不会直接获取到ip信息,需要有专门的解析文件将里面包含的ip信息解析出来。解析出来的ip信息即为提取的用户特征。当然,也可以选择城市信息、url信息以及uid信息等作为用户特征,只不过针对不同的用户特征需要设置对应的用户解析文件。需要说明的是,用户特征的提取是与限流策略相关的,如果限流策略中涉及到的用户特征为url信息,那么相应的解析出来的用户特征也是url信息。在另一个实施例中,限流策略中涉及到的用户特征可以有多种,这样提取到的用户特征也对应有多种。步骤216,根据用户特征从限流策略中获取与用户特征对应的限流参数。其中,在获取到用户特征后,就可以根据限流策略获取与用户特征对应的限流参数,限流参数中包含有限流类型以及容量等信息,其中,限流类型代表使用的限流方法,比如,令牌桶方法、并发方法等。容量是指限流的上线值,即设置的在一秒内访问的阈值,比如,设置1秒内的访问量最多为40,超过40的部分拒绝请求,从而来达到保护服务器的目的。步骤218,根据限流参数对用户请求进行限流处理。其中,根据限流参数确定相应的限流类型和相应的容量,然后根据限流类型和容量判断是否对用户请求放行。在另一个实施例中,如果存在多个并行限流策略时,当根据第一个限流策略判断放行后,还需要继续判断第二个限流策略是否放行,依次类推。如图4所示,在一个实施例中,限流参数包括限流类型和容量;根据限流参数对用户请求进行限流处理的步骤218包括:步骤218a,当限流类型为令牌类型时,则获取限流参数中包含的更新速率,根据容量和更新速率的比值计算得到令牌的失效时间。其中,当限流类型为令牌类型时,首先,根据限流参数中包含的速率和容量计算得到失效时间。容量是指令牌桶中最多包含的令牌数。速率是指每秒添加的令牌数。失效时间是指令牌桶中的令牌的失效时间。比如,如果容量为40,速率为20每秒,那么计算得到的失效时间为2s,即每隔2s将令牌桶重新充满,之前的令牌都失效。速率虽然代表了每秒向令牌桶中添加的令牌数,但是令牌桶的容量是有限的,令牌桶中的令牌数不能超过其容量。即如果当前令牌桶中的令牌数为30个,虽然速率是每秒向令牌桶中添加20个,但是由于加入20个会超过令牌桶的容量,所以最多添加10个,充满令牌桶即可。步骤218b,根据失效时间和更新速率实时更新令牌桶中的令牌数。其中,根据失效时间和更新速率实时更新令牌桶中令牌数。每隔失效时间重新填满令牌桶,更新速率是指每秒内向令牌桶中添加的令牌数。假设令牌桶的容量为50,更新频率为10每秒。那么失效时间为5s。即每隔1s向令牌桶中添加10个令牌,不过,令牌桶中的数量不能超过其容量,超出部分自动去除。每隔5s重新填满令牌桶。步骤218c,根据用户请求对应的当前时间获取令牌桶中剩余的令牌数,当剩余的令牌数为0时,则拒绝用户请求。其中,获取到用户请求后,获取用户请求对应的当前时间,然后获取当前时间令牌桶中剩余的令牌数,当剩余的令牌数为0时,则拒绝该用户请求,如果有多余的令牌,则放行。举个例子,假设当前时间为17点10分1秒,假设当前时间令牌桶中总的令牌数为40,因为同一秒时间内可能有很多用户请求,如果在这一秒内已经有40个用户请求拿走了令牌,那么在这1秒内如果再接收到用户请求,则拒绝该用户请求,如果有多余的令牌,则放行。在一个实施例中,限流参数包括限流类型和容量;根据限流参数对用户请求进行限流处理的步骤包括:当限流类型为并发类型时,实时统计已记录的用户请求数;若已记录的用户请求数等于容量,则拒绝用户请求。其中,当限流类型为并发类型时,则需要实时统计已记录的用户请求数,如果已记录的用户请求数等于其容量,则不再接收用户请求。具体地,每过来一个用户请求,则分配一个标识,并记录该用户请求对应的时间。由于容量有限,当已记录的用户请求数等于其容量时,则不能再接收用户请求,直接拒绝。其中,如果接收到某个请求的响应,则将该请求从记录中清除,这样就用户请求数就少了一个,可以另外接收一个用户请求。另外,如果用户请求超过了预设时长还没有响应,则将该超过预设时长的用户请求从记录中清除,以便可以接收另外的用户请求。如图5所示,在一个实施例中,根据限流参数对用户请求进行限流处理的步骤210包括:步骤210a,将限流参数发送给redis服务器,指示redis服务器根据限流参数判断是否对用户请求放行,并将是否放行的结果返回。具体地,为了对整个nginx组进行限流,将限流参数对应的脚本文件发送给redis服务器,然后利用redis服务器为lua提供运行环境的本身特性来运行脚本文件,使得redis具有判断是否对用户请求放行的功能,从而实现了采用redis服务器根据限流参数判断是否对用户请求放行。其中,nginx服务器获取到限流参数后,将限流参数发送给redis服务器,由redis服务器根据限流参数判断是否对用户请求放行,并将判断的结果返回给nginx服务器。步骤210b,接收redis服务器返回的结果,根据结果进行限流处理。其中,nginx服务器接收到返回的结果后,根据结果进行限流处理。在一个实施例中,上述限流方法还包括:实时监听etcd服务器中是否新增了限流策略和用户解析文件,若是,则将etcd服务器中的限流策略和用户解析文件加载到内存中进行存储。其中,为了能够进一步提高限流效率以及减少etcd服务器的压力,nginx服务器可以专门开通一个协程,用于实时监听etcd服务器中的数据变化,即监听是否有新增的限流策略以及相应的用户解析文件,若有,则及时将etcd服务器中的数据拉到nginx服务器的内存,从而实现在访问的过程中与etcd服务器进行解耦,有利于提高限流效率。应该理解的是,虽然图2至5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2至5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。如图6所示,在一个实施例中,提出了一种限流系统,该系统包括:etcd服务器602,用于接收上传的限流策略以及对应的用户解析文件并进行存储;nginx服务器604,用于根据预设的规则定时查找高速缓存cache里面是否存在当前限流策略标识和相应的用户解析文件标识,若否,则从etcd服务器中读取当前限流策略标识和相应的用户解析文件标识;所述nginx服务器还用于根据所述当前限流策略标识和用户解析文件标识在内存中查找是否存在与所述当前限流策略标识对应的限流策略以及用户解析文件标识对应的用户解析文;当内存中不存在所述限流策略和用户解析文件时,则在所述etcd服务器中查找所述当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中,其中,lua是嵌入到nginx服务器配置文件中的动态脚本语言;所述nginx服务器还用于根据所述限流策略和所述用户解析文件进行限流处理。在一个实施例中,所述nginx服务器还用于当内存中不存在所述限流策略和用户解析文件时,则通过加载json的方式将在etcd服务器中的以json格式存在的限流策略和用户解析文件通过lua加载到内存并转换为table的形式进行存储。在一个实施例中,所述nginx服务器还用于将内存中以table形式存在的限流策略转换为字符串的形式存储到高速缓存cache中。在一个实施例中,所述nginx服务器还用于接收用户请求,所述用户请求中携带有用户信息,根据所述用户解析文件对所述用户信息进行解析,得到用户特征;根据所述用户特征从所述限流策略中获取与所述用户特征对应的限流参数;根据所述限流参数对所述用户请求进行限流处理。在一个实施例中,所述限流参数包括限流类型和容量;所述nginx服务器还用于当所述限流类型为令牌类型时,则获取限流参数中包含的更新速率,根据所述容量和更新速率的比值计算得到令牌的失效时间;根据所述失效时间和所述更新速率实时更新令牌桶中的令牌数;根据用户请求对应的当前时间获取所述令牌桶中剩余的令牌数;当剩余的令牌数为0时,则拒绝所述用户请求。在一个实施例中,所述限流参数包括限流类型和容量;;所述nginx服务器还用于当所述限流类型为并发类型时,实时统计已记录的用户请求数;若已记录的用户请求数等于所述容量,则拒绝所述用户请求。如图7所示,在一个实施例中,上述限流系统还包括:redis服务器606,用于根据所述限流参数判断是否对所述用户请求放行,并将是否放行的结果返回给nginx服务器;所述nginx服务器还用于将所述限流参数发送给redis服务器,并接收redis服务器返回的结果,根据所述结果进行限流处理。关于限流系统的具体限定可以参见上文中对于限流方法的限定,在此不再赘述。上述限流系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种限流方法。本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:根据预设的规则定时查找高速缓存cache里面是否存在当前限流策略标识和相应的用户解析文件标识,若否,则从etcd服务器中读取当前限流策略标识和相应的用户解析文件标识;根据所述当前限流策略标识和用户解析文件标识在内存中查找是否存在与所述当前限流策略标识对应的限流策略以及用户解析文件标识对应的用户解析文件;当内存中不存在所述限流策略和用户解析文件时,则在所述etcd服务器中查找所述当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中,其中,lua是嵌入到nginx服务器配置文件中的动态脚本语言;根据所述限流策略和所述用户解析文件进行限流处理。在一个实施例中,所述当内存中不存在所述限流策略和用户解析文件时,则在所述etcd服务器中查找所述当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中的步骤包括:当内存中不存在所述限流策略和用户解析文件时,则通过加载json的方式将在etcd服务器中的以json格式存在的限流策略和用户解析文件通过lua加载到内存并转换为table的形式进行存储。在一个实施例中,所述处理器还用于执行以下步骤:将内存中以table形式存在的限流策略转换为字符串的形式存储到高速缓存cache中。在一个实施例中,所述处理器还用于执行以下步骤:nginx服务器接收用户请求,所述用户请求中携带有用户信息;根据所述用户解析文件对所述用户信息进行解析,得到用户特征;根据所述用户特征从所述限流策略中获取与所述用户特征对应的限流参数;根据所述限流参数对所述用户请求进行限流处理。在一个实施例中,所述处理器还用于执行以下步骤:所述限流参数包括限流类型和容量;所述根据所述限流参数对所述用户请求进行限流处理的步骤包括:当所述限流类型为令牌类型时,则获取限流参数中包含的更新速率,根据所述容量和更新速率的比值计算得到令牌的失效时间;根据所述失效时间和所述更新速率实时更新令牌桶中的令牌数;根据用户请求对应的当前时间获取所述令牌桶中剩余的令牌数;当剩余的令牌数为0时,则拒绝所述用户请求。在一个实施例中,述限流参数包括限流类型和容量;所述根据所述限流参数对所述用户请求进行限流处理的步骤包括:当所述限流类型为并发类型时,实时统计已记录的用户请求数;若已记录的用户请求数等于所述容量,则拒绝所述用户请求。在一个实施例中,所所述根据所述限流参数对所述用户请求进行限流处理的步骤包括:将所述限流参数发送给redis服务器,指示所述redis服务器根据所述限流参数判断是否对所述用户请求放行,并将是否放行的结果返回;接收redis服务器返回的结果,根据所述结果进行限流处理。在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:根据预设的规则定时查找高速缓存cache里面是否存在当前限流策略标识和相应的用户解析文件标识,若否,则从etcd服务器中读取当前限流策略标识和相应的用户解析文件标识;根据所述当前限流策略标识和用户解析文件标识在内存中查找是否存在与所述当前限流策略标识对应的限流策略以及用户解析文件标识对应的用户解析文件;当内存中不存在所述限流策略和用户解析文件时,则在所述etcd服务器中查找所述当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中,其中,lua是嵌入到nginx服务器配置文件中的动态脚本语言;根据所述限流策略和所述用户解析文件进行限流处理。在一个实施例中,所述当内存中不存在所述限流策略和用户解析文件时,则在所述etcd服务器中查找所述当前限流策略标识对应的限流策略和用户解析文件标识对应的用户解析文件,并通过lua加载到内存中的步骤包括:当内存中不存在所述限流策略和用户解析文件时,则通过加载json的方式将在etcd服务器中的以json格式存在的限流策略和用户解析文件通过lua加载到内存并转换为table的形式进行存储。在一个实施例中,所述处理器还用于执行以下步骤:将内存中以table形式存在的限流策略转换为字符串的形式存储到高速缓存cache中。在一个实施例中,所述处理器还用于执行以下步骤:nginx服务器接收用户请求,所述用户请求中携带有用户信息;根据所述用户解析文件对所述用户信息进行解析,得到用户特征;根据所述用户特征从所述限流策略中获取与所述用户特征对应的限流参数;根据所述限流参数对所述用户请求进行限流处理。在一个实施例中,所述处理器还用于执行以下步骤:所述限流参数包括限流类型和容量;所述根据所述限流参数对所述用户请求进行限流处理的步骤包括:当所述限流类型为令牌类型时,则获取限流参数中包含的更新速率,根据所述容量和更新速率的比值计算得到令牌的失效时间;根据所述失效时间和所述更新速率实时更新令牌桶中的令牌数;根据用户请求对应的当前时间获取所述令牌桶中剩余的令牌数;当剩余的令牌数为0时,则拒绝所述用户请求。在一个实施例中,述限流参数包括限流类型和容量;所述根据所述限流参数对所述用户请求进行限流处理的步骤包括:当所述限流类型为并发类型时,实时统计已记录的用户请求数;若已记录的用户请求数等于所述容量,则拒绝所述用户请求。在一个实施例中,所所述根据所述限流参数对所述用户请求进行限流处理的步骤包括:将所述限流参数发送给redis服务器,指示所述redis服务器根据所述限流参数判断是否对所述用户请求放行,并将是否放行的结果返回;接收redis服务器返回的结果,根据所述结果进行限流处理。本领域普通技术人员可以理解实现上述实施例方法中的全部或部限流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1