任务处理方法、装置、电子设备及存储介质与流程

摘要: 本技术涉及云计算,尤其涉及一种任务处理方法、装置、电子设备及存储介质。背景技术:1、随着云计算平台的全球化部署,云服务提供商通常需要将业务系统部署至多个地理区域...
任务处理方法、装置、电子设备及存储介质与流程

本技术涉及云计算,尤其涉及一种任务处理方法、装置、电子设备及存储介质。

背景技术:

1、随着云计算平台的全球化部署,云服务提供商通常需要将业务系统部署至多个地理区域(region),每个region拥有独立的数据库实例、存储集群和网络环境,以实现就近接入、数据本地化和容灾高可用。在此架构下,定时任务作为业务系统的基础设施组件,承担着数据采集、计费日志处理、过期数据清理、报表生成等周期性运维和业务支撑工作。在多region部署场景中,系统需对每个region分别执行上述定时任务,且需保证执行结果的一致性、可靠性和可观测性。

2、目前,多region部署下的定时任务执行主要采用单进程手动循环模式:在单进程部署方式下,开发者在每个定时任务方法中手动编写循环逻辑,逐个遍历所有租户,为每个租户手动设置线程上下文后串行执行业务逻辑,执行完毕后手动清理上下文。

3、然而,上述现有技术方案中,在每个定时任务方法中均需重复编写上述循环、上下文设置和清理代码,代码冗余严重,增加了开发成本和维护难度。

技术实现思路

1、本技术提供了一种任务处理方法、装置、电子设备及存储介质,以解决现有技术中在每个定时任务方法中均需重复编写上述循环、上下文设置和清理代码,代码冗余严重,增加了开发成本和维护难度的问题。

2、第一方面,本技术提供了一种任务处理方法,包括:

3、响应于定时任务被触发,通过aop切面拦截所述定时任务对应目标方法的执行,并识别所述目标方法是否携带多租户注解;

4、当所述目标方法携带多租户注解时,获取租户列表及所述租户列表中每个所述租户的标识;

5、针对每个租户,建立包含所述租户标识的线程级上下文,并将所述线程级上下文传播至执行任务的工作线程;

6、在所述工作线程中,根据所述租户标识确定所述租户对应的数据源,并基于所述数据源执行所述目标方法的业务逻辑;

7、执行完毕后清理所述工作线程的线程级上下文。

8、在一个可能的实施方式中,所述方法还包括:

9、在通过aop切面拦截所述定时任务对应目标方法的执行之前,获取分布式锁;

10、当成功获取所述分布式锁时,执行通过aop切面拦截所述定时任务对应目标方法的执行的步骤;

11、在所有租户的业务逻辑执行完毕后,释放所述分布式锁。

12、在一个可能的实施方式中,所述方法还包括:

13、在获取所述租户列表之后,提取所述多租户注解中配置的执行策略;

14、将所述目标方法的业务逻辑封装为可执行任务;

15、根据所述执行策略,将针对每个租户执行所述可执行任务的请求分配至线程池中对应的工作线程。

16、在一个可能的实施方式中,所述根据所述执行策略,将针对每个租户执行所述可执行任务的请求分配至线程池中对应的工作线程,包括:

17、当所述执行策略为自适应策略时,获取所述线程池的活跃线程数及核心线程数;

18、当所述活跃线程数小于所述核心线程数的第一预设比例时,将各租户对应的执行请求并行分配至所述线程池;

19、当所述活跃线程数大于或等于所述核心线程数的所述第一预设比例且小于所述核心线程数的第二预设比例时,将各租户对应的执行请求按预设批次大小分批分配至所述线程池,其中,同一批次内的执行请求并行执行,不同批次之间串行执行;

20、当所述活跃线程数大于或等于所述核心线程数的所述第二预设比例时,将各租户对应的执行请求串行分配至所述线程池。

21、在一个可能的实施方式中,所述根据所述执行策略,将针对每个租户执行所述可执行任务的请求分配至线程池中对应的工作线程,包括:

22、当所述执行策略为并行策略时,将所有租户对应的执行请求同时并行分配至所述线程池;

23、当所述执行策略为串行策略时,将所有租户对应的执行请求按所述租户列表的顺序依次分配至所述线程池;

24、当所述执行策略为批量策略时,将所有租户对应的执行请求按预设批次大小分批分配至所述线程池,同一批次内的执行请求并行执行,不同批次之间串行执行。

25、在一个可能的实施方式中,所述方法还包括:

26、在执行各租户的业务逻辑过程中,对每个租户独立进行异常监测;

27、当任一租户的业务逻辑执行失败时,触发所述租户的独立重试流程,其中,每次重试的等待时间大于前一次重试的等待时间,且所述租户对应的失败事件不影响其他租户的业务逻辑执行;

28、当重试成功时,继续执行所述租户的业务逻辑,当重试失败且重试次数达到预设次数阈值时,确定所述租户的最终执行结果为失败。

29、在一个可能的实施方式中,所述方法还包括:

30、当确定所述租户的最终执行结果为失败时,将所述租户标记为失败状态;

31、记录所述租户的失败日志;

32、根据所述失败日志,生成告警消息。

33、在一个可能的实施方式中,所述方法还包括:

34、通过同步等待机制等待所有租户的业务逻辑执行完毕后,获取所有租户的执行结果;

35、对所有租户的执行结果进行聚合处理,得到所述目标方法对应的任务执行结果;

