本申请属于分布式架构,具体涉及一种分布式架构下的请求防重方法和装置。
背景技术:
1、在分布式架构下,多个微服务组成集群对外提供服务,外部发起请求后,由集群中任一微服务节点接收请求,集群服务到单个微服务节点的转移对外部服务来说是完全透明的。
2、分布式架构的可扩展性及稳定性均强于集中式的架构,但网络异常或服务异常的处理,也会比集中式架构更复杂。外部服务在发起请求后,为保证能充分利用分布式集群中的所有节点,在由集群到具体微服务节点实例的过程中,往往是采用负载均衡的策略,即多次请求会分散到集群的各个节点实例上进行处理,这样就会带来比集中式部署更多的问题,如外部请求超时时,自动发起重发,两次接收请求的服务实例无法保证一定相同,因而也无法判断上次请求是否收到,导致不能正确响应重发的请求。
3、当前技术领域中,现有处理请求重复的技术,并没有一个通用或者系统的策略。主要分为两种,一是处理请求前,将请求存储于数据库或缓存中,基于请求本身做防重。二是对请求不做重复的校验,单纯对后续的业务逻辑做出幂等的要求,即希望在业务处理逻辑中,从业务数据的角度触发,定制各个场景下的防重、续做或重做策略。
4、第一种现有处理方式,在处理请求前,将请求存储于数据库或分布式缓存中,基于请求本身做防重,此种方式,对发生重复时的处理策略考虑不清晰,也未深入到需要重做或续做请求时,重做和续做的记录重复登记的问题,同时,基于请求报文内容本身做防重,在检索和查询过程中的速度,也是需要考虑的因素;第二种现有处理方式,不针对请求做重复的校验,单纯对后续的业务逻辑做出幂等的要求,这种方式触发了本无需触发的业务处理流程,造成了额外的性能损耗,把技术问题解决的代价转价到了业务逻辑中,更是产生了潜在的业务风险。
技术实现思路
1、本申请提出了一种分布式架构下的请求防重方法和装置,旨在解决在分布式环境下,在发起任务请求时,因为重复点击或超时重传等原因,导致启动(首次触发)、续作或重做请求的重复发送,引发的接收方重复处理的问题。
2、依据本申请的第一方面,提出了一种分布式架构下的请求防重方法,包括如下步骤:
3、对接收的每条请求生成一条请求记录,所述请求记录按照微服务集群的数据库中的请求登记表的字段格式生成,所述请求记录的字段包括:请求编号、请求报文内容、请求摘要字符串;其中所述请求摘要字符串作为每条请求记录在所述请求登记表中的唯一索引字段,是根据请求报文内容利用摘要算法生成;
4、将所述请求记录向所述请求登记表中进行尝试存储;
5、在未发生唯一索引字段冲突时,所述请求记录被成功存入所述请求登记表中,开始业务处理逻辑;
6、在发生唯一索引字段冲突时,查询所述请求登记表中发生冲突的已存储请求记录,判断待存储请求记录的请求报文内容与所述已存储请求记录的请求报文内容是否一致;
7、如果待存储请求记录的请求报文内容与所述已存储请求记录的请求报文内容一致,则返回请求重复的报错信息。
8、依据本申请的第二方面,提出了一种分布式架构下的请求防重装置,包括如下单元:
9、请求记录生成单元,用于对接收的每条请求生成一条请求记录,所述请求记录按照微服务集群的数据库中的请求登记表的字段格式生成,所述请求记录的字段包括:请求编号、请求报文内容、请求摘要字符串;其中所述请求摘要字符串作为每条请求记录在所述请求登记表中的唯一索引字段,是根据请求报文内容利用摘要算法生成;
10、尝试存储单元,用于将所述请求记录向所述请求登记表中进行尝试存储;
11、存储成功处理单元,用于在未发生唯一索引字段冲突时,所述请求记录被成功存入所述请求登记表中,开始业务处理逻辑;
12、冲突查询单元,用于在发生唯一索引字段冲突时,查询所述请求登记表中发生冲突的已存储请求记录,判断待存储请求记录的请求报文内容与所述已存储请求记录的请求报文内容是否一致;
13、防重报错单元,用于如果待存储请求记录的请求报文内容与所述已存储请求记录的请求报文内容一致,则返回请求重复的报错信息。
14、相比于现有技术,本申请实施例的技术方案的有益效果是:
15、本申请方案首先对接收的每条请求生成一条请求记录,该请求记录的字段包括:请求编号、请求报文内容、请求摘要字符串;其中所述请求摘要字符串是根据请求报文内容利用摘要算法生成,并作为每条请求记录在请求登记表中的唯一索引字段;在将生成的请求记录向所述请求登记表中进行尝试存储时,若发生了唯一索引字段冲突,则查询所述请求登记表中发生冲突的已存储请求记录,判断待存储请求记录的请求报文内容与所述已存储请求记录的请求报文内容是否一致,如果两条记录的请求报文内容一致,很显然接收到的请求为一条重复发送的请求,则返回请求重复的报错信息,实现了分布式架构下的请求防重。可见本申请方案在现有的记录登记的层面,基于基础的请求登记功能的同时,通过摘要算法值进行报文内容压缩,简化了请求报文检索方式,提高查询速度与效率,实现了分布式架构下的请求防重的功能的同时增强了检索的性能。
1.一种分布式架构下的请求防重方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
3.根据权利要求1或2所述的方法,其特征在于,在对接收的每条请求生成一条请求记录之前,所述方法还包括:
4.根据权利要求3所述的方法,其特征在于,如果是续做请求,所述对接收的每条请求生成一条请求记录具体包括:
5.根据权利要求3所述的方法,其特征在于,如果是重做请求,所述对接收的每条请求生成一条请求记录具体包括:
6.一种分布式架构下的请求防重装置,其特征在于,包括如下单元:
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
8.根据权利要求6或7所述的装置,其特征在于,所述装置还包括:
9.根据权利要求8所述的装置,其特征在于,如果是续做请求,所述请求记录生成单元具体用于:
10.根据权利要求8所述的装置,其特征在于,如果是重做请求,所述请求记录生成单元具体用于: