大用户量任务快速拆分处理方法、系统及计算机与流程

文档序号:26278894发布日期:2021-08-13 19:35阅读:111来源:国知局
大用户量任务快速拆分处理方法、系统及计算机与流程

本发明涉及数据处理领域,特别涉及一种大用户量任务快速拆分处理方法、系统及计算机。



背景技术:

在业务系统中,经常会有针对大用户量进行某一处理任务的功能,如对所有注册用户发送生日祝福消息的任务,此时需要将祝福消息在一小时内发送给相应的注册用户。而目前的大用户量任务的处理装置,一般都是使用高性能数据库保存用户信息,然后程序开启多个线程,通过对用户信息进行分片,每个线程分配到指定片区后,线程按指定可处理的单次最大用户数,从数据库中获取对应片区用户后进行处理。

一般数据库通过多线程进行处理时,大用户量任务的拆分与处理过程是同时进行的。随着业务系统的注册用户量不断增长,因数据库性能限制,并发线程并不能无限制增加,这样导致处理速度会受限制。而多线程在处理数据时,又很容易因处理中断,导致重复处理、错漏处理、超时处理等,造成业务上的不可靠问题。



技术实现要素:

为解决如何将任务先进行拆分到指定大小,再由多线程方式进行快速处理的技术问题,本发明提供一种大用户量任务快速拆分处理方法、系统及计算机。

本发明实施例一方面提供一种大用户量任务快速拆分处理方法,其针对将用户总列表拆分成指定大小,所述拆分处理方法包括如下步骤:

步骤s1,接收外部系统提交的用户总列表和任务内容,并将所述用户总列表和所述任务内容进行关联;

步骤s2,根据所述任务内容,配置相应的最大可处理用户量,并对所述用户总列表进行预拆分,得到相应的多个预拆分用户分列表;所述预拆分的方法包括步骤:

步骤s21,所述用户总列表共包含n个用户,对所述n个用户进行预拆分,得到多个预拆分用户分列表,单个预拆分用户分列表内共包含n个用户,表示为:n=n/10m,其中,

步骤s22,判断预拆分后的所述单个预拆分用户分列表中n的数值是否大于最大可处理用户量的数值的一百倍:若为是,则执行步骤s21,若为否,则执行步骤s3;

步骤s3,对所述预拆分用户分列表进行真实拆分,得到相应的多个真实用户分列表;所述真实拆分的方法包括步骤:

步骤s31,所述真实用户分列表共包含x个用户,表示为:x=n/10y;其中,

步骤s32,判断真实拆分后的单个真实用户分列表中x的数值是否大于最大可处理用户量的数值:若为是,则执行步骤s31;若为否,则执行步骤s4;

步骤s4,对所述多个真实用户分列表内的用户按照所述任务内容同步进行处理。

作为上述实施例的进一步改进,在步骤s1中,通过分段续传接收外部系统提交的用户总列表;所述分段续传的方法包括步骤:

步骤s11、在第一批用户信息上传后返回一个任务名称;

步骤s12、在第二批所述用户信息上传时带上所述任务名称,得到一个新的任务名称,并继续上传;

步骤s13,重复执行步骤s12,直至所有用户信息上传完毕后,得到用户总列表。

本发明实施例另一方面提供一种大用户量任务快速拆分处理系统,其采用大用户量任务快速拆分处理方法对大用户量任务进行处理,所述拆分处理系统包括:

任务接收模块,其用于接收外部系统提交的用户总列表和任务内容,并将所述用户总列表和所述任务内容进行关联;

任务预拆分模块,其根据所述任务内容,配置相应的最大可处理用户量,并对所述用户总列表进行预拆分,得到相应的多个预拆分用户分列表;

任务真实拆分模块,其对所述预拆分用户分列表进行真实拆分,得到相应的多个真实用户分列表;以及

任务处理模块,其对所述多个真实用户分列表内的用户按照所述任务内容同步进行处理。

作为上述实施例的进一步改进,所述拆分处理系统还包括:任务实时监控模块,其用于对所述任务接收模块、任务预拆分模块、任务真实拆分模块以及任务处理模块实时监控,记录相应的数据并显示各个模块当前待处理数据和最近一分钟的处理数据;当所述当前待处理数据归零时,则表示相应的模块任务完成,当所述当前待处理数据超过阈值时,则发送报警信息,以提醒运维人员相应的模块出错。

