专利名称:一种异步程序处理方法、系统及计算机设备
专利类型:实用新型专利
专利申请号:CN202410842628.X
专利申请(专利权)人:上海甄零科技有限公司,上海甄一科技有限公司
权利人地址:上海市浦东新区中国(上海)自由贸易试验区芳春路400号1幢3层
专利发明(设计)人:曾于川,惠鹏程,檀建军,郑翔天
专利摘要:本申请涉及计算机程序处理技术领域,具体涉及一种异步程序处理方法、系统及计算机设备。本申请方案通过基于资源协调‑程序执行设计模式,建立相互独立的资源协调服务和程序服务分别监控和执行程序,使得资源协调服务和程序执行在逻辑上和物理上解耦,资源协调服务独立执行来监控检测程序执行的心跳,可以及时发现潜在的问题及宕机情况,并基于服务高可用性迅速将宕机程序分配到到其他未宕机的服务实例上再次重试,确保了任务的连续性和完整性,有助于增强系统的健壮性、可维护性和可观察性,提高了系统的稳定性、效率、用户体验。
主权利要求:
1.一种异步程序处理方法,其特征在于,所述方法包括:创建相互独立的资源协调服务和程序执行服务;
将待执行异步程序封装添加到预设消息队列,并为所述异步程序设置补偿重试标识;
基于所述程序执行服务创建一个或多个服务实例;
根据所创建的服务实例执行所述异步程序,并向所述资源协调服务发送异步程序的心跳信息;
所述资源协调服务根据所述异步程序的心跳判断所述异步程序执行是否宕机;
若宕机,则修改所述异步程序的补偿重试标识,并触发宕机重试;
其中,所述根据所创建的服务实例执行所述异步程序,包括:获取所述异步程序的补偿重试标识;
若所述补偿重试标识为第一值,则向分布式锁服务请求获取分布式锁后,执行所述异步程序业务逻辑;
若所述补偿重试标识为第二值,则释放分布式锁及缓存数据,并重新请求分布式锁后执行所述异步程序业务逻辑。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:根据所述异步程序的执行时长设置分布式锁的超时时间参数。
3.根据权利要求1所述的方法,其特征在于,所述资源协调服务根据所述异步程序的心跳判断异步程序执行是否宕机,包括:查询正在执行的异步程序,读取并检测对应异步程序的心跳信息;
若在预设的时间窗内没有接收到正在执行异步程序的心跳,则监测对应服务实例的容器;
若对应服务实例的容器异常,则确定异步程序执行宕机。
4.根据权利要求1所述的方法,其特征在于,所述触发宕机重试包括:获取宕机异步程序ID,将所述宕机异步程序重新添加到队列中;
将所述宕机异步程序转移到未宕机目标服务实例进行重试。
5.根据权利要求4所述的方法,其特征在于,所述将所述宕机异步程序转移到未宕机目标服务实例进行重试,还包括:为每个未宕机服务实例分配权重,并计算各未宕机服务实例的累积权重:a[i]=a[i‑1]+wi,a[0]=0;
生成随机数r并对随机数进行取模:I=rmoda[n];
匹配得到目标服务实例k:k=min{i∣I≤a[i],1≤i≤n};
其中,k是满足条件的第一个服务实例的索引,wi为第i个服务实例的权重,n为未宕机服务实例的数量;
更新所述目标服务实例权重;
将所述宕机异步程序转到所述目标服务实例重试执行。
6.根据权利要求5所述的方法,其特征在于,所述为每个未宕机服务实例分配权重,包括:其中,wi为第i个服务实例的权重,Rij第i个服务实例在第j个资源维度上的量化评分, 为第j个资源维度的权重,Ti、Li、Ei分别为第i个实例的平均响应时间、负载量、历史故障的量化评分,α、β、γ分别对应的权重。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述宕机重试包括:记录宕机异步程序重试次数;
若所述重试次数小于预设阈值,则根据指数退避算法设置时间间隔执行重试:其中,Ti为第i次重试的时间间隔,b为预设指数底数,c为调节系数;
若所述重试次数大于等于预设阈值,终止所述异步程序执行,生成日志信息并发送异步程序执行异常通知。
8.一种计算机异步程序处理系统,其特征在于,所述系统包括:服务创建模块,用于创建相互独立的资源协调服务模块和程序执行服务模块;
消息队列模块,用于将待执行异步程序封装添加到预设消息队列,并为所述异步程序设置补偿重试标识;
所述程序执行服务模块,用于创建一个或多个服务实例,并根据所创建的服务实例执行所述异步程序,及向所述资源协调服务模块发送所述异步程序的心跳信息;
所述资源协调服务模块,用于根据所述异步程序的心跳判断异步程序执行是否宕机,若宕机,则修改对应异步程序的补偿重试标识,并触发宕机重试;
其中,所述根据所创建的服务实例执行所述异步程序,包括:获取所述异步程序的补偿重试标识;
若所述补偿重试标识为第一值,则向分布式锁服务请求获取分布式锁后,执行所述异步程序业务逻辑;
若所述补偿重试标识为第二值,则释放分布式锁及缓存数据,并重新请求分布式锁后执行所述异步程序业务逻辑。
9.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。 说明书 : 一种异步程序处理方法、系统及计算机设备技术领域[0001] 本申请涉及计算机程序处理技术领域,具体涉及一种异步程序处理方法、系统及计算机设备。背景技术[0002] 随着计算机信息技术的飞速发展,现代软件系统中对于并发和异步处理的需求日益增加,异步程序执行不仅能够提高系统的响应性和吞吐量,还能有效避免资源阻塞,提高资源利用率。[0003] 虽然程序的异步执行与处理广泛应用于各种计算机系统中,然而传统的异步程序执行系统往往缺乏对执行节点的有效监控和管理:一方面,传统异步任务执行时资源协调和任务执行常常紧密耦合,这限制了系统的灵活性和可扩展性,当任务执行节点出现故障时,缺乏有效的监控机制、故障转移和恢复机制,一旦执行节点出现宕机或其他异常情况,整个服务可能会受到严重影响。另一方面,现有的处理系统在执行和管理上通常采用静态策略,难以适应复杂多变的业务需求,导致任务执行效率低下或失败。因此,如何高效、有序、稳定地管理并执行这些异步程序,确保资源的合理分配和有效利用,成为了当前技术领域的一个亟待解决的问题。发明内容[0004] 基于此,本申请针对上述问题,提出了一种异步程序处理方法及系统,旨在高效、有序、稳定地管理并执行异步程序,并确保资源的合理分配和有效利用。[0005] 本申请一方面提供一种异步程序处理方法,其特征在于,所述方法包括:[0006] 创建相互独立的资源协调服务和程序执行服务;[0007] 将待执行异步程序封装添加到预设消息队列,并为所述异步程序设置补偿重试标识;[0008] 基于所述程序执行服务创建一个或多个服务实例;[0009] 根据所创建的服务实例执行所述异步程序,并向所述资源协调服务发送异步程序的心跳信息;[0010] 所述资源协调服务根据所述异步程序的心跳判断所述异步程序执行是否宕机;[0011] 若宕机,则修改所述异步程序的补偿重试标识,并触发宕机重试。[0012] 优选地,所述基于所述异步程序服务的服务实例执行所述异步程序,包括:[0013] 根据所述异步程序的执行时长设置分布式锁的超时时间参数;[0014] 获取所述异步程序的补偿重试标识;[0015] 若所述补偿重试标识为第一值,则向分布式锁服务请求获取分布式锁后,执行所述异步程序业务逻辑;[0016] 若所述补偿重试标识为第二值,则释放分布式锁及缓存数据,并重新请求分布式锁后执行所述异步程序业务逻辑。[0017] 优选地,所述所述资源协调服务根据所述异步程序的心跳判断异步程序执行是否宕机,包括:[0018] 查询正在执行的异步程序,读取并检测对应异步程序的心跳信息;[0019] 若在预设的时间窗内没有接收到正在执行异步程序的心跳,则监控对应服务实例的容器;[0020] 若对应服务实例的容器异常,则确定当前异步程序宕机。[0021] 优选地,所述方法还包括:[0022] 获取宕机异步程序ID,将所述宕机异步程序重新添加到队列中;[0023] 将所述宕机异步程序转移到未宕机目标服务实例进行重试。[0024] 优选地,将所述宕机异步程序转移到未宕机目标服务实例进行重试,包括:[0025] 为每个未宕机服务实例的分配权重,并计算各未宕机服务实例的累积权重:[0026] a[i]=a[i‑1]+wi,a[0]=0;[0027] 生成随机数r并对随机数进行取模:I=rmoda[n];[0028] 匹配得到目标服务实例k:k=min{i∣I≤a[i],1≤i≤n};[0029] 其中,k是满足条件的第一个服务实例的索引,wi为第i个服务实例的权重,n为未宕机服务实例的数量;[0030] 更新所述目标服务实例权重;[0031] 将所述宕机异步程序转到所述目标服务实例重试执行。[0032] 进一步地,所述为每个未宕机服务实例的分配权重,包括:[0033][0034] 其中,wi为第i个服务实例的权重,Rij第i个服务实例在第j个资源维度上的量化评分, 为第j个资源维度的权重,Ti、Li、Ei分别为第i个实例的平均响应时间、负载量、历史故障的量化评分,α、β、γ分别对应的权重。[0035] 优选地,所述宕机重试包括:[0036] 记录宕机异步程序重试次数;[0037] 若所述重试次数小于预设阈值,则根据指数退避算法设置时间间隔执行重试:[0038] ,Ti为第i次重试的时间间隔,b为预设指数底数,c为调节系数;[0039] 若所述重试次数大于等于预设阈值,终止所述异步程序执行,生成日志信息并发送异步程序执行异常通知。[0040] 本申请第二方面提供一种计算机异步程序处理系统,所述系统包括:[0041] 服务创建模块,用于创建相互独立的资源协调服务模块和程序执行服务模块;[0042] 消息队列模块,用于将待执行异步程序封装添加到预设消息队列,并为所述异步程序设置补偿重试标识;[0043] 所述程序执行服务模块,用创建一个或多个服务实例,并执行所述异步程序,及向所述资源协调服务模块发送所述异步程序的心跳信息;[0044] 所述资源协调服务模块,用于根据所述异步程序的心跳判断异步程序执行是否宕机,若宕机,则修改对应异步程序的补偿重试标识,并触发宕机重试。[0045] 本申请三方面提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述任一项所述方法的步骤。[0046] 本申请第四方面提供一种计算机终端设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述任一项所述方法的步骤。[0047] 本申请上述提供的异步程序处理方案,基于资源协调‑程序执行设计模式,建立相互独立的资源协调服务和程序服务分别监控和执行程序,使得资源协调服务和程序执行在逻辑上和物理上解耦,资源协调服务独立执行来监控检测程序执行的心跳,可以及时发现潜在的问题及宕机情况,并基于服务高可用性迅速将宕机程序分配到到其他未宕机的服务实例上再次重试,确保了任务的连续性和完整性,有助于增强系统的健壮性、可维护性和可观察性,提高了系统的稳定性、处理效率、用户体验。进一步地,本申请的方案在异步程序宕机重试时,通过负载均衡优化算法进行匹配目标服务实例,确保任务或程序根据实例的处理能力进行分配,有效均衡了各个服务实例的负载,优化了资源的使用效率。附图说明[0048] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0049] 其中:[0050] 图1为一个实施例中的异步程序处理方法流程图;[0051] 图2为一个实施例中的异步程序处理过程流程框图;[0052] 图3为一个实施例中的计算机异步程序处理系统结构框图;[0053] 图4为一个实施例中计算机设备的结构框图。具体实施方式[0054] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0055] 本申请的说明书和权利要求书及上述附图中的术语“包括”、“包含”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。在本申请的权利要求书、说明书以及说明书附图中的术语,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体/操作/对象与另一个实体/操作/对象区分开来,而不一定要求或者暗示这些实体/操作/对象之间存在任何这种实际的关系或者顺序。[0056] 在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位移出现该短语并不一定均是指相同的实施例,也不是与其他实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其他实施例相结合。[0057] 需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。[0058] 在一个实施方式中,如图1所示为本申请的一种异步程序处理方法流程图,所述方法包括:[0059] S10、创建相互独立的资源协调服务和程序执行服务。[0060] 具体地,本申请的一个异步程序处理实施方式中,将监控调度和程序执行采用相互独立分离的设计模式,其中,资源协调服务主要负责异步程序的调度和监控,程序执行服务主要负责执行各种任务或应用程序,并提供必要的运行环境和服务支持。本申请的实施例中资源协调服务和程序服务可以分布在不同的计算机节点执行,也可以在同一计算机节点执行,可以采用独立的微服务、容器化(docker)或虚拟机等技术。[0061] 在一些实施例中,本申请将资源协调服务和程序执行服务分别容器化,使用Docker容器技术,并采用Kubernetes等容器编排工具来管理服务的部署、扩展和自动恢复,并通过独立部署,确保监控服务和程序执行服务在不同的容器或集群中相互独立。[0062] 本申请上述方案通过创建相互独立的资源协调服务及程序服务,确保它们在相互独立隔离的环境中运行,服务和程序执行服务在逻辑上和物理上都是解耦的,增强系统的健壮性、可维护性和可观察性。[0063] S11、将待执行异步程序封装添加到预设消息队列,并为所述异步程序设置补偿重试标识。[0064] 具体地,在本申请的一个实施例中通过消息队列的方式来处理待处理的异步程序,将待执行异步程序封装添加到预设消息队列可以由系统相应的消息服务执行,也可以由资源协调服务调用相应的消息服务执行,具体包括:[0065] S111、选择一个适合消息队列系统来存储和管理异步任务,如RabbitMQ、Kafka、AmazonSQS、GoogleCloudPub/Sub等。[0066] S112、定义消息的格式,根据业务逻辑和性能需求在消息队列系统中创建一个或多个队列,用于存储待处理的消息,以实现更细粒度的控制和优化。优选地,本申请定义消息包含消息标识、消息类型、程序标识、程序地址、程序状态、输入参数、优先级、调用服务实例参数等相关信息;[0067] S113、将所述待执行异步程序封装为消息,并发送到预设的消息队列中,发送消息时,可以指定目标队列、消息的优先级、延迟发送时间等选项。[0068] 进一步地,本申请一些实施例中还为每个异步程序设置补偿重试标识forceFlag,所述补充重试标识用于确定当前该程序的执行是否为重试执行,以让程序执行服务根据该标识采用不同的策略执行,补偿重试标识forceFlag初始赋值为0。[0069] S12、基于所述程序执行服务创建一个或多个服务实例。[0070] 在分布式系统或微服务架构中,每个服务实例都是该服务的一个单独副本,它在物理或虚拟环境中独立运行,并具有自己的资源分配(如CPU、内存、磁盘空间等)和网络地址(如IP地址和端口号)。[0071] 优选地,本申请在程序执行服务中建立多个服务实例,具体包括:基于容器或虚拟机上部署服务的多个副本实例,以及每个实例所需的计算、存储和网络资源,并为每个服务实例配置相应的服务接口、访问点和环境等,环境包括操作系统、数据库、中间件等,确保它们可以接收和响应请求。然后,使用服务注册中心来注册每个服务实例,并允许客户端或负载均衡器发现可用的服务实例。进一步,通过负载均衡器将请求分发到不同的服务实例,以平衡负载并提高响应速度。并定期对服务实例进行健康检查,以确保它们正常运行,并在检测到问题时触发故障转移。[0072] 本申请上述方案通过在程序执行服务中建立一个或多个服务实例执行异步程序,提高了系统的吞吐量和可用性,并确保服务可以独立部署、扩展及高可用性。[0073] S13、根据所创建的服务实例执行所述异步程序,并向所述资源协调服务发送所述异步程序的心跳信息。[0074] 具体地,服务实例从消息队列中拉取或接收推送消息,解析消息内容,提取任务数据。通过调用预设的API、执行相应的计算或数据处理来执行异步程序或任务,然后将程序执行结果存储到数据库、缓存或其他存储系统中,以便后续使用或查询。[0075] 进一步地,本申请的实施方案中,服务实例在执行所述异步程序时,会同时在线程中开启一个监听线程去定时上报心跳,并按预设的时间间隔,如5s、10s、30s、60s、100s等,向资源协调服务发送当前异步程序的心跳信息。优选地,可以通过预设的API或创建相应的函数将心跳信息发送到相应的消息队列或数据库或API端点,然后由资源协调服务从相应的队列、数据库、API数据端中读取。[0076] 更为具体地,本申请一些实施例中,基于所述异步程序服务的服务实例执行异步程序时的执行逻辑和步骤,包括:[0077] S131、根据所述异步程序执行时长设置分布式锁的超时时间参数。[0078] 具体地,选择预设的分布式锁实现方式,如基于Redis、Zookeeper等实现的分布式锁,如采用Redis的setnx命令可用于实现分布式锁。同时,为了避免死锁,需要给锁设置超时时间参数,本申请一个实施例中,根据当前异步程序的执行时长tc参数来设置锁的超时时间参数t:tc[0079] S132、获取所述异步程序的补偿重试标识。[0080] 具体地,所述服务实例在执行异步程序业务逻辑前,获取待执行异步程序的补偿重试标识,并根据所述异步程序的补偿重试标识值来判断是否当前异步程序执行是否为重试执行。优选地,补偿重试标识forceFlag的值包括0、1两个值。[0081] S133、若所述补偿重试标识为第一值,向分布式锁服务请求获取分布式锁,执行所述异步程序业务逻辑。[0082] 具体地,所述异步程序的补偿重试标识forceFlag=0,即表明当前异步程序执行为非重试执行,则服务实例向布式锁服务发送获取分布式锁的请求,以获取分布式锁,若成功获取锁,则开始处理任务;否则,等待或重试获取锁,任务处理完成后,释放分布式锁。[0083] S134、若所述补偿重试标识为第二值,则释放分布式锁及缓存数据,并重新请求分布式锁后,执行所述异步程序业务逻辑。[0084] 具体地,所述异步程序的补偿重试标识forceFlag=1,即表明当前异步程序执行为重试执行,则服务实例释放分布式锁及并释放缓存数据后,重新向布式锁服务发送获取分布式锁的请求,以获取分布式锁,若成功获取锁,则开始处理任务,任务处理完成后,释放分布式锁。[0085] S14、所述资源协调服务根据所述异步程序的心跳判断异步程序执行是否宕机。[0086] 具体地,资源协调服务通过心跳判断正在执行异步程序是否宕机,包括:[0087] 资源协调服务查询正在执行的异步程序,并从相应的队列、数据库或API数据端中读取正在执行异步程序的心跳信息读取并进行检测:所述所述资源协调服务设置一个时间阈值,所述时间阈值通常设置是心跳间隔的几倍以上,检查最近接收到的心跳消息的时间戳,若在预设的时间阈值窗内没有接收到正在执行异步程序的心跳,那么可以认为异步程序已经可能异常或变得无响应。所述所述资源协调服务则进一步调取及监测对应服务实例的容器是否异常,包括:检测对应服务实例的容器中的CPU、内存、磁盘和网络状况,若对应服务实例的容器异常,则确定当前异步程序宕机。[0088] S15、若宕机,则修改宕机异步程序的补偿重试标识,并触发宕机重试。[0089] 具体地,若资源协调服务根据心跳信息判断异步程序执行宕机,则修改对应宕机异步程序的补偿重试标识forceFlag的值为1,以告知异步程序执行服务为该异步程序为宕机重试,使得异步程序执行服务再次执行该异步程序时,采用对应的执行策略执行该异步程序。在检测到宕机时,所述资源协调服务在日志系统中记录宕机事件,包括程序ID、宕机时间、可能的错误信息等。[0090] 优选地,所述方法还包括:[0091] S151、获取宕机异步程序ID,将所述宕机异步程序重新添加到队列中。[0092] 具体地,获取所述宕机异步程序ID,并为该异步程序构建一个新的任务消息,并将该消息发送到任务队列中,同时,为了避免将同一个任务多次添加到队列中,本申请还采用去重机制去重:使用Redis等数据结构来跟踪哪些任务已经被重新添加,在将任务添加到队列之前,先检查Redis中是否存在该任务的ID。[0093] 进一步地,在重新入队过程中,添加相应的错误处理逻辑来处理可能发生的异常或失败情况。例如,如果无法连接到任务队列系统或无法发送消息,程序应捕获这些异常并记录错误日志。[0094] S152、将所述宕机异步程序转移到未宕机目标服务实例进行重试。[0095] 具体地,当异步程序宕机时,程序执行服务因为宕机导致的程序执行异常结束,进一步可以自动从可从服务列表中移除该服务实例,并基于服务发现机制(如Consul、Eureka、ZooKeeper等)来动态获取可用未宕机的服务实例,并通过预设负载均衡算法选择一个目标服务实例进行重试。[0096] 优选地,本申请一个实施例中,通过基于加权轮询负载均衡算法匹配未宕机目标服务实例。包括:[0097] S1521、为每个未宕机服务实例的分配权重:[0098][0099] 其中,wi为第i个服务实例的权重,Rij第i个服务实例在第j个资源维度上的量化评分,包括:CPU评分、内存评分、存储评分及其他资源维度上的评分, 为第j个资源维度的权重,Ti、Li、Ei分别为第i个实例的平均响应时间、负载量、历史故障的量化评分,α、β、γ分别对应的权重。[0100] S1522、计算各未宕机服务实例的累积权重:a[i]=a[i‑1]+wi,其中a[0]=0;[0101] S1523、生成随机数r并对随机数进行取模:I=rmoda[n];[0102] S1524、匹配得到目标服务实例k:k=min{i∣I≤a[i],1≤i≤n},其中,k是满足条件的第一个服务实例的索引,n为未宕机服务实例的数量,[0103] S1525、更新所述目标服务实例权重;[0104] 将所述宕机异步程序转到所述目标服务实例重试执行。[0105] 本申请上述实施例通过给每个服务实例分配不同的权重值,进而加权轮询方式确定宕机程序应该转移到对应健康目标实例中执行,可以根据服务的性能和负载情况动态调整权重,确保任务在健康实例之间得到均衡分配,从而提高系统的可用性和稳定性。[0106] 进一步地,本申请一些实施例中,当匹配到目标服务实例后,在程序任务从队列中取出时,获取一个与该异步程序ID或唯一标识符相关的锁,或者设置标记、参数与目标服务实例进行关联,如通过在程序数据中添加一个字段来实现或消息设定服务实例参数,该字段或参数包含处理该任务的实例的标识符,然后,服务实例可以检查这个字段以确保它只处理与其自身标识符匹配的任务。[0107] 优选地,在一些实施例中,宕机异步程序重试还包括:[0108] 记录宕机异步程序重试次数;[0109] 若所述重试次数小于预设阈值,则根据指数退避算法设置时间间隔执行重试:[0110] ,Ti为第i次重试的时间间隔,b为预设指数底数,c为调节系数;[0111] 若所述重试次数大于等于预设阈值,终止所述异步程序执行,生成日志信息并发送异步程序执行异常通知。[0112] 在一个实施例中,如图2所示为本申请基于资源协调服务‑程序执行服务设计模式进行异步程序处理过程流程图。[0113] 本申请上述实施例在重试时,通过判断重试的次数,若在预设次数内则根据指数退避算法进行确定时间进行重试,有效减少了在连续失败后立即重新发送请求的频率,降低了在短时间内产生大量重试请求的可能性,从而减少了网络拥塞的风险。同时随着退避时间的增加,网络拥塞的可能性降低,这增加了在后续重试或重试时操作成功的可能性,特别是在处理限流或API调用频率限制时,指数退避策略可以确保客户端在重试之前等待足够的时间,以避免因频率过高而被拒绝。[0114] 本申请上述实施方案通过基于资源协调‑程序执行设计模式,建立相互独立的资源协调服务和程序服务分别监控和执行程序,使得资源协调服务和程序执行在逻辑上和物理上解耦,资源协调服务独立执行来监控检测程序执行的心跳,可以及时发现潜在的问题及宕机情况,并基于服务高可用性迅速将宕机程序分配到到其他未宕机的服务实例上再次重试,确保了任务的连续性和完整性,有助于增强系统的健壮性、可维护性和可观察性,提高了系统的稳定性、效率、用户体验。[0115] 在一个实施例中,如图3为本申请提供的一种计算机异步程序处理系统的结构框图(图中的箭头仅是简单关系示意),所述系统包括:[0116] 服务创建模块,用于创建相互独立的资源协调服务模块和程序执行服务模块;[0117] 消息队列模块,用于将待执行异步程序封装添加到预设消息队列,并为所述异步程序设置补偿重试标识;[0118] 所述程序执行服务模块,用创建一个或多个服务实例,并执行所述异步程序,及向所述资源协调服务模块发送所述异步程序的心跳信息;[0119] 所述资源协调服务模块,用于根据所述异步程序的心跳判断异步程序执行是否宕机,若宕机,则修改对应异步程序的补偿重试标识,并触发宕机重试。[0120] 在一个实施例中,本申请还提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行以下的步骤:[0121] 创建相互独立的资源协调服务和程序执行服务;[0122] 将待执行异步程序封装添加到预设消息队列,并为所述异步程序设置补偿重试标识;[0123] 基于所述程序执行服务创建一个或多个服务实例;[0124] 根据所创建的服务实例执行所述异步程序,并向所述资源协调服务发送异步程序的心跳信息;[0125] 所述资源协调服务根据所述异步程序的心跳判断所述异步程序执行是否宕机;[0126] 若宕机,则修改所述异步程序的补偿重试标识,并触发宕机重试。[0127] 在一个实施例中,如图4所示本申请还提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行以下步骤:[0128] 创建相互独立的资源协调服务和程序执行服务;[0129] 将待执行异步程序封装添加到预设消息队列,并为所述异步程序设置补偿重试标识;[0130] 基于所述程序执行服务创建一个或多个服务实例;[0131] 根据所创建的服务实例执行所述异步程序,并向所述资源协调服务发送异步程序的心跳信息;[0132] 所述资源协调服务根据所述异步程序的心跳判断所述异步程序执行是否宕机;[0133] 若宕机,则修改所述异步程序的补偿重试标识,并触发宕机重试。[0134] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。[0135] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。[0136] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
专利地区:上海
专利申请日期:2024-06-27
专利公开日期:2024-09-03
专利公告号:CN118394531B