本发明实施例涉及金融科技(fintech)和区块链领域,尤其涉及一种生成服务请求的方法及装置。
背景技术:
随着计算机技术的发展,越来越多的技术(区块链blockchain、分布式、大数据等)应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。
现有技术过滤重复请求时,通常是客户端在发送请求时,生成一个rs(randomstring,随机字符串)。服务端在接收到该请求时,从rs中提取出时间戳,并基于该时间戳和服务端本地的当前时间戳确定时间差值。之后在确定时间差值小于超时时间时,判断服务端是否已存在该rs,若存在,则确定该请求为重复请求,并对该请求不做处理。然而,由于该处理方式所生成的rs携带有多余信息,使得rs长度过长,从而导致在rs的传输和存储上浪费更多的传输带宽和存储资源。
综上,目前亟需一种生成服务请求的方法,用以降低rs在传输和存储时所浪费的传输带宽和存储资源。
技术实现要素:
本发明实施例提供了一种生成服务请求的方法及装置,用以降低rs在传输和存储时所浪费的传输带宽和存储资源。
第一方面,本发明实施例提供了一种生成服务请求的方法,包括:
客户端节点生成服务请求对应的当前时间戳和随机数;
所述客户端节点基于服务端节点指示的时间戳有效位数,对所述当前时间戳进行截取处理,得到第一时间戳;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;
所述客户端节点根据所述第一时间戳的长度指示、所述第一时间戳和所述随机数,生成随机字符串rs;
所述客户端节点向所述服务端节点发送携带所述rs的服务请求;所述rs用于所述服务端节点确定所述服务请求是否可执行。
上述技术方案中,通过基于服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理,得到第一时间戳。再根据第一时间戳的长度指示、第一时间戳和随机数,生成随机字符串rs。然后向服务端节点发送携带rs的服务请求,该rs用于服务端节点确定服务请求是否可执行。由于根据时间戳有效位数对当前时间戳进行截取处理,则可以得出,截取后的当前时间戳的位数小于当前时间戳的位数,即,该方法并未选取全部的时间戳用于生成rs,仅是选取时间戳的有效部分用于生成rs,如此可以有助于减少rs的长度,从而可以降低rs在传输和存储时所浪费的传输带宽和存储资源。
可选地,所述客户端节点生成随机数,包括:
所述客户端节点基于所述服务端节点指示的随机数有效位数,生成所述随机数;所述随机数有效位数是所述服务端节点基于设定时长内的服务请求的并发量确定的。
上述技术方案中,由于随机数有效位数是服务端节点基于设定时长内的服务请求的并发量确定的,且设定时长内的服务请求的并发量是动态变化的,基于此可知,随机数有效位数也是动态变化的,并不是固定不变的,如此,可以避免现有技术中随机数的位数固定不变所导致rs在传输和存储上浪费更多的传输带宽和存储资源。
可选地,所述客户端节点根据所述第一时间戳的长度指示、所述第一时间戳和所述随机数,生成随机字符串rs,包括:
所述客户端节点根据进制转换规则,对所述第一时间戳进行转换处理,得到第一字符串,并对所述随机数进行转换处理,得到第二字符串;所述第一字符串所占位数少于所述第一时间戳所占位数;所述第二字符串所占位数少于所述随机数所占位数;
所述客户端节点根据所述第一字符串确定出所述第一时间戳的长度指示;
所述客户端节点依次将所述第一时间戳的长度指示、所述第一字符串和所述第二字符串进行拼接,得到所述rs。
上述技术方案中,通过根据进制转换规则,对第一时间戳进行转换处理,得到第一字符串,并对随机数进行转换处理,得到第二字符串。再依次将第一时间戳的长度指示、第一字符串和第二字符串进行拼接,得到rs。由于第一字符串所占位数少于第一时间戳所占位数以及第二字符串所占位数少于随机数所占位数,则对第一时间戳、随机数进行转换处理,可以有助于进一步压缩字符的长度,如此,可以进一步减少生成rs的长度,从而可以降低rs在传输和存储时所浪费的传输带宽和存储资源。
可选地,在所述客户端节点生成服务请求对应的当前时间戳和随机数之前,还包括:
所述客户端节点从所述服务端节点获取所述时间戳有效位数和所述随机数有效位数。
上述技术方案中,在生成服务请求对应的当前时间戳之前,从服务端节点获取时间戳有效位数和随机数有效位数,可以有助于客户端节点及时地根据时间戳有效位数、随机数有效位数生成对应的时间戳的有效部分、随机数,以便为后续及时地生成rs提供支持。
可选地,所述客户端节点从所述服务端节点获取所述随机数有效位数,包括:
所述客户端节点周期性地从所述服务端节点获取所述随机数有效位数。
上述技术方案中,通过周期性地从服务端节点获取随机数有效位数,可以使得客户端节点及时地基于变化的随机数有效位数更新本地的随机数有效位数,并可以基于变化的随机数有效位数及时准确地生成rs。
第二方面,本发明实施例提供了一种生成服务请求的方法,包括:
服务端节点接收客户端节点发送的服务请求;所述服务请求携带有随机字符串rs;所述rs是所述客户端节点根据第一时间戳的长度指示、第一时间戳和随机数生成的;所述第一时间戳是所述客户端节点基于所述服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理得到的;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;所述当前时间戳和所述随机数是所述客户端节点基于所述服务请求生成的;
所述服务端节点确定所述服务请求是否可执行。
上述技术方案中,服务端节点接收客户端节点发送的服务请求,并确定服务请求是否可执行。由于rs中的第一时间戳是客户端节点基于服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理得到的,由此可知,截取后的当前时间戳的位数小于当前时间戳的位数,即,并未选取全部的时间戳用于生成rs,仅是选取时间戳的有效部分用于生成rs,如此可以有助于减少rs的长度,从而可以降低rs在传输和存储时所浪费的传输带宽和存储资源。
可选地,所述服务端节点确定所述服务请求是否可执行,包括:
所述服务端节点对所述rs进行解析处理,得到第一字符串,并根据进制转换规则对所述第一字符串进行转换处理,得到第一时间戳,并确定出所述第一时间戳的位数;所述第一字符串所占位数少于所述第一时间戳所占位数;所述第一时间戳的位数与所述时间戳有效位数相同;
所述服务端节点基于所述第一时间戳的位数对本地的当前时间戳进行截取处理,得到第二时间戳,并对所述第一时间戳和所述第二时间戳进行处理,得到时间差值;所述本地的当前时间戳是所述服务端节点接收所述客户端节点发送的服务请求时生成的;
所述服务端节点确定所述时间差值是否小于等于所述服务请求的有效时长;
所述服务端节点在确定所述时间差值小于等于所述服务请求的有效时长后,确定本地是否缓存有所述rs;
若是,则所述服务端节点确定所述服务请求为不可执行请求,否则确定所述服务请求为可执行请求。
上述技术方案中,通过基于第一时间戳的位数对本地的当前时间戳进行截取处理,得到第二时间戳,并对第一时间戳和所述第二时间戳进行处理,得到时间差值。再在确定时间差值小于等于服务请求的有效时长后,确定本地是否缓存有rs,如果存在,则确定服务请求为不可执行请求;如果不存在,则确定服务请求为可执行请求。如此,可以基于rs快速准确地确定服务请求是否为重复请求。此外,由于rs的长度大大减少,可以有助于避免浪费服务端节点的存储资源,并可以减轻服务端节点的存储压力。
可选地,在所述服务端节点接收客户端节点发送的服务请求之前,还包括:
所述服务端节点设置所述服务请求的有效时长;
所述服务端节点对所述服务请求的有效时长进行处理,确定出所述服务请求的有效时长对应的时间值,并确定出所述时间值的位数;
所述服务端节点将所述时间值的位数与1进行加和处理,确定出所述时间戳有效位数。
上述技术方案中,通过基于服务端节点设置服务请求的有效时长,计算出时间戳有效位数,有助于为后续客户端节点基于该时间戳有效位数可以及时准确地确定出时间戳的有效部分提供支持。此外,由于并未选取全部的时间戳用于生成rs,仅是选取时间戳的有效部分用于生成rs,可以有助于减少rs的长度。
可选地,所述服务端节点对所述rs进行解析处理,得到第一字符串,包括:
所述服务端节点获取所述第一时间戳的长度指示;
所述服务端节点基于所述第一时间戳的长度指示,对所述rs进行处理,确定出所述第一字符串。
可选地,在所述服务端节点接收客户端节点发送的服务请求之后,还包括:
所述服务端节点基于请求计时器,统计设定时长内所述客户端节点发送的服务请求;
所述服务端节点周期性地基于所述请求计时器的统计值确定出随机数有效位数;所述随机数有效位数用于所述客户端节点生成符合所述随机数有效位数的第二字符串;所述第二字符串所占位数少于所述随机数所占位数。
上述技术方案中,通过设置请求计时器,实时统计客户端节点发送的服务请求,并基于请求计时器的实时统计值可以实时计算出随机数有效位数,即,该随机数有效位数是动态变化的,并不是固定不变的,如此,可以避免现有技术中随机数的位数固定不变所导致rs在传输和存储上浪费更多的传输带宽和存储资源。
可选地,所述服务端节点基于所述请求计时器的值确定出随机数有效位数,包括:
所述服务端节点获取所述请求计时器的当前统计值;
所述服务端节点将所述请求计时器的当前统计值与设定时长的比值,确定为第一请求值;
所述服务端节点将所述第一请求值与预设冲突概率的比值,确定为第二请求值;
所述服务端节点根据进制转换规则,将所述第二请求值转换为第三字符串,并确定出所述第三字符串的位数;所述第三字符串的位数为所述随机数有效位数。
上述技术方案中,通过实时统计请求计时器的值,并基于请求计时器的当前统计值、设定时长以及预设冲突概率,可以动态计算出第二请求值,并根据进制转换规则对第二请求值进行处理,可以及时准确地确定出动态变化的随机数有效位数,有助于为后续及时调整rs的长度提供支持,从而可以避免现有技术中随机数的位数固定不变所导致rs在传输和存储上浪费更多的传输带宽和存储资源。
第三方面,本发明实施例提供了一种生成服务请求的装置,包括:
生成单元,用于生成服务请求对应的当前时间戳和随机数;
第一处理单元,用于基于服务端节点指示的时间戳有效位数,对所述当前时间戳进行截取处理,得到第一时间戳;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;根据所述第一时间戳的长度指示、所述第一时间戳和所述随机数,生成随机字符串rs;向所述服务端节点发送携带所述rs的服务请求;所述rs用于所述服务端节点确定所述服务请求是否可执行。
可选地,所述第一处理单元具体用于:
基于所述服务端节点指示的随机数有效位数,生成所述随机数;所述随机数有效位数是所述服务端节点基于设定时长内的服务请求的并发量确定的。
可选地,所述第一处理单元具体用于:
根据进制转换规则,对所述第一时间戳进行转换处理,得到第一字符串,并对所述随机数进行转换处理,得到第二字符串;所述第一字符串所占位数少于所述第一时间戳所占位数;所述第二字符串所占位数少于所述随机数所占位数;
根据所述第一字符串确定出所述第一时间戳的长度指示;
依次将所述第一时间戳的长度指示、所述第一字符串和所述第二字符串进行拼接,得到所述rs。
可选地,所述第一处理单元还用于:
从所述服务端节点获取所述时间戳有效位数和所述随机数有效位数。
可选地,所述第一处理单元还用于:
周期性地从所述服务端节点获取所述随机数有效位数。
第四方面,本发明实施例提供了一种生成服务请求的装置,包括:
接收单元,用于接收客户端节点发送的服务请求;所述服务请求携带有随机字符串rs;所述rs是所述客户端节点根据第一时间戳的长度指示、第一时间戳和随机数生成的;所述第一时间戳是所述客户端节点基于所述服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理得到的;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;所述当前时间戳和所述随机数是所述客户端节点基于所述服务请求生成的;
第二处理单元,用于确定所述服务请求是否可执行。
可选地,所述第二处理单元具体用于:
对所述rs进行解析处理,得到第一字符串,并根据进制转换规则对所述第一字符串进行转换处理,得到第一时间戳,并确定出所述第一时间戳的位数;所述第一字符串所占位数少于所述第一时间戳所占位数;所述第一时间戳的位数与所述时间戳有效位数相同;
基于所述第一时间戳的位数对本地的当前时间戳进行截取处理,得到第二时间戳,并对所述第一时间戳和所述第二时间戳进行处理,得到时间差值;所述本地的当前时间戳是所述服务端节点接收所述客户端节点发送的服务请求时生成的;
确定所述时间差值是否小于等于所述服务请求的有效时长;
在确定所述时间差值小于等于所述服务请求的有效时长后,确定本地是否缓存有所述rs;
若是,则确定所述服务请求为不可执行请求,否则确定所述服务请求为可执行请求。
可选地,所述第二处理单元还用于:
设置所述服务请求的有效时长;
对所述服务请求的有效时长进行处理,确定出所述服务请求的有效时长对应的时间值,并确定出所述时间值的位数;
将所述时间值的位数与1进行加和处理,确定出所述时间戳有效位数。
可选地,所述第二处理单元具体用于:
获取所述第一时间戳的长度指示;
基于所述第一时间戳的长度指示,对所述rs进行处理,确定出所述第一字符串。
可选地,所述第二处理单元还用于:
基于请求计时器,统计设定时长内所述客户端节点发送的服务请求;
周期性地基于所述请求计时器的统计值确定出随机数有效位数;所述随机数有效位数用于所述客户端节点生成符合所述随机数有效位数的第二字符串;所述第二字符串所占位数少于所述随机数所占位数。
可选地,所述第二处理单元还用于:
获取所述请求计时器的当前统计值;
将所述请求计时器的当前统计值与设定时长的比值,确定为第一请求值;
将所述第一请求值与预设冲突概率的比值,确定为第二请求值;
根据进制转换规则,将所述第二请求值转换为第三字符串,并确定出所述第三字符串的位数;所述第三字符串的位数为所述随机数有效位数。
第五方面,本发明实施例提供一种计算设备,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行生成服务请求的方法。
第六方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行生成服务请求的方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种系统架构的示意图;
图2为本发明实施例提供的一种生成服务请求的方法的流程示意图;
图3为本发明实施例提供的一种rs的示意图;
图4为本发明实施例提供的一种生成服务请求的装置的结构示意图;
图5为本发明实施例提供的另一种生成服务请求的装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
下面首先对本发明实施例中涉及的部分用语进行解释说明,以便于本领域技术人员进行理解。
请求:客户端节点(client)对服务端节点(server)发起一次rpc(remoteprocedurecall,远程调用,即一个系统对另外一个系统发起请求调用)调用。
请求数:一段时间范围内请求的总量。
重复请求:同一个请求,服务端节点接收到多次。通常由于网络不稳定、代码逻辑错误、底层通信框架的重试机制等产生。
时间差值:服务端节点的本地时间和请求中的timestamp差值的绝对值。
超时时间:服务端节点配置的一个时间阈值(比如:5分钟)。其中,服务端节点只处理与服务端节点时间差值在该配置时间范围内的请求。
过期时间:服务端节点在保存rs(randomstring,请求时传输的随机字符串,一般是timestamp nonce拼接)时,会设置一个过期时间。在达到过期时间后,会删除服务器存储的rs,节约服务器存储资源。过期时间,通常默认等于超时时间。其中,timestamp表示时间戳,又称为时间标记,以毫秒(millisecond)为单位;nonce表示随机或伪随机数,用于过滤重复请求。
随机字符串:客户端节点在发送请求时,会携带一个rs,服务端节点根据rs来判断当前请求是否是重复请求。
高并发:指系统中qps(queriespersecond,每秒钟的请求数,单位为fetches/sec)的值很大,通常超过上万每秒,比如,10000000fetches/sec。
并发最大峰值:指一个系统中qps的最大值。
冲突:随机生成数据时,不同的随机生成器生成了相同的结果。
冲突概率:随机生成数据时,生成相同结果的概率。比如,万分之一。
位数:一个字符数据的长度。
如上介绍了本发明实施例中涉及的部分用语,下面对本发明实施例涉及的技术特征进行介绍。
为了便于理解本发明实施例,图1为本发明实施例提供的一种系统架构。如图1所示,该系统架构可以为服务器100,包括处理器110、通信接口120和存储器130。
其中,通信接口120用于与终端设备进行通信,收发该终端设备传输的信息,实现通信。该终端设备可以为手机、笔记本电脑、平板电脑等;用户可以使用该终端设备上的客户端节点向服务器发起请求。
处理器110是服务器100的控制中心,利用各种接口和线路连接整个服务器100的各个部分,通过运行或执行存储在存储器130内的软件程序/或模块,以及调用存储在存储器130内的数据,执行服务器100的各种功能和处理数据。可选地,处理器110可以包括一个或多个处理单元。
存储器130可用于存储软件程序以及模块,处理器110通过运行存储在存储器130的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器130可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据业务处理所创建的数据等。此外,存储器130可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。
基于上述描述,图2示例性的示出了本发明实施例提供的一种生成服务请求的方法的流程,该流程可以由生成服务请求的装置执行。
如图2所示,该流程具体包括:
步骤201,服务端节点设置服务请求的有效时长。
步骤202,所述服务端节点对所述服务请求的有效时长进行处理,确定出时间戳有效位数。
步骤203,所述服务端节点发送所述时间戳有效位数给客户端节点。
步骤204,所述客户端节点生成服务请求对应的当前时间戳和随机数。
步骤205,所述客户端节点基于服务端节点指示的时间戳有效位数,对所述当前时间戳进行截取处理,得到第一时间戳。
步骤206,所述客户端节点根据所述第一时间戳的长度指示、所述第一时间戳和所述随机数,生成随机字符串rs。
步骤207,所述客户端节点发送携带所述rs的服务请求给所述服务端节点。
步骤208,所述服务端节点确定所述服务请求是否可执行。
上述步骤201、步骤202和步骤203中,在服务端节点接收客户端节点发送的服务请求之前,客户端节点需要从服务端节点获取时间戳有效位数,并周期性地从服务端节点获取随机数有效位数,如此,可以有助于客户端节点及时地根据时间戳有效位数、随机数有效位数生成对应的时间戳的有效部分、随机数,以便为后续及时地生成rs提供支持。具体地,服务端节点设置服务请求的有效时长,并对服务请求的有效时长进行处理,确定出服务请求的有效时长对应的时间值,并确定出时间值的位数。再将时间值的位数与1进行加和处理,确定出时间戳有效位数。再设置请求计时器,实时统计客户端节点发送的服务请求,并基于请求计时器的实时统计值可以实时计算出随机数有效位数。如此,通过基于服务端节点设置服务请求的有效时长,计算出时间戳有效位数,有助于为后续客户端节点基于该时间戳有效位数可以及时准确地确定出时间戳的有效部分提供支持。此外,由于并未选取全部的时间戳用于生成rs,仅是选取时间戳的有效部分用于生成rs,可以有助于减少rs的长度。其中,服务端节点设置的服务请求的有效时长可以认为是服务端节点设置的超时时间,在实际应用场景中,可以根据实际需求进行设置,本发明实施例对此并不作限定。
上述步骤204中,客户端节点在启动后,根据实际需求生成对应的服务请求。需要说明的是,在生成服务请求时,需要生成服务请求对应的当前时间戳和随机数。其中,随机数是客户端节点基于服务端节点指示的随机数有效位数生成的;随机数有效位数是服务端节点基于设定时长内的服务请求的并发量确定的。
基于此,根据设定时长内的服务请求的并发量确定随机数有效位数的具体过程为:
a、服务端节点基于请求计时器,统计设定时长内客户端节点发送的服务请求。
b、服务端节点获取请求计时器的当前统计值。
c、服务端节点将请求计时器的当前统计值与设定时长的比值,确定为第一请求值。
d、服务端节点将第一请求值与预设冲突概率的比值,确定为第二请求值。
e、服务端节点根据进制转换规则,将第二请求值转换为第三字符串,并确定出第三字符串的位数。其中,第三字符串的位数为随机数有效位数。
上述步骤205、步骤206和步骤207中,客户端节点基于服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理,得到第一时间戳。再根据进制转换规则,对第一时间戳进行转换处理,得到第一字符串,以及对随机数进行转换处理,得到第二字符串,并根据第一字符串确定出第一时间戳的长度指示。然后依次将第一时间戳的长度指示、第一字符串和第二字符串进行拼接,得到rs。在生成rs后,向服务端节点发送携带rs的服务请求。其中,第一字符串所占位数少于第一时间戳所占位数;第二字符串所占位数少于随机数所占位数。如此,由于第一字符串所占位数少于第一时间戳所占位数以及第二字符串所占位数少于随机数所占位数,则对第一时间戳、随机数进行转换处理,可以有助于进一步压缩字符的长度,并可以进一步减少生成rs的长度,从而可以降低rs在传输和存储时所浪费的传输带宽和存储资源。
上述步骤208中,服务端节点在接收到客户端节点发送的服务请求后,对rs进行解析处理,得到第一字符串。即,获取第一时间戳的长度指示,并基于第一时间戳的长度指示,对rs进行处理,确定出第一字符串。再根据进制转换规则对第一字符串进行转换处理,得到第一时间戳,并确定出第一时间戳的位数。之后,基于第一时间戳的位数对本地的当前时间戳进行截取处理,得到第二时间戳,以及对第一时间戳和所述第二时间戳进行处理,得到时间差值,并确定时间差值是否小于等于服务请求的有效时长,若确定时间差值大于服务请求的有效时长,则向客户端节点返回请求超时;若确定时间差值小于等于服务请求的有效时长,则确定本地是否缓存有该rs。如果存在,则确定服务请求为不可执行请求,否则确定服务请求为可执行请求。其中,本地的当前时间戳是服务端节点接收客户端节点发送的服务请求时生成的。如此,由于rs中的第一时间戳是客户端节点基于服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理得到的,由此可知,截取后的当前时间戳的位数小于当前时间戳的位数,即,并未选取全部的时间戳用于生成rs,仅是选取时间戳的有效部分用于生成rs,可以有助于减少rs的长度,从而可以降低rs在传输和存储时所浪费的传输带宽和存储资源。
鉴于此,下面对本发明实施例中生成服务请求的实施过程进行具体描述。
现有技术中,客户端节点在发送服务请求时,会生成一个rs,该rs由timestamp和nonce组成。然而,由于户端生成的timestamp有13位,则在存储和传输服务请求时rs中的timestamp也是使用了整个13位。同时,客户端节点生成的nonce是使用10进制的随机数,而在高并发场景下,为了减少冲突概率,生成的nonce的位数会比较长。需要说明的是,由于nonce的长度是服务端节点根据并发的最大峰值和冲突概率得到的一个固定长度,因此,服务端节点不能基于并发qps的动态变化进行动态修改nonce的长度,如此,导致nonce的位数较长。基于此可知,由于现有技术生成的rs的长度过长,导致rs在传输和存储上浪费更多的传输带宽和存储资源。针对这一问题,本发明实施例,基于服务端节点确定的时间戳有效位数对客户端节点生成的timestamp进行截取处理,以便将timestamp中的无效信息进行剔除,使得timestamp中的有效信息保留,有助于减少rs中的timestamp在存储和传输时所占用的内存和传输带宽。再基于qps的动态变化对nonce的位数进行动态调整,同时,按照转换进制规则,对截取后的timestamp中的有效信息和基于变化的nonce的位数生成的随机数进行转换处理,使得生成的rs的长度进一步减少,可以有助于降低rs在传输和存储时所浪费的传输带宽和存储资源。
step1:服务端节点配置有效时间(超时时间)为v分钟,并配置nonce的初始位数为l。
示例性地,本发明实施例中的服务端节点配置超时时间为5分钟,并配置nonce的初始位数为3。其中,nonce的位数后续会根据并发qps的值进行自动调整。
step2:服务端节点根据有效时间,确定时间戳timestamp的有效位数。
示例性地,服务端节点根据有效时间v对应的毫秒数,即v*60*1000对应的毫秒数的位数加1,计算出timestamp的有效位数。例如,v=5分钟,对应的毫秒数为v(ms)=5*60*1000=300000ms,则timestamp的有效位数tlen=6 1=7。
step3:客户端节点在发送服务请求之前,判断本地是否存在有timestamp的有效位数tlen以及nonce的初始位数l。
本发明实施例中,客户端节点在启动后,需要判断本地数据库中是否存在timestamp的有效位数tlen以及nonce的初始位数l。如果存在,则根据timestamp的有效位数tlen以及nonce的初始位数l生成服务请求。如果不存在,则需要向服务端节点发送一次请求,请求获取timestamp的有效位数tlen以及nonce的初始位数l,并在获取到timestamp的有效位数tlen以及nonce的初始位数l后进行服务请求的生成。需要说明的是,由于本发明实施例中的nonce的位数是动态变化的,即,服务端节点会实时统计客户端节点发送的请求数,基于实时统计的请求数,动态计算服务端节点当前的qps,并基于该当前的qps对nonce的位数进行动态调整,因此,客户端节点可以按照预设的时长周期性地从服务端节点获取变化的nonce的位数,以便使得客户端节点可以基于变化的nonce的位数及时准确地生成rs。例如,客户端节点可以每分钟向服务端节点请求一次nonce的位数,并基于请求到的nonce的位数,更新本地存储的nonce的位数值。其中,在实际应用场景中,预设的时长可以根据实际需求进行设置,比如将预设的时长设置为30秒、1分钟、2分钟等,本发明实施例对此并不作限制。
step4:客户端节点生成服务请求。
本发明实施例中,客户端节点生成服务请求对应的当前时间戳t,并根据timestamp的有效位数tlen对该当前时间戳t进行截取处理,得到第一时间戳,并根据进制转换规则对该第一时间戳进行转换处理,得到第一字符串;再基于nonce的初始位数l随机生成一个随机数,并对随机数进行转换处理,得到第二字符串。示例性地,截取当前时间戳t后tlen位为ctime,再将该ctime转换为62进制,就可以得到treq,并对treq进行处理,得到treq的位数tlen62。之后,基于nonce的初始位数l,随机生成一个62进制,长度为l的随机数。例如,客户端节点生成服务请求对应的当前时间戳t为1600503179621,tlen为7,l=3。再取当前时间戳t的后7位的ctime为3179621,并将该ctime转换为62进制的字符串,得到treq,即treq=dlad。其中,dlad的长度tlen62=4。然后,基于nonce的初始位数l=3,随机生成一个长度为3的62进制字符串,即nonce=cd2。最后将tlen62、treq和nonce依次拼接,生成一个随机字符串rs,即rs=4 dlad cd2=4dladcd2,并根据rs生成一个携带rs的服务请求。其中,rs的形式示意图可以如图3所示。如此,由于nonce的位数随着qps的变化而动态变化,以及基于服务端节点的时间戳有效位数,对当前时间戳进行截取处理,使得生成的rs的长度减少,并将随机数、ctime转换为62进制,可以进一步压缩字符长度,使得生成的rs的长度进一步减少,有助于降低rs在传输和存储时所浪费的传输带宽和存储资源。
step5:客户端节点发送服务请求给服务端节点。
在客户端节点给服务端节点发送服务请求时,客户端节点将一个携带rs的服务请求发送给服务端节点。
step6:服务端节点接收客户端节点发送的服务请求,并基于服务请求获取到rs。其中,在服务端节点接收到客户端节点发送的服务请求时,服务端节点的请求计时器的rc值增加1。
示例性地,本发明实施例中,服务端节点设置一个请求计时器,并设定请求计时器按照预设的时长周期性地计算一次nonce的位数。即,在具体实施过程中,服务端节点首先将rc值除以60,得到qps。再将qps的值除以预设的冲突概率,得到一个qps的新值,并将该qps的新值转换为62进制的字符串,即可获取62进制的字符串的长度。其中,62进制的字符串的长度即为nonce的位数;在实际应用场景中,预设的时长或预设的冲突概率可以根据实际需求进行设置,比如将预设的时长设置为30秒、1分钟、2分钟等,本发明实施例对此并不作限制。例如,请求计时器的当前rc值为600000000,则将当前rc值除以60,得到qps,即,qps=600000000/60=10000000fetches/sec。假设,预设的冲突概率为万分之一,则将qps除以预设的冲突概率,即10000000/(1/10000)=100000000000,并将100000000000转换为62进制,得到62进制的字符串为1l9zo9o。然后,基于1l9zo9o,可以得出1l9zo9o的长度为7,即,此时nonce的位数也为7。如此,可以便于客户端节点及时地获取到变化的nonce的位数,并基于变化的nonce的位数,可以及时准确地生成rs。此外,由于nonce的位数随着qps的变化而动态变化,如此可以有助于避免现有技术中nonce的位数固定不变所导致rs在传输和存储上浪费更多的传输带宽和存储资源。
step7:服务端节点基于rs确定客户端节点发送的服务请求是否为重复请求。
本发明实施例中,服务端节点对rs进行解析,并判断服务请求是否为重复请求。其中,判断服务请求是否为重复请求的过程具体为:
a、服务端节点读取rs的第一位tlen62。
b、服务端节点基于tlen62,从第2位连续读取tlen62为treq。
c、服务端节点将62进制的treq转换为10进制,即还原从客户端节点获取的ctime,并获取ctime的位数lenctime。
d、服务端节点获取本地当前的timestamp,取后lenctime位数为stime。再计算ctime和stime的时间差值tdiffabs。如果tdiffabs的值大于超时时间v,则直接向客户端节点返回请求超时,并对该服务请求不做处理。如果tdiffabs的值小于等于超时时间v,则确定本地是否缓存有该rs,如果存在,则确定该服务请求为重复请求,并拒绝该服务请求,如果不存在,则将该rs添加到服务端节点的服务请求处理队列,并为该rs设置过期时间,该过期时间可以为v,然后再处理该服务请求。其中,设置rs的过期时间,一方面是为了在保证服务请求及时处理完,不再占用内存;另一方面是为了在rs的过期时间到达后,及时地将服务端节点存储的rs进行删除,以便可以避免浪费服务端节点的存储资源,从而可以节约服务端节点的存储资源。
需要说明的是,对于服务端节点获取本地当前的timestamp,可以是在服务端节点接收到客户端节点发送的服务请求时就直接获取本地当前的timestamp,也可以是服务端节点对rs进行解析处理时或对rs进行解析处理完成时就获取本地当前的timestamp。
示例性地,服务器接收到的rs为4dladcd2,读取rs的第1位tlen62为4,即,从第2位到第6位表示客户端节点请求的ctime,获取到treq=dlad,并将dlad转换为10进制,得到ctime,即ctime=3179621,则lenctime=7。再获取当前timestamp=1600503180621,取后7(lenctime=7)位为stime,则stime=3180621。之后,计算ctime和stime的时间差值tdiffabs,即tdiffabs=|stime-ctime|=|3180621-3179621|=1000ms,由此可以看出,1000ms小于服务端节点配置的超时时间v(ms)=300000ms,则确定服务请求在有效时间范围内。倘若tdiffabs大于超时时间v,则直接向客户端节点返回请求超时。然后,判断服务端节点本地是否缓存有该rs,即rs=4dladcd2。如果存在,则确定服务请求为重复请求;如果不存在,则将rs添加到服务端节点的服务请求处理队列,并为该rs设置过期时间v=5分钟。
上述实施例表明,通过基于服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理,得到第一时间戳。再根据第一时间戳的长度指示、第一时间戳和随机数,生成随机字符串rs。然后向服务端节点发送携带rs的服务请求,该rs用于服务端节点确定服务请求是否可执行。由于根据时间戳有效位数对当前时间戳进行截取处理,则可以得出,截取后的当前时间戳的位数小于当前时间戳的位数,即,该方法并未选取全部的时间戳用于生成rs,仅是选取时间戳的有效部分用于生成rs,如此可以有助于减少rs的长度,从而可以降低rs在传输和存储时所浪费的传输带宽和存储资源。
基于相同的技术构思,图4示例性的示出了本发明实施例提供的一种生成服务请求的装置,该装置可以执行生成服务请求的方法的流程。
如图4所示,该装置包括:
生成单元401,用于生成服务请求对应的当前时间戳和随机数;
第一处理单元402,用于基于服务端节点指示的时间戳有效位数,对所述当前时间戳进行截取处理,得到第一时间戳;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;根据所述第一时间戳的长度指示、所述第一时间戳和所述随机数,生成随机字符串rs;向所述服务端节点发送携带所述rs的服务请求;所述rs用于所述服务端节点确定所述服务请求是否可执行。
可选地,所述第一处理单元402具体用于:
基于所述服务端节点指示的随机数有效位数,生成所述随机数;所述随机数有效位数是所述服务端节点基于设定时长内的服务请求的并发量确定的。
可选地,所述第一处理单元402具体用于:
根据进制转换规则,对所述第一时间戳进行转换处理,得到第一字符串,并对所述随机数进行转换处理,得到第二字符串;所述第一字符串所占位数少于所述第一时间戳所占位数;所述第二字符串所占位数少于所述随机数所占位数;
根据所述第一字符串确定出所述第一时间戳的长度指示;
依次将所述第一时间戳的长度指示、所述第一字符串和所述第二字符串进行拼接,得到所述rs。
可选地,所述第一处理单元402还用于:
从所述服务端节点获取所述时间戳有效位数和所述随机数有效位数。
可选地,所述第一处理单元402还用于:
周期性地从所述服务端节点获取所述随机数有效位数。
基于相同的技术构思,图5示例性的示出了本发明实施例提供的一种生成服务请求的装置,该装置可以执行生成服务请求的方法的流程。
如图5所示,该装置包括:
接收单元501,用于接收客户端节点发送的服务请求;所述服务请求携带有随机字符串rs;所述rs是所述客户端节点根据第一时间戳的长度指示、第一时间戳和随机数生成的;所述第一时间戳是所述客户端节点基于所述服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理得到的;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;所述当前时间戳和所述随机数是所述客户端节点基于所述服务请求生成的;
第二处理单元502,用于确定所述服务请求是否可执行。
可选地,所述第二处理单元502具体用于:
对所述rs进行解析处理,得到第一字符串,并根据进制转换规则对所述第一字符串进行转换处理,得到第一时间戳,并确定出所述第一时间戳的位数;所述第一字符串所占位数少于所述第一时间戳所占位数;所述第一时间戳的位数与所述时间戳有效位数相同;
基于所述第一时间戳的位数对本地的当前时间戳进行截取处理,得到第二时间戳,并对所述第一时间戳和所述第二时间戳进行处理,得到时间差值;所述本地的当前时间戳是所述服务端节点接收所述客户端节点发送的服务请求时生成的;
确定所述时间差值是否小于等于所述服务请求的有效时长;
在确定所述时间差值小于等于所述服务请求的有效时长后,确定本地是否缓存有所述rs;
若是,则确定所述服务请求为不可执行请求,否则确定所述服务请求为可执行请求。
可选地,所述第二处理单元502还用于:
设置所述服务请求的有效时长;
对所述服务请求的有效时长进行处理,确定出所述服务请求的有效时长对应的时间值,并确定出所述时间值的位数;
将所述时间值的位数与1进行加和处理,确定出所述时间戳有效位数。
可选地,所述第二处理单元502具体用于:
获取所述第一时间戳的长度指示;
基于所述第一时间戳的长度指示,对所述rs进行处理,确定出所述第一字符串。
可选地,所述第二处理单元502还用于:
基于请求计时器,统计设定时长内所述客户端节点发送的服务请求;
周期性地基于所述请求计时器的统计值确定出随机数有效位数;所述随机数有效位数用于所述客户端节点生成符合所述随机数有效位数的第二字符串;所述第二字符串所占位数少于所述随机数所占位数。
可选地,所述第二处理单元502还用于:
获取所述请求计时器的当前统计值;
将所述请求计时器的当前统计值与设定时长的比值,确定为第一请求值;
将所述第一请求值与预设冲突概率的比值,确定为第二请求值;
根据进制转换规则,将所述第二请求值转换为第三字符串,并确定出所述第三字符串的位数;所述第三字符串的位数为所述随机数有效位数。
基于相同的技术构思,本发明实施例提供一种计算设备,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行生成服务请求的方法。
基于相同的技术构思,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行生成服务请求的方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
1.一种生成服务请求的方法,其特征在于,包括:
客户端节点生成服务请求对应的当前时间戳和随机数;
所述客户端节点基于服务端节点指示的时间戳有效位数,对所述当前时间戳进行截取处理,得到第一时间戳;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;
所述客户端节点根据所述第一时间戳的长度指示、所述第一时间戳和所述随机数,生成随机字符串rs;
所述客户端节点向所述服务端节点发送携带所述rs的服务请求;所述rs用于所述服务端节点确定所述服务请求是否可执行。
2.如权利要求1所述的方法,其特征在于,所述客户端节点生成随机数,包括:
所述客户端节点基于所述服务端节点指示的随机数有效位数,生成所述随机数;所述随机数有效位数是所述服务端节点基于设定时长内的服务请求的并发量确定的。
3.如权利要求1所述的方法,其特征在于,所述客户端节点根据所述第一时间戳的长度指示、所述第一时间戳和所述随机数,生成随机字符串rs,包括:
所述客户端节点根据进制转换规则,对所述第一时间戳进行转换处理,得到第一字符串,并对所述随机数进行转换处理,得到第二字符串;所述第一字符串所占位数少于所述第一时间戳所占位数;所述第二字符串所占位数少于所述随机数所占位数;
所述客户端节点根据所述第一字符串确定出所述第一时间戳的长度指示;
所述客户端节点依次将所述第一时间戳的长度指示、所述第一字符串和所述第二字符串进行拼接,得到所述rs。
4.如权利要求1所述的方法,其特征在于,在所述客户端节点生成服务请求对应的当前时间戳和随机数之前,还包括:
所述客户端节点从所述服务端节点获取所述时间戳有效位数和所述随机数有效位数。
5.如权利要求4所述的方法,其特征在于,所述客户端节点从所述服务端节点获取所述随机数有效位数,包括:
所述客户端节点周期性地从所述服务端节点获取所述随机数有效位数。
6.一种生成服务请求的方法,其特征在于,包括:
服务端节点接收客户端节点发送的服务请求;所述服务请求携带有随机字符串rs;所述rs是所述客户端节点根据第一时间戳的长度指示、第一时间戳和随机数生成的;所述第一时间戳是所述客户端节点基于所述服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理得到的;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;所述当前时间戳和所述随机数是所述客户端节点基于所述服务请求生成的;
所述服务端节点确定所述服务请求是否可执行。
7.如权利要求6所述的方法,其特征在于,所述服务端节点确定所述服务请求是否可执行,包括:
所述服务端节点对所述rs进行解析处理,得到第一字符串,并根据进制转换规则对所述第一字符串进行转换处理,得到第一时间戳,并确定出所述第一时间戳的位数;所述第一字符串所占位数少于所述第一时间戳所占位数;所述第一时间戳的位数与所述时间戳有效位数相同;
所述服务端节点基于所述第一时间戳的位数对本地的当前时间戳进行截取处理,得到第二时间戳,并对所述第一时间戳和所述第二时间戳进行处理,得到时间差值;所述本地的当前时间戳是所述服务端节点接收所述客户端节点发送的服务请求时生成的;
所述服务端节点确定所述时间差值是否小于等于所述服务请求的有效时长;
所述服务端节点在确定所述时间差值小于等于所述服务请求的有效时长后,确定本地是否缓存有所述rs;
若是,则所述服务端节点确定所述服务请求为不可执行请求,否则确定所述服务请求为可执行请求。
8.如权利要求6所述的方法,其特征在于,在所述服务端节点接收客户端节点发送的服务请求之前,还包括:
所述服务端节点设置所述服务请求的有效时长;
所述服务端节点对所述服务请求的有效时长进行处理,确定出所述服务请求的有效时长对应的时间值,并确定出所述时间值的位数;
所述服务端节点将所述时间值的位数与1进行加和处理,确定出所述时间戳有效位数。
9.如权利要求7所述的方法,其特征在于,所述服务端节点对所述rs进行解析处理,得到第一字符串,包括:
所述服务端节点获取所述第一时间戳的长度指示;
所述服务端节点基于所述第一时间戳的长度指示,对所述rs进行处理,确定出所述第一字符串。
10.如权利要求6所述的方法,其特征在于,在所述服务端节点接收客户端节点发送的服务请求之后,还包括:
所述服务端节点基于请求计时器,统计设定时长内所述客户端节点发送的服务请求;
所述服务端节点周期性地基于所述请求计时器的统计值确定出随机数有效位数;所述随机数有效位数用于所述客户端节点生成符合所述随机数有效位数的第二字符串;所述第二字符串所占位数少于所述随机数所占位数。
11.如权利要求10所述的方法,其特征在于,所述服务端节点基于所述请求计时器的值确定出随机数有效位数,包括:
所述服务端节点获取所述请求计时器的当前统计值;
所述服务端节点将所述请求计时器的当前统计值与设定时长的比值,确定为第一请求值;
所述服务端节点将所述第一请求值与预设冲突概率的比值,确定为第二请求值;
所述服务端节点根据进制转换规则,将所述第二请求值转换为第三字符串,并确定出所述第三字符串的位数;所述第三字符串的位数为所述随机数有效位数。
12.一种生成服务请求的装置,其特征在于,包括:
生成单元,用于生成服务请求对应的当前时间戳和随机数;
第一处理单元,用于基于服务端节点指示的时间戳有效位数,对所述当前时间戳进行截取处理,得到第一时间戳;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;根据所述第一时间戳的长度指示、所述第一时间戳和所述随机数,生成随机字符串rs;向所述服务端节点发送携带所述rs的服务请求;所述rs用于所述服务端节点确定所述服务请求是否可执行。
13.一种生成服务请求的装置,其特征在于,包括:
接收单元,用于接收客户端节点发送的服务请求;所述服务请求携带有随机字符串rs;所述rs是所述客户端节点根据第一时间戳的长度指示、第一时间戳和随机数生成的;所述第一时间戳是所述客户端节点基于所述服务端节点指示的时间戳有效位数,对当前时间戳进行截取处理得到的;所述时间戳有效位数是所述服务端节点根据设定的服务请求的有效时长确定的;所述当前时间戳和所述随机数是所述客户端节点基于所述服务请求生成的;
第二处理单元,用于确定所述服务请求是否可执行。
14.一种计算设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行权利要求1至11任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行权利要求1至11任一项所述的方法。
技术总结