36、根据所述任务执行结果,生成执行统计信息,并将所述执行统计信息上报至监控系统。

37、第二方面,本技术提供了一种任务处理装置,包括:

38、识别模块,用于响应于定时任务被触发,通过aop切面拦截所述定时任务对应目标方法的执行,并识别所述目标方法是否携带多租户注解;

39、获取模块,用于当所述目标方法携带多租户注解时,获取租户列表及所述租户列表中每个所述租户的标识;

40、建立模块,用于针对每个租户,建立包含所述租户标识的线程级上下文,并将所述线程级上下文传播至执行任务的工作线程;

41、执行模块,用于在所述工作线程中,根据所述租户标识确定所述租户对应的数据源,并基于所述数据源执行所述目标方法的业务逻辑;

42、清理模块,用于执行完毕后清理所述工作线程的线程级上下文。

43、在一个可能的实施方式中,所述装置还包括任务锁控制模块,用于:

44、在通过aop切面拦截所述定时任务对应目标方法的执行之前,获取分布式锁;

45、当成功获取所述分布式锁时,执行通过aop切面拦截所述定时任务对应目标方法的执行的步骤;

46、在所有租户的业务逻辑执行完毕后,释放所述分布式锁。

47、在一个可能的实施方式中,所述装置还包括分配模块,用于:

48、在获取所述租户列表之后,提取所述多租户注解中配置的执行策略;

49、将所述目标方法的业务逻辑封装为可执行任务;

50、根据所述执行策略,将针对每个租户执行所述可执行任务的请求分配至线程池中对应的工作线程。

51、在一个可能的实施方式中,所述分配模块,具体用于:

52、当所述执行策略为自适应策略时,获取所述线程池的活跃线程数及核心线程数;

53、当所述活跃线程数小于所述核心线程数的第一预设比例时,将各租户对应的执行请求并行分配至所述线程池;

54、当所述活跃线程数大于或等于所述核心线程数的所述第一预设比例且小于所述核心线程数的第二预设比例时,将各租户对应的执行请求按预设批次大小分批分配至所述线程池,其中,同一批次内的执行请求并行执行,不同批次之间串行执行;

55、当所述活跃线程数大于或等于所述核心线程数的所述第二预设比例时,将各租户对应的执行请求串行分配至所述线程池。

56、在一个可能的实施方式中,所述分配模块,还用于:

57、当所述执行策略为并行策略时,将所有租户对应的执行请求同时并行分配至所述线程池;

58、当所述执行策略为串行策略时,将所有租户对应的执行请求按所述租户列表的顺序依次分配至所述线程池;

59、当所述执行策略为批量策略时,将所有租户对应的执行请求按预设批次大小分批分配至所述线程池,同一批次内的执行请求并行执行,不同批次之间串行执行。

60、在一个可能的实施方式中,所述装置还包括重试模块,用于:

61、在执行各租户的业务逻辑过程中,对每个租户独立进行异常监测;

62、当任一租户的业务逻辑执行失败时,触发所述租户的独立重试流程,其中,每次重试的等待时间大于前一次重试的等待时间,且所述租户对应的失败事件不影响其他租户的业务逻辑执行;

63、当重试成功时,继续执行所述租户的业务逻辑,当重试失败且重试次数达到预设次数阈值时,确定所述租户的最终执行结果为失败。

64、在一个可能的实施方式中,所述装置还包括告警模块,用于:

65、当确定所述租户的最终执行结果为失败时,将所述租户标记为失败状态;

66、记录所述租户的失败日志;

67、根据所述失败日志,生成告警消息。

68、在一个可能的实施方式中,所述装置还包括上报模块,用于:

69、通过同步等待机制等待所有租户的业务逻辑执行完毕后,获取所有租户的执行结果;

70、对所有租户的执行结果进行聚合处理,得到所述目标方法对应的任务执行结果;

71、根据所述任务执行结果,生成执行统计信息,并将所述执行统计信息上报至监控系统。

72、第三方面,本技术提供了一种电子设备,包括:处理器和存储器,所述处理器用于执行所述存储器中存储的任务处理程序,以实现第一方面中任一项所述的任务处理方法。

73、第四方面,本技术提供了一种存储介质,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现第一方面中任一项所述的任务处理方法。

74、第五方面,本技术提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的任务处理方法。

75、本技术实施例提供的上述技术方案与现有技术相比具有如下优点:本技术实施例提供的该方法,通过aop切面拦截定时任务对应目标方法的执行并识别是否携带多租户注解,在携带注解时自动获取租户列表并为每个租户建立独立的线程级上下文,将多租户分发逻辑与业务逻辑完全解耦,开发者仅需添加注解即可实现多租户任务的自动分发,解决了现有技术中因手动编写租户循环、上下文设置和清理代码所导致的代码冗余、开发效率低的问题;同时,通过将各租户的线程级上下文传播至各自的工作线程,使各租户的业务逻辑在独立线程中并行执行,克服了现有技术中串行循环执行导致的效率瓶颈;并且,各租户在独立的工作线程中根据自身租户标识确定对应的数据源并执行业务逻辑,实现了租户间的线程级上下文隔离和动态数据源路由,业务代码无需感知多租户逻辑和数据源切换,执行完毕后自动清理工作线程的线程级上下文,避免了上下文残留对后续任务的影响,从而在降低开发成本和维护难度的同时,提升了系统的执行效率和稳定性。