本发明涉及计算机技术领域,尤其涉及一种收益入账的处理方法和装置以及处理系统。
背景技术:
目前,互联网理财平台在处理大量用户的收益入账时,首先部署多台执行定时任务的服务器,为每台服务器分配要处理的基金产品列表,并在服务器上为基金产品列表中的每个基金产品配置对应的收益入账任务,这样多台服务器可以并行处理多个基金产品的收益入账文件。而要处理的收益入账文件会从前置机全量同步到每台服务器上,前置机是互联网理财平台和基金公司之间进行数据和文件交互的一个中转机器,比如基金公司向理财平台提供收益入账文件,基金公司会把收益入账文件上传到预先约定的一台前置机上,然后服务器会从这台前置机下载到文件进行处理。
收益入账文件的处理过程可包括:每台服务器通过本地配置的收益入账任务定时启动收益入账处理程序,处理分配给本服务器的基金产品收益入账。收益入账处理程序的主要处理逻辑可包括:首先解析基金公司的收益入账文件,加载文件中的用户收益数据到服务器内存进行数据预检查。如果预检查通过,收益入账批处理程序则调用其他系统服务逐个处理文件中每个用户的收益数据。
目前,越来越多的基金公司已选择接入互联网理财平台,而且由于操作便捷,互联网理财平台已经吸引了海量的用户,因此互联网理财平台每天要处理的用户收益数据也十分巨大。已有的收益入账处理方案至少存在以下问题:部署收益入账处理任务的服务器数量众多,每个服务器都是在本机单独配置处理基金列表,导致多个服务器之间的任务执行进度是不可控制的,无法对每个服务器上定时执行的收益入账处理任务进行有效管理,一旦部分服务器出现故障无法快速实现系统容灾,而且配置无法有效的进行管理,这样会降低基金产品收益入账的处理效率。
技术实现要素:
本发明实施例提供了一种收益入账的处理方法和装置以及处理系统,用于对服务器上执行的收益入账任务进行精确化管理,提高收益入账的处理效率。
为解决上述技术问题,本发明实施例提供以下技术方案:
第一方面,本发明实施例提供一种收益入账的处理方法,包括:
第一服务器接收发布系统发布给n个服务器的定时任务管理器和收益入账处理程序所使用的配置文件,所述第一服务器属于所述n个服务器,n为正整数;
所述第一服务器根据所述配置文件在本机上定时启动所述收益入账处理程序;
所述第一服务器接收所述发布系统发布给所述n个服务器的第一收益入账任务,以及所述第一服务器根据所述第一收益入账任务执行抢锁操作,所述第一收益入账任务用于指示对第一收益数据进行入账处理;
当所述第一服务器抢锁成功时,所述第一服务器对所述第一收益数据进行入账处理。
结合第一方面,在第一方面的第一种可能的实现方式中,所述第一服务器根据所述配置文件在本机上定时启动所述收益入账处理程序,包括:
所述第一服务器根据所述定时任务管理器在本机上加载并解析所述配置文件;
所述第一服务器检查所述配置文件中的任务合法性;
当所述配置文件中任务合法时,所述第一服务器根据所述配置文件中配置的任务执行时间确定在当前时刻是否需要执行;
若在当前时刻需要执行任务,所述第一服务器根据所述定时任务管理器启动所述收益入账处理程序。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述第一服务器根据所述配置文件在本机上定时启动所述收益入账处理程序,还包括:
若在当前时刻需要执行任务,所述第一服务器先执行随机时间延迟,在延迟结束时,再触发执行如下步骤:所述第一服务器根据所述定时任务管理器启动所述收益入账处理程序。
结合第一方面或第一方面的第一种可能或第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述第一服务器根据所述第一收益入账任务执行抢锁操作,包括:
所述第一服务器在zookeeper服务端创建一个zookeeper临时节点,若所述第一服务器成功创建所述zookeeper临时节点则表示所述第一服务器抢锁成功,若所述第一服务器无法创建所述zookeeper临时节点则表示所述第一服务器抢锁失败。
结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述第一服务器对所述第一收益数据进行入账处理,包括:
所述第一服务器通过所述收益入账处理程序将所述第一收益数据存储到收益数据库中;
所述第一服务器更新所述收益数据库中所述第一收益数据的收益入账状态为已完成;
所述第一服务器删除在zookeeper服务端所创建的所述zookeeper临时节点。
结合第一方面或第一方面的第一种可能或第二种可能或第三种可能的实现方式,在第一方面的第五种可能的实现方式中,所述方法还包括:
当所述第一服务器抢锁成功时,所述第一服务器启动锁过期时间;
在所述锁过期时间到达时,若所述第一服务器没有完成对所述第一收益数据的入账处理,所述第一服务器放弃抢到的锁,由所述n个服务器中除所述第一服务器以外的其它服务器继续进行抢锁操作。
结合第一方面或第一方面的第一种可能或第二种可能或第三种可能的实现方式,在第一方面的第六种可能的实现方式中,所述第一服务器对所述第一收益数据进行入账处理,包括:
所述第一服务器对所述第一收益数据进行拆分处理,得m个收益子文件,所述m的取值为大于或等于2的自然数;
所述第一服务器在所述收益入账处理程序中创建m个子进程;
所述第一服务器通过所述m个子进程对所述m个收益子文件进行并行的入账处理。
结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,所述第一服务器对所述第一收益数据进行入账处理,还包括:
所述第一服务器对所述第一收益数据进行拆分处理之后,所述第一服务器生成所述m个收益子文件分别对应的加密串;
所述第一服务器通过所述m个子进程对所述m个收益子文件进行并行的入账处理,具体包括:
所述第一服务器根据所述加密串分别验证所述m个收益子文件的合法性;
所述第一服务器对合法的所有收益子文件分别通过一个子进程同时进行入账处理。
第二方面,本发明实施例还提供另一种收益入账的处理方法,包括:
发布系统向n个服务器发布定时任务管理器和收益入账处理程序所使用的配置文件,由所述n个服务器分别根据所述配置文件在本机上定时启动所述收益入账处理程序,所述n为正整数;
所述发布系统向所述n个服务器发布第一收益入账任务,所述第一收益入账任务用于指示对第一收益数据进行入账处理,所述n个服务器根据所述第一收益入账任务执行抢锁操作,由第一服务器对所述第一收益数据进行入账处理,所述第一服务器为所述n个服务器中抢锁成功的一个服务器。
结合第二方面,在第二方面的第一种可能的实现方式中,所述方法还包括:
所述发布系统检测是否有新加入的服务器;
当检测到新加入的服务器时,所述发布系统向所述新加入的服务器发布定时任务管理器和收益入账处理程序所使用的配置文件。
结合第二方面,在第二方面的第二种可能的实现方式中,所述方法还包括:
所述发布系统对所述配置文件进行更新,并向所述n个服务器发布更新后的配置文件,由所述n个服务器分别根据所述更新后的配置文件在本机上更新所述收益入账处理程序。
第三方面,本发明实施例还提供一种服务器,所述服务器为第一服务器,所述第一服务器包括:
接收模块,用于接收发布系统发布给n个服务器的定时任务管理器和收益入账处理程序所使用的配置文件,所述第一服务器属于所述n个服务器,n为正整数;
启动模块,用于根据所述配置文件在本机上定时启动所述收益入账处理程序;
抢锁模块,用于接收所述发布系统发布给所述n个服务器的第一收益入账任务,以及根据所述第一收益入账任务执行抢锁操作,所述第一收益入账任务用于指示对第一收益数据进行入账处理;
入账处理模块,用于当所述第一服务器抢锁成功时,对所述第一收益数据进行入账处理。
结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述启动模块,包括:
文件处理模块,用于根据所述定时任务管理器在本机上加载并解析所述配置文件;
检查模块,用于检查所述配置文件中的任务合法性;
判断模块,用于当所述配置文件中任务合法时,根据所述配置文件中配置的任务执行时间确定在当前时刻是否需要执行;
程序启动模块,用于若在当前时刻需要执行任务,根据所述定时任务管理器启动所述收益入账处理程序。
结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第三种可能的实现方式中,所述抢锁模块,具体用于在zookeeper服务端创建一个zookeeper临时节点,若所述第一服务器成功创建所述zookeeper临时节点则表示所述第一服务器抢锁成功,若所述第一服务器无法创建所述zookeeper临时节点则表示所述第一服务器抢锁失败。
结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第四种可能的实现方式中,所述第一服务器还包括:
锁过期处理模块,用于当所述第一服务器抢锁成功时,启动锁过期时间;在所述锁过期时间到达时,若所述第一服务器没有完成对所述第一收益数据的入账处理,放弃抢到的锁,由所述n个服务器中除所述第一服务器以外的其它服务器继续进行抢锁操作。
结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第五种可能的实现方式中,所述入账处理模块,包括:
文件拆分模块,用于对所述第一收益数据进行拆分处理,得m个收益子文件,所述m的取值为大于或等于2的自然数;
子进程创建模块,用于在所述收益入账处理程序中创建m个子进程;
并行处理模块,用于通过所述m个子进程对所述m个收益子文件进行并行的入账处理。
第四方面,本发明实施例还提供一种发布系统,包括:
第一发布模块,用于向n个服务器发布定时任务管理器和收益入账处理程序所使用的配置文件,由所述n个服务器分别根据所述配置文件在本机上定时启动所述收益入账处理程序,所述n为正整数;
第二发布模块,用于向所述n个服务器发布第一收益入账任务,所述第一收益入账任务用于指示对第一收益数据进行入账处理,所述n个服务器根据所述第一收益入账任务执行抢锁操作,由第一服务器对所述第一收益数据进行入账处理,所述第一服务器为所述n个服务器中抢锁成功的一个服务器。
结合第四方面,在第四方面的第一种可能的实现方式中,所述发布系统还包括:
扩容处理模块,用于检测是否有新加入的服务器;当检测到新加入的服务器时,向所述新加入的服务器发布定时任务管理器和收益入账处理程序所使用的配置文件。
结合第四方面,在第四方面的第二种可能的实现方式中,所述发布系统还包括:
配置更新模块,用于对所述配置文件进行更新,并向所述n个服务器发布更新后的配置文件,由所述n个服务器分别根据所述更新后的配置文件在本机上更新所述收益入账处理程序。
第五方面,本发明实施例还提供一种收益入账的处理系统,所述收益入账的处理系统,包括:发布系统和n个服务器,
所述发布系统如第二方面中任一项所述的发布系统;
所述n个服务器中包括有第一服务器,所述第一服务器如第一方面中任一项的服务器。
第六方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
从以上技术方案可以看出,本发明实施例具有以下优点:
在本发明实施例中,发布系统发布给n个服务器的定时任务管理器和收益入账处理程序所使用的配置文件,第一服务器属于n个服务器,第一服务器根据配置文件在本机上定时启动收益入账处理程序。发布系统发布给n个服务器的第一收益入账任务时,第一服务器根据第一收益入账任务执行抢锁操作,第一收益入账任务用于指示对第一收益数据进行入账处理,当第一服务器抢锁成功时,第一服务器对第一收益数据进行入账处理。本发明实施例中在收益入账的处理系统中设置发布系统,该发布系统发布第一收益入账任务后,n个服务器都执行抢锁操作,只有抢锁成功的服务器才能执行收益数据的入账处理,改变了现有技术中多个服务器各自定时执行收益入账任务导致的无法管理问题,本发明实施例可以对服务器上执行的收益入账任务进行精确化管理,提高收益入账的处理效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种收益入账的处理系统的组成结构示意图;
图2为本发明实施例提供的一种收益入账的处理方法的流程方框示意图;
图3为本发明实施例提供的另一种收益入账的处理方法的流程方框示意图;
图4为本发明实施例提供的多个服务器执行抢锁操作的示意图;
图5为本发明实施例提供的定时任务处理器的执行机制示意图;
图6为本发明实施例提供的收益入账程序抢锁执行的入账过程示意图;
图7为本发明实施例提供的收益数据的拆分过程示意图;
图8为本发明实施例提供的收益子文件的处理过程示意图;
图9-a为本发明实施例提供的一种服务器的组成结构示意图;
图9-b为本发明实施例提供的一种启动模块的组成结构示意图;
图9-c为本发明实施例提供的另一种服务器的组成结构示意图;
图9-d为发明实施例提供的一种入账处理模块的组成结构示意图;
图10-a为本发明实施例提供的一种发布系统的组成结构示意图;
图10-b为本发明实施例提供的一种发布系统的组成结构示意图;
图10-c为本发明实施例提供的一种发布系统的组成结构示意图;
图11为本发明实施例提供的收益入账的处理方法应用于服务器的组成结构示意图。
具体实施方式
本发明实施例提供了一种收益入账的处理方法和装置以及处理系统,用于对服务器上执行的收益入账任务进行精确化管理,提高基金产品收益入账的处理效率。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
首先请参阅图1,为本发明实施例提供的一种收益入账的处理系统的组成结构示意图。在本发明实施例提供的收益入账的处理系统中设置有一个发布系统和多个服务器,其中服务器的个数用n来表示,n为正整数,服务器的个数可以根据需要处理的收益数据的数量来确定,该收益入账的处理系统可以用于对数值金额的变更管理,举例说明,可以用于对基金的收益入账,也可以用于对游戏账号的金额变更管理。如图1所示,本发明实施例中在收益入账的处理系统中设置有发布系统,该分布系统可以对n个服务器执行收益入账进行管理,该发布系统可用于向n个服务器发布定时任务管理器、收益入账处理程序所使用的配置文件和收益入账任务,从而n个服务器可以根据发布系统所发布的配置和任务执行收益入账处理,每个服务器的任务执行进度是可控制的,对每个服务器上定时执行的收益入账处理任务进行有效管理,从而可提高基金产品收益入账的处理效率。
接下来分别从服务器和发布系统的角度对本发明实施例提供的收益入账的处理方法进行举例说明,首先介绍本发明实施例提供的服务器一侧执行的收益入账的处理方法,请参阅图2所示,以n个服务器中某一个服务器为例进行说明,为便于描述,定义为“第一服务器”,本发明一个实施例提供的收益入账的处理方法,可以包括如下步骤:
201、第一服务器接收发布系统发布给n个服务器的定时任务管理器和收益入账处理程序所使用的配置文件,第一服务器属于n个服务器。
在本发明实施例中,发布系统首先向n个服务器发布定时任务管理器和收益入账处理程序所使用的配置文件,该n个服务器中的第一服务器接收到定时任务管理器和收益入账处理程序所使用的配置文件,其中,定时任务管理器用于触发定时机制,发布系统向n个服务器发布定时任务管理器,从而每个服务器一侧的定时任务都可以通过该定时任务管理器来触发。收益入账处理程序是服务器执行收益入账任务的处理逻辑。本发明实施例中,定时任务管理器和收益入账处理程序所使用的配置文件都是由发布系统发布给第一服务器,从而第一服务器对收益入账任务的执行不再由服务器本机来自主确定,而是通过发布系统可以实现各个服务器的收益入账任务的实时管理。
202、第一服务器根据配置文件在本机上定时启动收益入账处理程序。
在本发明实施例中,第一服务器从发布系统接收到定时任务管理器和配置文件之后,第一服务器可以在定时任务管理器的触发下加载配置文件,从而第一服务器可以定时启动收益入账处理程序。举例说明,第一服务器上的定时任务管理器在每隔一个时间段都可以加载配置文件,从而启动收益入账处理程序,收益入账处理程序的执行过程包括分布式抢锁机制,在一次任务发布过程中,锁是唯一的,只有抢锁成功的服务器可以执行本次发布的任务,其余服务器退出执行任务,详见后续步骤203和步骤204中的举例说明。
在本发明的一些实施例中,步骤202第一服务器根据配置文件在本机上定时启动收益入账处理程序,包括:
a1、第一服务器根据定时任务管理器在本机上加载并解析配置文件;
a2、第一服务器检查配置文件中的任务合法性;
a3、当配置文件中任务合法时,第一服务器根据配置文件中配置的任务执行时间确定在当前时刻是否需要执行;
a4、若在当前时刻需要执行任务,第一服务器根据定时任务管理器启动收益入账处理程序。
举例说明,第一服务器上的定时任务管理器在每隔一个很短的时间都会加载本机上的配置文件,并对本机上加载的配置文件进行解析,例如读取配置文件的文件内容,解析过程和配置文件的类型和属性有关,此处不做限定。第一服务器解析配置文件之后,检查配置文件中任务的合法性,例如检测第一服务器是否有执行任务的权限,任务执行的时间是否符合要求等。然后根据配置文件中每个任务配置的执行时间判断该任务在当前时刻是否需要执行,如果需要执行则定时任务管理器会启动收益入账处理程序。
进一步的,在本发明的一些实施例中,步骤202第一服务器根据配置文件在本机上定时启动收益入账处理程序,除了执行前述的步骤a1至a4之外,还可以执行如下步骤:
a5、若在当前时刻需要执行任务,第一服务器先执行随机时间延迟,在延迟结束时,再触发执行前述的步骤a4第一服务器根据定时任务管理器启动收益入账处理程序。
其中,由于不同服务器上的配置文件都是相同的,因此这些收益入账处理程序都会同时启动并抢锁,为了避免由于每个服务器上所使用的时钟存在不一致等原因导致所有的任务都始终在部分服务器上执行,在定时任务管理器确定在当前时刻需要执行任务时,先随机暂停几秒钟,例如随机暂停1-5秒钟,再启动收益入账处理程序。这种随机时间延迟策略可以保证所有的收益入账任务是均衡地分布在所有的服务器上执行的,实现收益入账任务的负载均衡。
203、第一服务器接收发布系统发布给n个服务器的第一收益入账任务,以及第一服务器根据第一收益入账任务执行抢锁操作,第一收益入账任务用于指示对第一收益数据进行入账处理。
在本发明实施例中,发布系统向n个服务器发布收益入账批处理任务,该收益入账批处理任务中包括有多个收益入账任务,例如发布系统可以一次性发布多个收益入账任务,接下来以发布系统发布的某一个收益入账任务(定义为第一收益入账任务)的处理过程为例进行说明,发布系统发布给n个服务器的第一收益入账任务,在第一收益入账任务中指示有对第一收益数据进行入账处理。n个服务器可分别接收该第一收益入账任务,每个服务器接收到该第一收益入账任务之后,都需要执行抢锁操作,在一次任务发布过程中,锁是唯一的,只有抢锁成功的服务器可以执行本次发布的任务。举例说明,本发明实施例中服务器上可以部署分布式抢锁机制,例如可以通过zookeeper来实现,也可以通过数据库中事务的锁机制来完成。
在本发明的一些实施例中,步骤203中的第一服务器根据第一收益入账任务执行抢锁操作,包括:
b1、第一服务器在zookeeper服务端创建一个zookeeper临时节点,若第一服务器成功创建zookeeper临时节点则表示第一服务器抢锁成功,若第一服务器无法创建zookeeper临时节点则表示第一服务器抢锁失败。
其中,zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,可以为分布式应用提供一致性服务,n个服务器上每个服务器可以部署一个zookeeper客户端,如果第一服务器上创建的zookeeper客户端抢锁成功,第一服务器可以在zookeeper服务器上创建一个zookeeper临时节点,zookeeper临时节点的创建过程详见google的chubby开源的实现方案。举例说明,以基金产品的收益入账为例,由于每只基金产品的收益入账任务每天只需执行一次,因此为了避免多台服务器同时启动相同基金产品的收益入账任务,则需要在部署收益入账处理程序和定时任务管理器的服务器上部署一份zookeeper客户端,其目的是保证多个服务器上的定时任务管理器在同时启动收益入账处理程序后,先到zookeeper服务端进行抢锁操作,抢锁成功的收益入账处理程序执行本次发布系统发布的收益入账任务,其他的服务器上的收益入账处理程序不执行收益入账逻辑。
204、当第一服务器抢锁成功时,第一服务器对第一收益数据进行入账处理。
在本发明实施例中,n个服务器都可以执行抢锁操作,若第一服务器抢锁成功,第一服务器可以对第一收益数据进行入账处理,n个服务器的中的其余服务器不执行该第一收益入账任务。若第一服务器抢锁失败,第一服务器退出执行第一收益入账任务。
在本发明的一些实施例中,在前述执行步骤b1的实现场景下,步骤204第一服务器对第一收益数据进行入账处理,包括:
c1、第一服务器通过收益入账处理程序将第一收益数据存储到收益数据库中;
c2、第一服务器更新收益数据库中第一收益数据的收益入账状态为已完成;
c3、第一服务器删除在zookeeper服务端所创建的zookeeper临时节点。
其中,n个服务器都连接到收益数据库,第一服务器抢锁成功时,该第一服务器将第一收益入账任务所指示的第一收益数据存储到收益数据库。举例说明,该第一收益数据对应的是第一基金,则在收益数据库中第一基金的收益入账状态可以更新为已完成,由于第一服务器使用zookeeper临时节点进行抢锁,因此在第一服务器完成对第一收益数据进行入账处理之后,第一服务器删除在zookeeper服务端所创建的zookeeper临时节点。当发布系统再发布第二收益入账任务时,n个服务器还可以在zookeeper服务端继续创建zookeeper临时节点,如果zookeeper临时节点创建成功,则表示抢锁成功。
在本发明的一些实施例中,本发明实施例提供的方法除了执行前述步骤之外,本发明实施例提供的方法还可以包括如下步骤:
d1、当第一服务器抢锁成功时,第一服务器启动锁过期时间;
d2、在锁过期时间到达时,若第一服务器没有完成对第一收益数据的入账处理,第一服务器放弃抢到的锁,由n个服务器中除第一服务器以外的其它服务器继续进行抢锁操作。
举例说明,第一服务器上的收益入账处理程序抢锁成功后服务器发生故障导致收益入账任务中断,这时zookeeper服务端的锁还是被占用状态,其他服务器上的批处理程序无法抢锁成功并执行收益入账任务。为了解决这个问题,在第一服务器抢锁成功后需设置与zookeeper服务端的锁过期时间,一旦锁过期,第一服务器则会主动清除已经抢到的锁,从而其他服务器上的收益入账处理程序则可以重新执行抢锁操作,从而保证收益入账任务能够被成功执行。
在本发明的一些实施例中,步骤204第一服务器对第一收益数据进行入账处理,包括:
e1、第一服务器对第一收益数据进行拆分处理,得m个收益子文件,m的取值为大于或等于2的自然数;
e2、第一服务器在收益入账处理程序中创建m个子进程;
e3、第一服务器通过m个子进程对m个收益子文件进行并行的入账处理。
其中,通常情况下,一只基金产品都有上千万条收益数据,现有技术中会把所有的用户收益数据都加载到内存中逐个处理,无法实现单个收益文件中用户收益数据的并行处理。在现有方案中,如果启用多进程并行处理每个文件中的收益数据,由于每个收益文件大小有几百兆字节,而子进程会复制父进程的数据空间则会导致系统内存资源快速耗尽,从而使系统出现内存故障。为了解决内存资源消耗过快导致的内存故障问题,本发明实施例中可以对原始的第一收益数据进行拆分,然后在收益入账处理程序中启动多个子进程并行处理每个子文件,以提高每个文件中用户收益数据的处理速度。
进一步的,步骤204第一服务器对第一收益数据进行入账处理,除了步骤e1至步骤e3之外,步骤204还可以包括如下步骤:
e4、第一服务器对第一收益数据进行拆分处理之后,第一服务器生成m个收益子文件分别对应的加密串。
其中,为了保证拆分后的每个子文件不被篡改,可以设置每个收益子文件对应的加密串,例如采用消息摘要算法第五版(messagedigestalgorithm5,md5)计算每个子文件的加密串,或者采用数据加密算法(dataencryptionstandard,des)算法计算每个子文件的加密串,或者采用rsa公钥加密算法计算每个子文件的加密串。
在执行步骤e4的实现场景下,步骤e3第一服务器通过m个子进程对m个收益子文件进行并行的入账处理,具体包括:
e31、第一服务器根据加密串分别验证m个收益子文件的合法性;
e32、第一服务器对合法的所有收益子文件分别通过一个子进程同时进行入账处理。
其中,在拆分得到m个收益子文件时会生成每个子文件的加密串,然后在创建子进程处理对应子文件的收益数据前,会根据这个加密串核对子文件的合法性,只有合法的子文件才会被处理,这样可以保证每个子文件中收益数据的安全性。在本发明的另一些实施例中,第一服务器还可以对不合法的基金收益子文件进行错误信息告警。
通过以上实施例对本发明实施例的描述可知,发布系统发布给n个服务器的定时任务管理器和收益入账处理程序所使用的配置文件,第一服务器属于n个服务器,第一服务器根据配置文件在本机上定时启动收益入账处理程序。发布系统发布给n个服务器的第一收益入账任务时,第一服务器根据第一收益入账任务执行抢锁操作,第一收益入账任务用于指示对第一收益数据进行入账处理,当第一服务器抢锁成功时,第一服务器对第一收益数据进行入账处理。本发明实施例中在收益入账的处理系统中设置发布系统,该发布系统发布第一收益入账任务后,n个服务器都执行抢锁操作,只有抢锁成功的服务器才能执行收益数据的入账处理,改变了现有技术中多个服务器各自定时执行收益入账任务导致的无法管理问题,本发明实施例可以对服务器上执行的收益入账任务进行精确化管理,提高收益入账的处理效率。
前述实施例从第一服务器的角度对本发明实施例提供的收益入账的处理方法进行举例说明,接下来介绍本发明实施例提供的发布系统一侧执行的收益入账的处理方法,请参阅图3所示,本发明一个实施例提供的收益入账的处理方法,可以包括如下步骤:
301、发布系统向n个服务器发布定时任务管理器和收益入账处理程序所使用的配置文件,由n个服务器分别根据配置文件在本机上定时启动收益入账处理程序,n为正整数。
在本发明实施例中,发布系统首先向n个服务器发布定时任务管理器和收益入账处理程序所使用的配置文件,该n个服务器中的第一服务器接收到定时任务管理器和收益入账处理程序所使用的配置文件,其中,定时任务管理器用于触发定时机制,发布系统向n个服务器发布定时任务管理器,从而每个服务器一侧的定时任务都可以通过该定时任务管理器来触发。收益入账处理程序是服务器执行收益入账任务的处理逻辑。本发明实施例中,定时任务管理器和收益入账处理程序所使用的配置文件都是由发布系统发布给第一服务器,从而第一服务器对收益入账任务的执行不再由服务器本机来自主确定,而是通过发布系统可以实现各个服务器的收益入账任务的实时管理。
302、发布系统向n个服务器发布第一收益入账任务,第一收益入账任务用于指示对第一收益数据进行入账处理,n个服务器根据第一收益入账任务执行抢锁操作,由第一服务器对第一收益数据进行入账处理,第一服务器为n个服务器中抢锁成功的一个服务器。
在本发明实施例中,发布系统向n个服务器发布收益入账批处理任务,该收益入账批处理任务中包括有多个收益入账任务,例如发布系统可以一次性发布多个收益入账任务,接下来以发布系统发布的某一个收益入账任务(定义为第一收益入账任务)的处理过程为例进行说明,发布系统发布给n个服务器的第一收益入账任务,在第一收益入账任务中指示有对第一收益数据进行入账处理。n个服务器可分别接收该第一收益入账任务,每个服务器接收到该第一收益入账任务之后,都需要执行抢锁操作,在一次任务发布过程中,锁是唯一的,只有抢锁成功的服务器可以执行本次发布的任务。举例说明,本发明实施例中服务器上可以部署分布式抢锁机制,例如可以通过zookeeper来实现,也可以通过数据库中事务的锁机制来完成。
在本发明的一些实施例中,本发明实施例提供的方法除了执行前述步骤之外,本发明实施例提供的方法还可以包括如下步骤:
f1、发布系统检测是否有新加入的服务器;
f2、当检测到新加入的服务器时,发布系统向新加入的服务器发布定时任务管理器和收益入账处理程序所使用的配置文件。
其中,当接入的收益入账的产品数量越来越多时,需要对收益入账处理任务进行快速扩容,在本发明实施例中主要是通过发布系统来实现的,发布系统实时检测是否有的服务器加入进来,对于新加入的服务器,将定时任务管理器、任务配置文件和收益入账处理程序同时发布到新的服务器上。当定时任务发布完成后,发布系统会自动重新启动定时任务管理器。
在本发明的一些实施例中,本发明实施例提供的方法除了执行前述步骤之外,本发明实施例提供的方法还可以包括如下步骤:
g1、发布系统对配置文件进行更新,并向n个服务器发布更新后的配置文件,由n个服务器分别根据更新后的配置文件在本机上更新收益入账处理程序。
其中,发布系统可以控制n个服务器的任务执行,发布系统通过对收益入账处理程序所使用的配置文件进行更新,然后向n个服务器重新发布更新后的配置文件,从而使得n个服务器可以在本机上加载到最新版本的配置文件。
通过以上实施例对本发明实施例的描述可知,发布系统发布给n个服务器的定时任务管理器和收益入账处理程序所使用的配置文件,第一服务器属于n个服务器,第一服务器根据配置文件在本机上定时启动收益入账处理程序。发布系统发布给n个服务器的第一收益入账任务时,第一服务器根据第一收益入账任务执行抢锁操作,第一收益入账任务用于指示对第一收益数据进行入账处理,当第一服务器抢锁成功时,第一服务器对第一收益数据进行入账处理。本发明实施例中在收益入账的处理系统中设置发布系统,该发布系统发布第一收益入账任务后,n个服务器都执行抢锁操作,只有抢锁成功的服务器才能执行收益数据的入账处理,改变了现有技术中多个服务器各自定时执行收益入账任务导致的无法管理问题,本发明实施例可以对服务器上执行的收益入账任务进行精确化管理,提高收益入账的处理效率。
为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。
按照互联网理财平台和基金公司的合同约定,基金公司一般会在凌晨3-4点左右提供收益文件,而理财平台与用户一般约定上午7点左右即可查看昨日的收益明细数据。目前处理一只基金产品的收益入账大约耗时1-2个小时。因此,要处理的基金产品收益入账任务较多但允许的处理时间比较短,且收益入账任务耗时较久,就无法保证能够在约定的时间前完成所有基金产品的收益入账。本发明实施例中主要是为了实现互联网理财平台大量用户的快速收益入账,利用支持多服务器的定时任务管理器实现不同基金产品收益入账的并行处理和负载均衡,并通过发布系统实现服务器的平行扩容,在每台服务器处理具体基金公司的收益文件时首先将收益文件拆分成多个子文件再利用多进程技术并行处理各个子文件的数据,从而实现互联网理财平台大量用户的快速收益入账。本发明实施例中能够在跟用户约定的时间点前完成所有基金产品的收益数据检查和入账,避免用户的投诉和用户恐慌。
本发明实施例中,主要通过支持多服务器的定时任务管理器来实现基金产品收益入账的并行处理,并通过发布系统实现系统的快速扩容及容灾,发布系统是发布处理收益文件的批处理程序和批处理程序所使用的配置文件;而每天批处理程序的服务器上都有一份需要处理的收益文件。通过文件拆分机制实现单个收益文件中用户收益数据的并行处理,从而最大程度上提高收益入账的效率并保证用户收益数据的安全性。其中,收益入账是基金公司在每个自然日向互联网理财平台提供持有该基金有效份额用户的收益明细数据文件,互联网理财平台检查数据无误后为每个用户更新其持有基金有效份额和每日收益记录数据。
请参阅图4所示,为本发明实施例提供的多个服务器执行抢锁操作的示意图。收益入账任务通常由发布系统定期的发布,以基金产品为例,每只基金产品的收益入账任务每天只需执行一次,因此为了避免多台服务器同时启动相同基金产品的收益入账任务,则需要在部署收益入账批处理程序和定时任务管理器的服务器上部署一份zookeeper客户端,zookeeper是apache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务等,并可以提供可靠的分布式锁服务。举例说明共有n个服务器,分别为:服务器1、服务器2、…、服务器n,在每个服务器上分别部署一个zookeeper客户端,其目的是保证多个服务器上的定时任务管理器在同时启动基金a的收益入账批处理程序后,先到zookeeper服务端进行抢锁操作,抢锁成功的收益入账批处理程序执行基金a的收益入账逻辑,其他的批处理程序不执行收益入账逻辑。
接下来对本发明实施例中的系统扩容机制进行说明,当接入的基金产品数量越来越多时需要对收益入账批处理任务进行快速扩容,在本发明实施例中主要是通过发布系统来实现的,即将定时任务管理器、收益入账任务和批处理程序所使用的配置文件同时发布到新的服务器上。当定时任务发布完成后,发布系统会自动重新启动定时任务管理器,定时任务管理器每分钟都会自动加载和解析本机上的配置文件并启动当前时间需要执行的任务。
接下来对本发明实施例中定时任务管理器执行机制进行说明,请参阅图5所示,为本发明实施例提供的定时任务处理器的执行机制示意图。定时任务管理器是一个后台常驻服务,每分钟都会执行一次如下逻辑:每台服务器上的定时任务管理器在每一分钟都会加载本机上最新版本的配置文件,并检查配置文件中任务的合法性,然后根据配置文件中每个任务配置的执行时间判断该任务在当前时刻是否需要执行,如果需要执行则定时任务管理器会创建一个fork子进程启动对应的任务。在unix系统中,用户创建一个新进程的方法就是调用系统调用fork,调用fork的进程称为父进程,而新创建的进程叫做子进程。
配置文件是通过配置中心发布到本机的一个可扩展标记语言(extensiblemarkuplanguage,xml)文件,其格式同crontab任务的格式相同,这样就可以快速迁移contab中的原有任务,crontab任务一般在unix和类unix的操作系统上被使用,用于设置周期性被执行的指令,用户可以配置按分钟、小时、日、月、星期配置需要执行的任务,具体采用的配置如下:
其中,服务器1所分配的基金产品列表包括:1888008801、1888008802、1888008803,以上命令中-m参数即为对应的基金产品代码。
请参阅图6,为本发明实施例提供的收益入账程序抢锁执行的入账过程示意图。由于每台服务器上的配置文件都是通过发布系统发布到本机的,因此所有服务器上的任务配置文件都是相同的,为了保证每只基金的收益入账任务只在一个服务器上执行,则需要通过zookeeper的分布式锁机制来进行控制,每台服务器上批处理程序的主要逻辑如下,以基金a的收益入账处理为例:
基金a的收益入账任务启动后,批处理程序首先会在基金收益数据库中检查基金a今日的收益入账任务是否已完成,如果已完成则退出执行。如果基金a今日的收益入账任务还未执行,则会在zookeeper服务端创建一个临时节点,其路径为:path/基金a的基金代码/lock,zookeeper会保证只有一个服务器上的批处理程序创建节点成功,假如服务器1上的批处理程序创建成功节点成功则表示其抢锁成功,那么该服务器上的批处理程序就可以执行入账的业务逻辑,其他服务器上的批处理程序则退出执行。当服务器1上的批处理程序执行完成后,则更新基金收益数据库中基金a的收益入账状态为已完成,并删除之前在zookeeper服务端所创建的zookeeper临时节点。
需要说明的是,在本发明实施例中,不同服务器上的任务配置文件都是相同的,因此这些批处理程序都会同时启动并抢锁,为了避免由于系统时间不一致等原因导致所有的任务都始终在部分服务器上执行,在定时任务管理器创建子进程后会先随机暂停1-5秒钟,再启动批处理程序。这种随机时间延迟策略可以保证所有的基金入账任务是均衡地分布在所有的服务器上执行的,实现基金产品收益入账任务的负载均衡,而且当其中部分服务器出现故障时,其他的服务器可以抢锁成功并正常启动收益入账任务。
接下来对本发明实施例中锁过期时间的设置进行说明,假设服务器1上的批处理程序抢锁成功后服务器发生故障导致收益入账任务中断,这时zookeeper服务端的锁还是被占用状态,其他服务器上的批处理程序无法抢锁成功并执行收益入账任务。为了解决抢锁成功的服务器发生故障导致的收益入账任务中断问题,在批处理程序抢锁成功后需从服务器的本机时间开始设置一个zookeeper服务端的会话(session)过期时长,一旦会话的存在时间超过该过期时长,服务器则会主动清除之前批处理程序创建的zookeeper临时节点,这样其他服务器上的批处理程序则可以重新执行批处理程序。其中,过期时长的设置可以选择基金a的历史收益入账任务中的最长一次执行时间的两倍。例如,每个服务器自身都有一个时钟,多个服务器之间会有误差,这里的过期时长是按照时间段长短来计算的,比如服务器从本机的当前时间计时,过期时长为5分钟,则在5分钟之后,服务器就会主动清除zookeeper临时节点。
请参阅图7,为本发明实施例提供的收益数据的拆分过程示意图。在现有技术中,如果启用多进程并行处理每个文件中的收益数据,由于每个收益文件大小有几百字节,而子进程会复制父进程的数据空间则会导致系统内存资源快速耗尽,从而使系统出现内存故障。为了解决内存资源快速耗尽导致的内存故障问题,本发明实施例中首先读取原始的收益文件的大小,判断原始收益文件的大小是否超过阈值,在原始收益文件过大的情况下对原始收益文件进行拆分,然后在收益入账批处理程序中启动多个子进程并行处理每个子文件,以提高每个文件中用户收益数据的处理速度。由于服务器生成有每个子文件的加密串,从而可以避免文件拆分后,在子文件处理前子文件的内容被人恶意篡改,收益文件的数据直接影响用户的资金,通过本发明实施例中为每个子文件生成的加密串,可以提高收益文件的安全性。
请参阅图8,为本发明实施例提供的收益子文件的处理过程示意图。在拆分子文件时会生成每个子文件的加密串,然后在创建子进程处理对应子文件的收益数据前会根据这个加密串核对子收益文件的合法性,只有合法的子文件才会被处理,这是为了保证每个子文件中收益数据的安全性,若子文件不合法,服务器还可以是发送错误信息告警。另外,创建子进程的个数是根据子文件的拆分个数确定的,这样可以提高整个收益文件的处理效率,还可以保证系统的整体内存使用是合理的。
通过前述的举例说明可知,本发明实施例通过发布系统来发布收益入账程序所使用的配置文件、定时任务管理器和收益入账任务,可以快速实现收益入账任务的扩容,并实现配置信息的集中和有效管理。本发明实施例通过zookeeper分布式锁实现收益入账定时任务的容灾和并行执行,该分布式锁也可以使用数据库事务中的锁机制来实现。通过随机时间延迟策略保证收益入账任务在多个服务器上是负载均衡的。发明实施例中通过文件拆分方法,可以提高每个基金产品收益文件的处理速度,并保证服务器内存的合理使用。但是该机制存在不能设置锁过期时间的问题。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
请参阅图9-a所示,本发明实施例提供的一种服务器,所述服务器为第一服务器900,所述第一服务器900包括:接收模块901、启动模块902、抢锁模块903、入账处理模块904,其中,
接收模块901,用于接收发布系统发布给n个服务器的定时任务管理器和收益入账处理程序所使用的配置文件,所述第一服务器属于所述n个服务器;
启动模块902,用于根据所述配置文件在本机上定时启动所述收益入账处理程序;
抢锁模块903,用于接收所述发布系统发布给所述n个服务器的第一收益入账任务,以及根据所述第一收益入账任务执行抢锁操作,所述第一收益入账任务用于指示对第一收益数据进行入账处理;
入账处理模块904,用于当所述第一服务器抢锁成功时,对所述第一收益数据进行入账处理。
在本发明的一些实施例中,请参阅图9-b所示,所述启动模块902,包括:
文件处理模块9021,用于根据所述定时任务管理器在本机上加载并解析所述配置文件;
检查模块9022,用于检查所述配置文件中的任务合法性;
判断模块9023,用于当所述配置文件中任务合法时,根据所述配置文件中配置的任务执行时间确定在当前时刻是否需要执行;
程序启动模块9024,用于若在当前时刻需要执行任务,根据所述定时任务管理器启动所述收益入账处理程序。
在本发明的一些实施例中,所述抢锁模块903,具体用于在zookeeper服务端创建一个zookeeper临时节点,若所述第一服务器成功创建所述zookeeper临时节点则表示所述第一服务器抢锁成功,若所述第一服务器无法创建所述zookeeper临时节点则表示所述第一服务器抢锁失败。
在本发明的一些实施例中,请参阅图9-c所示,所述第一服务器900还包括:
锁过期处理模块905,用于当所述第一服务器抢锁成功时,启动锁过期时间;在所述锁过期时间到达时,若所述第一服务器没有完成对所述第一收益数据的入账处理,放弃抢到的锁,由所述n个服务器中除所述第一服务器以外的其它服务器继续进行抢锁操作。
在本发明的一些实施例中,请参阅图9-d所示,所述入账处理模块904,包括:
文件拆分模块9041,用于对所述第一收益数据进行拆分处理,得m个收益子文件,所述m的取值为大于或等于2的自然数;
子进程创建模块9042,用于在所述收益入账处理程序中创建m个子进程;
并行处理模块9043,用于通过所述m个子进程对所述m个收益子文件进行并行的入账处理。
通过以上实施例对本发明实施例的描述可知,发布系统发布给n个服务器的定时任务管理器和收益入账处理程序所使用的配置文件,第一服务器属于n个服务器,第一服务器根据配置文件在本机上定时启动收益入账处理程序。发布系统发布给n个服务器的第一收益入账任务时,第一服务器根据第一收益入账任务执行抢锁操作,第一收益入账任务用于指示对第一收益数据进行入账处理,当第一服务器抢锁成功时,第一服务器对第一收益数据进行入账处理。本发明实施例中在收益入账的处理系统中设置发布系统,该发布系统发布第一收益入账任务后,n个服务器都执行抢锁操作,只有抢锁成功的服务器才能执行收益数据的入账处理,改变了现有技术中多个服务器各自定时执行收益入账任务导致的无法管理问题,本发明实施例可以对服务器上执行的收益入账任务进行精确化管理,提高收益入账的处理效率。
请参阅图10-a所示,本发明实施例提供的一种发布系统1000,所述发布系统1000包括:第一发布模块1001和第二发布模块1002,其中,
第一发布模块1001,用于向n个服务器发布定时任务管理器和收益入账处理程序所使用的配置文件,由所述n个服务器分别根据所述配置文件在本机上定时启动所述收益入账处理程序,所述n为正整数;
第二发布模块1002,用于向所述n个服务器发布第一收益入账任务,所述第一收益入账任务用于指示对第一收益数据进行入账处理,所述n个服务器根据所述第一收益入账任务执行抢锁操作,由第一服务器对所述第一收益数据进行入账处理,所述第一服务器为所述n个服务器中抢锁成功的一个服务器。
在本发明的一些实施例中,请参阅图10-b所示,所述发布系统1000还包括:
扩容处理模块1003,用于检测是否有新加入的服务器;当检测到新加入的服务器时,向所述新加入的服务器发布定时任务管理器和收益入账处理程序所使用的配置文件。
在本发明的一些实施例中,请参阅图10-c所示,所述发布系统1000还包括:
配置更新模块1004,用于对所述配置文件进行更新,并向所述n个服务器发布更新后的配置文件,由所述n个服务器分别根据所述更新后的配置文件在本机上更新所述收益入账处理程序。
通过以上实施例对本发明实施例的描述可知,发布系统发布给n个服务器的定时任务管理器和收益入账处理程序所使用的配置文件,第一服务器属于n个服务器,第一服务器根据配置文件在本机上定时启动收益入账处理程序。发布系统发布给n个服务器的第一收益入账任务时,第一服务器根据第一收益入账任务执行抢锁操作,第一收益入账任务用于指示对第一收益数据进行入账处理,当第一服务器抢锁成功时,第一服务器对第一收益数据进行入账处理。本发明实施例中在收益入账的处理系统中设置发布系统,该发布系统发布第一收益入账任务后,n个服务器都执行抢锁操作,只有抢锁成功的服务器才能执行收益数据的入账处理,改变了现有技术中多个服务器各自定时执行收益入账任务导致的无法管理问题,本发明实施例可以对服务器上执行的收益入账任务进行精确化管理,提高收益入账的处理效率。
图11是本发明实施例提供的一种服务器结构示意图,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessingunits,cpu)1122(例如,一个或一个以上处理器)和存储器1132,一个或一个以上存储应用程序1142或数据1144的存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和存储介质1130可以是短暂存储或持久存储。存储在存储介质1130的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1122可以设置为与存储介质1130通信,在服务器1100上执行存储介质1130中的一系列指令操作。
服务器1100还可以包括一个或一个以上电源1126,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1158,和/或,一个或一个以上操作系统1141,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。
上述实施例中该服务器1100具体可以执行图2中所示的第一服务器执行的收益入账的处理方法步骤,也可以执行图3中所示的发布系统执行的收益入账的处理方法步骤。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用cpu、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。