作为上述实施例的进一步改进,所述任务接收模块还支持以文件方法接收外部系统提交的用户总列表;所述文件方法包括步骤:

将单个或多个文件按预定格式存放至服务器内;

将所述文件的位置与用户信息通过接口传入到服务器后返回一个任务名称,任务接收模块下载相应文件到本地进行解析,读取到相应的用户信息的数据;

对多个用户信息的数据进行汇总,得到用户总列表。

作为上述实施例的进一步改进,所述任务真实拆分模块在对预拆分用户分列表进行真实拆分时,对预拆分用户分列表内的用户进行幂等判断,以防止对同一用户进行多次处理。

作为上述实施例的进一步改进,所述幂等判断的方法为:将所述用户的序号与其余序号进行比较,若相同,则不进行保存,若不相同,则进行保存。

作为上述实施例的进一步改进,所述任务处理模块对真实用户分列表内的用户进行处理时,对每个用户进行防重复判断,防止对同一用户进行多次处理。

作为上述实施例的进一步改进,所述防重复判断的方法为:将已处理成功的用户的任务名称记录到数据库中,在对一个新的用户进行处理时,判断新的用户的任务名称是否在数据库中被记录,若被记录,则表示为已处理,标识为完成,若未被记录,则将新的用户的任务名称记录到数据库内。

本发明实施例再一方面提供一种计算机,其包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器上运行的计算机程序是用于实现大用户量任务快速拆分处理系统。

本发明的有益效果为:

1、通过对用户总列表采用先拆分,后处理的方式,将任务,按需进行不同层多次拆分,直至达到指定大小,再由多线程方式进行快速处理,大大提升了处理能力,使任务处理更快速,更可靠与更可控;

2、用户信息支持自动去重,同时支持多种方式传入,并支持中断续传,大批量并发传入;

3、任务拆分支持中断可重复拆分,会自动进行幂等拆分处理,同时支持多层多并发同时拆分;

4、任务处理支持高并发配置与最大上限速度控制,并有防重复机制,同一任务仅执行一次;

5、可视化监控,管理后台可查看到拆分后任务的各个阶段待处理任务数据与处理速度;

6、系统性能线性成长,拆分不受处理速度限制,整个拆分处理速度可任意横向扩容,达到快速提高性能;

7、通用性好,可在任意大用户量任务场景下使用。

附图说明

通过附图中所示的本发明优选实施例更具体说明,本发明上述及其它目的、特征和优势将变得更加清晰。在全部附图中相同的附图标记指示相同的部分,且并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本的主旨。

图1为本发明实施例1提供的一种大用户量任务快速拆分处理方法的流程图。

图2为本发明实施例2提供的一种大用户量任务快速拆分处理系统的示意图。

图3为图2中对用户总列表进行拆分的示意图。

具体实施方式

下面结合附图和具体实施例对本发明技术方案作进一步的详细描述,以使本领域的技术人员可以更好的理解本发明并能予以实施,但所举实施例不作为对本发明的限定。

本发明提供具体实施例1。

本实施例1介绍了一种大用户量任务快速拆分处理方法,其用于将用户总列表拆分成指定大小。请参阅图1,所述拆分处理方法包括步骤:

步骤s1,接收外部系统提交的用户总列表和任务内容,并将所述用户总列表和所述任务内容进行关联。其中,在接收时,可以通过分段续传方法接收外部系统提交的用户总列表。所述分段续传的方法包括步骤:

步骤s11、在第一批用户信息上传后返回一个任务名称。由于用户的数据量较大,因此对用户信息进行分批次上传,第一次上传时得到一个任务名称。

步骤s12、在第二批所述用户信息上传时带上所述任务名称,得到一个新的任务名称,并继续上传。后续每次上传新的用户信息时,都会带上前一批次的任务名称同步上传,直至所有的用户信息上传结束。

步骤s13,重复执行步骤s12,直至所有用户信息上传完毕后,得到用户总列表。

步骤s2,根据所述任务内容,配置相应的最大可处理用户量,并对所述用户总列表进行预拆分,得到相应的多个预拆分用户分列表。由于任务内容的不同,导致每个线程的最大可处理用户量大小不同,通过不同的任务内容,配置出不同的最大可处理用户量,以实现对各个线程的充分利用,提高利用率。所述预拆分的方法包括步骤:

步骤s21,所述用户总列表共包含n个用户,对所述n个用户进行预拆分,得到多个预拆分用户分列表,单个预拆分用户分列表内共包含n个用户,表示为:n=n/10m,其中,

步骤s22,判断预拆分后的所述单个预拆分用户分列表中n的数值是否大于最大可处理用户量的数值的一百倍:若为是,则执行步骤s21,若为否,则执行步骤s3。其中,对用户总列表进行多次拆分,如用户总列表含有十万个用户,第一次拆分后,得到十组一万个用户的一次预拆分用户分列表,经过第二次拆分后,得到一百组一千个用户的二次预拆分用户分列表,以此类推,直至某次拆分后,得到的预拆分用户分列表的用户量不高于最大可处理用户量的数值的一百倍时为止。

步骤s3,对所述预拆分用户分列表进行真实拆分,得到相应的多个真实用户分列表。所述真实拆分的方法包括步骤:

步骤s31,所述真实用户分列表共包含x个用户,表示为:x=n/10y;其中,

步骤s32,判断真实拆分后的单个真实用户分列表中x的数值是否大于最大可处理用户量的数值:若为是,则执行步骤s31;若为否,则执行步骤s4。

步骤s4,对所述多个真实用户分列表内的用户按照所述任务内容同步进行处理。

本实施例1通过对用户总列表采用先拆分,后处理的方式,将任务,按需进行不同层多次拆分,直至达到指定大小,再由多线程方式进行快速处理,大大提升了处理能力,使任务处理更快速,更可靠与更可控。

本发明还提供具体实施例2。

本实施例2介绍了一种大用户量任务快速拆分处理系统,其采用实施例1中提供的一种大用户量任务快速拆分处理方法对大用户量任务进行处理。请参阅图2,所述拆分处理系统包括任务接收模块、任务拆分模块、任务处理模块以及任务实时监控模块。

其中,任务接收模块用于接收外部系统提交的用户总列表和任务内容,并将所述用户总列表和所述任务内容进行关联。外部系统可以为商户系统、订单系统、积分系统,也可以为其他系统,只要能输入相应的用户总列表和任务内容即可。

任务接收模块可以支持以分段续传方法接收外部系统提交的用户总列表。所述分段续传方法包括步骤:在第一批用户信息上传后返回一个任务名称;在第二批所述用户信息上传时带上所述任务名称,得到一个新的任务名称,并继续上传;重复执行上述步骤,直至所有用户信息上传完毕后,得到用户总列表。

任务接收模块也可以支持以文件方法接收外部系统提交的用户总列表。采用分段续传方法和文件方法均可实现用户总列表的接收。所述文件方法包括步骤:将单个或多个文件按预定格式存放至服务器内;将所述文件的位置与用户信息通过接口传入到服务器后返回一个任务名称,任务接收模块下载相应文件到本地进行解析,读取到相应的用户信息的数据;对多个用户信息的数据进行汇总,得到用户总列表。

任务接收模块还支持自动剔除重复用户并快速保存。其中,任务接收模块在获取用户总列表后,采用高并发分组保存的方式,对接收到的用户总列表中的用户按一万一组多线程并发处理写入到内存数据库aerospike内,同时标记上每个用户对应的任务内所属序号。处理过程中,利用内存数据库的主键唯一性,对重复的用户信息进行剔除,以达到快速保存非重复用户信息的效果。之后任务接收模块得到一批不重复的用户总列表信息与所需完成的任务内容信息,并将两者关联起来。

请参阅图3,任务拆分模块用于将用户总列表拆分成若干个真实用户分列表,以使系统能够快速对其处理。任务拆分模块分为任务预拆分模块和任务真实拆分模块。

其中,任务预拆分模块根据任务内容,配置相应的最大可处理用户量,并对所述用户总列表进行预拆分,得到相应的多个预拆分用户分列表。在拆分为最大可处理任务大小前,会一直在此任务预拆分模块中将用户总列表进行第一层、第二层、第k层拆分。如用户总列表含有十万个用户,第一次拆分后,得到十组一万个用户的一次预拆分用户分列表,经过第二次拆分后,得到一百组一千个用户的二次预拆分用户分列表,以此类推,直至某次拆分后,得到的预拆分用户分列表的用户量不高于最大可处理用户量的数值的一百倍时为止。之后将预拆分结果发送到任务真实拆分模块中进行进一步拆分。

任务真实拆分模块会将预拆分结果中的多组预拆分用户分列表拆分成若干个真实用户分列表,单个真实用户分列表内的用户的数值不超过最大可处理用户量的数值。任务真实拆分模块在对预拆分用户内的用户进行拆分时,会按用户的序号进行幂等判断,以防止对同一用户进行多次处理。所述幂等判断的方法为:将所述用户的序号与其余序号进行比较,若相同,则不进行保存,若不相同,则进行保存。任务真实拆分模块在进行拆分时,仅将用户进行拆分,共享同一份任务内容,记录为同一个内容名称,确保内容一致性,达到存储冗余减少与处理速度提升的效果。而当真实用户分列表的用户量为单用户时,将直接记录任务内容与用户信息,达到处理模块可快速处理的效果。

任务处理模块获取相应的真实用户分列表,之后按照任务内容,进行相应的处理。对于单用户的任务而言,任务处理模块会获取任务关联的用户信息,直接处理完成。对于多用户的任务而言,采用用户的序号,从内存数据库aerospike中获取到相应的用户信息后进行处理。

任务处理模块支持横向扩容提速,由于所有用户的任务互不依赖,因此支持多线程同时处理,从而基于队列数据分区可以支持无限横向扩容,不受原始用户量与任务的限制,通过调整并发线程数,以增加数据处理速度。为了能够在特定情况下精确控制数据处理速度,任务处理模块还支持按秒限速的功能,按服务节点配置每秒最大处理速度,能有效的达到保护下游系统的效果。每秒处理个数的统计,是在每次开始下一个任务获取时,统计过去一秒内处理完成的任务所关联的用户数量,判断是否达到限制,如达到则暂不获取,等待下次100毫秒的间隔后,重复此判断,直至未达限制,获取新任务进行处理,处理完成后记录已处理用户数量。

任务处理模块还支持任务防重复处理。针对每个任务,在任务处理前会进行防重复处理判断,保证任务不会被重复处理。实现方式是将已处理成功的任务名称记录到内存数据库aerospike中,在新开始一个任务时判断aerospike中是否存在该任务名称已处理的记录,存在则代表已处理,将不再处理,直接标识为完成,若未被记录,则将新的用户的任务名称记录到内存数据库aerospike中。

任务实时监控模块其用于对所述任务接收模块、任务预拆分模块、任务真实拆分模块以及任务处理模块实时监控。当用户总列表包含的用户数量较大时,会导致任务预拆分模块和任务真实拆分模块工作的时间较长。因此有必要对其进行监控,确保拆分的稳定运行。任务实时监控模块采用elasticsearcn做实时数据存储,记录当前所有需拆分的数据,以及每个任务的预拆分用户分列表的数据,待真实用户分列表的数据,待处理完成任务数据,记录相应的数据并显示各个模块当前待处理数据和最近一分钟的处理数据。等到待处理数归零时,则表示相应模块已完成。所有模块工作完成,则表示整个任务完成。而如果某个模块待处理数据超过一个预定的阈值时,则可以发出短信或邮件等报警信息,以提醒运维人员进行关注。

本实施例2通过用户信息支持自动去重,同时支持多种方式传入,并支持中断续传,大批量并发传入。系统任务拆分支持中断可重复拆分,会自动进行幂等拆分处理,同时支持多层多并发同时拆分。任务处理支持高并发配置与最大上限速度控制,并有防重复机制,同一任务仅执行一次。通过可视化监控,管理后台可查看到拆分后任务的各个阶段待处理任务数据与处理速度。系统的性能呈线性成长,拆分不受处理速度限制,整个拆分处理速度可任意横向扩容,达到快速提高性能。系统的通用性好,可在任意大用户量任务场景下使用。

本发明还提供具体实施例3。

本实施例3介绍了一种计算机,其用于运行实施例2介绍的一种大用户量任务快速拆分处理系统。计算器包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器上运行的计算机程序是用于实现大用户量任务快速拆分处理系统的。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1