一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

对账系统中的大文件分布式处理方法及装置与流程

2022-02-22 17:31:21 来源:中国专利 TAG:


1.本发明涉及涉及信息技术领域,尤其涉及一种对账系统中的大文件分布式处理方法及装置。


背景技术:

2.第三方支付行业的渠道对账系统,主要用于比对第三方支付公司与两联数据(银联、网联),两联交易数据通过文件提供,交易量大的情况下相应的文件也比较大,当文件大小大于应用服务器可处理内存的一定比例时,解析文件会碰到瓶颈。
3.目前,第三方支付中的渠道对账系统,多使用单节点处理,处理大文件一般有三种方式,一是通过增加单点内存,二是通过拆分文件后依次处理,三是逐条解析后放入内存数据库进行处理。这三种方式都是单节点处理,单节点处理对账文件有两个共同的弊端,其一是单节点系统稳定性不够,单节点宕机后无其他节点处理业务,二是单节点处理效率慢,单节点只能串行处理。第一种增加内存的方式还有另外一个弊端,是应用过于依赖硬件配置,第三种处理方式的另外一个弊端是依赖于内存数据库等中间件。
4.因此,如何对对账系统中的大文件进行分布式处理,以有效规避传统方案中硬件不足、处理效率慢等弊端,是本领域技术人员亟待解决的问题。


技术实现要素:

5.本发明的目的在于提供一种对账系统中的大文件分布式处理方法及装置,以解决上述技术背景中提出的问题。
6.为实现上述目的,本发明采用以下技术方案:
7.本技术第一个方面提供了一种对账系统中的大文件分布式处理方法,所述方法适用于包括文件服务器和n个节点的集群中,每个节点对应一个应用服务器,所述文件服务器为所述n个节点中的至少一个提供对账文件,所述n为大于等于1的正整数,所述方法包括:
8.将集群中各应用服务器所在的节点按照预设的编号规则进行编号;
9.所述文件服务器将至少一个对账文件按预设的分片策略进行逻辑分片,将逻辑分片后的文件按序分配至相应节点的缓存中;
10.每个节点从所述文件服务器中下载完整的对账文件,并将对账文件存储在本地,各节点根据当前节点的编号确定读取的相应的文件片,通过字节流的方式读取文件片,获取相应的文件片数据,直至完整的对账文件被节点全部读取成功;其中,读取的每一个文件片数据存储于一块连续内存中,包括一个起始位置的首字符、一个结束位置的结束符和位于首字符和结束符之间的至少一个换行符,所述换行符用于触发数据换行操作;
11.获取所述文件片数据,对所述文件片数据进行数据处理,包括:
12.a,计算所述文件片数据对应的尾换行符的索引位置,所述尾换行符为一个文件片数据中包含的最后一个换行符;判断该文件片数据的结束符是否为尾换行符,若是,则剔除尾换行符后面的字节流数据;若否,则再次读取对账文件,从该尾换行符的索引位置往后
读,读到下一个换行符后结束,再将此次重新读取的字节流数据合并到先前分片读取的字节流数据中;
13.b,计算所述文件片数据对应的首换行符的索引位置,所述首换行符为一个文件片数据中包含的第一个换行符;判断该文件片数据的首字符是否为首换行符,若否,则直接剔除首换行符之前的字节流数据。
14.优选地,所述预设的编号规则包括:应用服务器所在节点ip的hash值对节点的数量取余,作为该节点的编号qn,即qn=ipn%n;其中,qn为集群中第n个节点的编号,ipn为集群中第n个节点的节点ip值,n为集群中的节点数量。
15.优选地,所述编号的实现方式至少包括以下之一:
16.a)在应用服务器部署前进行编号;
17.b)在应用服务器启动后通过注册中心获取相应的节点ip后进行编号。
18.优选地,所述预设的分片策略包括:
19.获取节点的内存大小,取内存大小的预设比例作为文件片的大小;
20.将对账文件的大小除以文件片的大小,得到对账文件对应的分片数量,分片数量对应需要处理对账文件的节点数量;
21.其中,当需要的节点数量小于或等于真实部署的节点数量时,所述文件服务器对各节点进行直接分配,当需要的节点数量大于真实部署的节点数量时,所述文件服务器对各节点进行循环分配。
22.优选地,所述尾换行符的索引位置是文件片结束位置的大小减去尾换行符距离结束位置的差值。
23.优选地,所述方法还包括:所述文件片读取完毕后,将读取的信息保存至数据库的文件处理表中,所述文件处理表中保存的信息包括节点ip、节点编号、文件片开始的索引位置、文件片结束的索引位置、尾换行符的索引位置、处理状态、开始时间和结束时间中的任意一种或多种。
24.优选地,所述方法还包括:设置监控模块,监控模块包括守护线程,用于监控集群中各节点的文件处理过程,其中,
25.启动守护线程定时扫描各节点的文件处理过程,若所有分片任务均正常处理结束,则当前对账文件处理结束;若存在某个分片任务处理失败、或者当前节点的处理时间超过预设时间,则判定该分片任务处理失败,对于处理失败的任务由定时任务发起重新处理。
26.更优选地,所述方法还包括:若某个节点处理失败,则人工(或守护线程)修改该节点对应的编号,当守护线程扫描到符合该编号的当前节点的任务未成功时,发起重新解析;处理成功后,更新相应节点的状态信息。
27.本技术第二个方面提供了一种对账系统中的大文件分布式处理装置,所述装置适用于包括文件服务器和n个节点的集群中,每个节点对应一个应用服务器,所述文件服务器为所述n个节点中的至少一个提供对账文件,所述n为大于等于1的正整数,所述装置包括:
28.节点编号单元,用于将集群中各应用服务器所在的节点按照预设的编号规则进行编号;
29.逻辑分片单元,用于将所述文件服务器中存储的一个对账文件按预设的分片策略进行逻辑分片,将逻辑分片后的文件片按序分配至相应节点的缓存中;
30.文件片读取单元,用于每个节点从所述文件服务器中下载完整的对账文件,并将对账文件存储在本地,各节点根据当前节点的编号确定读取的相应的文件片,通过字节流的方式读取文件片,获取相应的文件片数据,直至完整的对账文件被节点全部读取成功;其中,读取的每一个文件片数据存储于一块连续内存中,包括一个起始位置的首字符、一个结束位置的结束符和位于首字符和结束符之间的至少一个换行符,所述换行符用于触发数据换行操作;
31.节点数据处理单元,用于获取所述文件片数据,对所述文件片数据进行数据处理,使逻辑分片后读取的数据中不存在不完整的行。
32.优选地,所述逻辑分片单元包括:
33.第一计算模块,用于获取节点的内存大小,取内存大小的预设比例作为文件片的大小;
34.第二计算模块,用于将对账文件的大小除以文件片的大小,得到对账文件对应的分片数量,分片数量对应需要处理对账文件的节点数量;
35.节点分配模块,用于判断当第二计算模块计算得到的分片数量小于或等于真实部署的节点数量时,所述文件服务器对各节点进行直接分配,当第二计算模块计算得到的分片数量大于真实部署的节点数量时,所述文件服务器对各节点进行循环分配。
36.更优选地,所述节点数据处理单元包括:
37.第一处理模块,用于计算所述文件片数据对应的尾换行符的索引位置,所述尾换行符为一个文件片数据中包含的最后一个换行符;判断该文件片数据的结束符是否为尾换行符,若是,则剔除尾换行符后面的字节流数据;若否,则再次读取对账文件,从该尾换行符的索引位置往后读,读到下一个换行符后结束,再将此次重新读取的字节流数据合并到先前分片读取的字节流数据中;
38.第二处理模块,用于计算所述文件片数据对应的首换行符的索引位置,所述首换行符为一个文件片数据中包含的第一个换行符;判断该文件片数据的首字符是否为首换行符,若否,则直接剔除首换行符之前的字节流数据。
39.优选地,所述装置还包括:监控模块,所述监控模块包括守护线程,用于监控集群中各节点的文件处理过程;其中,启动守护线程用于定时扫描各节点的文件处理过程,若所有分片任务均正常处理结束,则当前对账文件处理结束;若存在某个分片任务处理失败、或者当前节点的处理时间超过预设时间,则判定该分片任务处理失败,对于处理失败的任务由定时任务发起重新处理。
40.更优选地,所述装置还包括:故障转移处理模块,用于当某个节点处理失败时,人工修改该节点对应的编号,当守护线程扫描到符合该编号的当前节点的任务未成功时,发起重新解析;处理成功后,更新相应节点的状态信息。
41.与现有技术相比,本发明的技术方案具有以下有益效果:
42.本技术提供了一种对账系统中的大文件分布式处理方法及装置,对账文件处理采用集群部署,通过算法将对账文件分成若干块(即分片,逻辑划分,物理不划分),将逻辑分片后的文件内容分配到集群中相应的节点,各节点分别处理各自的任务,有效地规避传统方案中硬件不足、处理效率慢等弊端,让大文件的处理在硬件配置较低的虚拟机、或者云服务器上也能快速处理,便于应用程序的微服务化。另外,通过分布式改造后,彻底解决了单
点不稳定的潜在风险。
附图说明
43.构成本技术的一部分附图用来提供对本技术的进一步理解,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
44.图1是本发明的大文件分布式处理方法应用的集群场景的实现方式示意图;
45.图2是本发明的大文件分布式处理方法的流程图;
46.图3是本发明的大文件分布式处理方法的文件分片实现方式示意图;
47.图4(a)~(c)是本发明的大文件分布式处理方法的分片读取后的字节流处理过程示意图;
48.图5是分片读取的字节流处理后的效果示例图;
49.图6是本发明的大文件分布式处理装置的结构框图。
具体实施方式
50.为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
51.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序,应该理解这样使用的数据在适当情况下可以互换。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
52.实施例一:
53.图1是本技术实施例应用集群的一种实现方式的示意图。
54.如图1所示,集群中可以包括文件服务器和多个节点,每个节点对应一个应用服务器。多个节点如图1中的对账应用节点1、对账应用节点2、对账应用节点3、
……
、对账应用节点n,n为大于等于1的正整数。文件服务器用于向集群中的多个节点提供逻辑分片后的对账文件。
55.各节点可以是具有处理功能的设备,例如可以包括当前技术已知的任何计算设备,如服务器、台式计算机等等。节点中可以包括存储器和处理器。存储器可以用于存储程序代码,例如,操作系统以及其他应用程序。处理器可以用于调用存储器存储的程序代码,以实现节点的相应功能。节点中包括的处理器和存储器可以通过芯片实现,此处不作具体的限定。
56.如图2所示,本技术的大文件分布式处理方法,包括如下步骤:
57.步骤s1,对集群中各应用服务器所在的节点按照预设的编号规则进行编号,通过编号进行分片。
58.对应用部署所在的节点进行编号,编号规则为:应用服务器所在节点ip的hash值对节点的数量取余,作为该节点的编号qn,即qn=ipn%n;其中,qn为集群中第n个节点的编
号,n≤n,ipn为集群中第n个节点的节点ip值,n为集群中的节点数量。
59.对账系统启动时,对各个节点进行编号(0、1、2、
……
、qn),编号的实现方式有多种,可以在应用部署前进行编号,也可以在应用启动后通过注册中心获取相应的ip后进行编号。如果把集群部署的对账系统看作一个完整的系统,那么编号的过程可以看作为对对账系统进行分片,那么针对对账文件的读取也需要进行相匹配的分片处理。
60.步骤s2,所述文件服务器将至少一个对账文件按预设的分片策略进行逻辑分片,将逻辑分片后的文件按序分配至相应节点的缓存中。
61.首先,获取节点的内存大小,取内存大小的预设比例作为文件片的大小。假设,节点的内存大小为m(单位:g),预设比例取内存大小的1/2(该值可以根据实际情况进行适当调整),则节点每次读取的文件的大小为:m/2。
62.获取对账文件的总大小,将对账文件的大小除以文件片的大小,得到对账文件对应的分片数量。假设对账文件的总大小为v(单位:g),则进行分片后,对账文件对应的分片数量为:v/m/2(2v/m)。分片数量对应需要处理对账文件的节点数量,当需要的节点数量小于或等于真实部署的节点数量时,所述文件服务器对各节点进行直接分配,当需要的节点数量大于真实部署的节点数量时,所述文件服务器对各节点进行循环分配。
63.对账处理时,每个节点从文件服务器中拉取完整的对账文件,并将对账文件存储在本地。应用服务器在读取对账文件时,根据当前节点的编号对对账文件进行分片读取,读取的情况如下:
64.分片时需要将文件分片索引转化为byte,定义为b,b=m*1024*1024*1024;
65.编号为0的节点读取的文件片为:[0,(b/2)*1];
[0066]
编号为1的节点读取的文件片为:[(b/2)*1 1,(b/2)*2];
[0067]
编号为2的节点读取的文件片为:[(b/2)*2 1,(b/2)*3];
[0068]
……
[0069]
编号为n的节点读取的文件片为:[(b/2)*qn 1,(b/2)*(qn 1)];
[0070]
当(b/2)*(qn 1)》=v*1024*1024*1024时取v。
[0071]
对对账文件进行分片的实现方式参阅图3的示例图。
[0072]
步骤s3,各节点通过字节流的方式读取相应的文件片。
[0073]
文件分片完成后,就可以读取相应的文件片数据,应用程序读取文件片时通过字节流读取,故对文件进行逻辑分片后,可以保证应用节点读取分片后的文件读取不会重复、不会遗漏。当所有节点都处理成功后,则完整文件的处理亦成功。
[0074]
步骤s4,文件片读取后,对获取的文件片数据进行数据处理,使读取的数据中不存在不完整的行。
[0075]
通过字节流读取文件时,会定义一段缓冲区(比如1024字节)读取文件内容。由于本技术是逻辑分片,处理真实的对账文件时,一条完整的业务交易都是通过换行符(特殊场景下可以用其他字符来区分)来区分,在逻辑分片后读取的文件中会存在不完整的行,对这样的数据需要进行额外的处理。
[0076]
其中,读取的每一个文件片数据存储于一块连续内存中,包括一个起始位置的首字符、一个结束位置的结束符和位于首字符和结束符之间的至少一个换行符,所述换行符用于触发数据换行操作。
[0077]
对所述文件片数据进行数据处理,具体包括如下步骤:
[0078]
a,记录所述文件片数据对应的尾换行符的索引位置,所述尾换行符的索引位置是文件片结束位置的大小减去尾换行符距离结束位置的差值,所述尾换行符为一个文件片数据中包含的最后一个换行符。判断该文件片数据的结束符是否为尾换行符,若是,则剔除尾换行符后面的字节流数据;若否,则再次读取对账文件,从该尾换行符的索引位置往后读,读到下一个换行符后结束,再将此次重新读取的字节流数据合并到先前分片读取的字节流数据中;
[0079]
b,记录所述文件片数据对应的首换行符的索引位置,所述首换行符为一个文件片数据中包含的第一个换行符。判断该文件片数据的首字符是否为首换行符,若否,则直接剔除首换行符之前的字节流数据,并且将读取信息记录到数据库便于后续进行监控、故障转移等其他处理。处理完毕后即可将相应的字节流数据转换为业务对象数据进行对账剩余处理。
[0080]
图4(a)~图4(c)均为一个文件片读取后的字节流处理过程示例图。
[0081]
参阅图4(a)所示,该分片读取的字节流数据包括一个首字符、一个结束符,以及位于首字符和结束符之间的三个换行符,三个换行符将所述首字符和所述结束符之间的字节流数据分割成四行数据。其中,第一行数据不是完整的行,第二行数据、第三行数据为完整的行,第四行数据不是完整的行。第一个换行符位于第一行数据的末尾,称为首换行符,表示该字节流数据的第一个换行符;第二个换行符位于第二行数据的末尾;第三个换行符位于第三行数据的末尾,而第四行数据不是完整的行,因此,第三个换行符为尾换行符,表示该字节流数据的最后一个换行符。
[0082]
根据上述数据处理的步骤a,该文件片的结束符位于第四行数据,且不是尾换行符,为了保证读取的是完整的行数据,则需要再次读取对账文件,从该尾换行符的索引位置往后读,读到下一个换行符后结束,即读到与该文件片紧邻的下一个文件片数据的第一个换行符位置,再将此次重新读取的字节流数据合并到先前分片读取的字节流数据中,以使得该文件片的第四行数据是一个完整的行。
[0083]
根据上述数据处理的步骤b,该文件片的首字符位于第一行数据,且不是首换行符,为了保证读取的是完整的行数据,则需要剔除首换行符之前的字节流。
[0084]
字节流处理后的效果图参阅图5。
[0085]
同理,参阅图4(b)所示,该分片读取的字节流数据包括一个首字符、一个结束符,以及位于首字符和结束符之间的两个换行符,两个换行符将所述首字符和所述结束符之间的字节流数据分割成三行数据。其中,第一行数据、第二行数据是完整的行,第三行数据不是完整的行。
[0086]
根据上述数据处理的步骤a和步骤b,该文件片的结束符位于第三行数据,且不是尾换行符,为了保证读取的是完整的行数据,则需要再次读取对账文件,从该尾换行符的索引位置往后读,读到下一个换行符后结束,即读到与该文件片紧邻的下一个文件片数据的第一个换行符位置,再将此次重新读取的字节流数据合并到先前分片读取的字节流数据中,以使得该文件片的第三行数据是一个完整的行。该文件片的第一行数据是完整的行,首字符即为首换行符,无需进行处理。
[0087]
同理,参阅图4(c)所示,该分片读取的字节流数据包括一个首字符、一个结束符,
以及位于首字符和结束符之间的两个换行符,两个换行符将所述首字符和所述结束符之间的字节流数据分割成三行数据。其中,第一行数据不是完整的行,第二行数据、第三行数据是完整的行。第一个换行符位于第一行数据的末尾,称为首换行符,表示该字节流数据的第一个换行符;第二个换行符位于第二行数据的末尾;第三行数据是完整的行,结束符即为最后一个换行符,即结束符为尾换行符。
[0088]
根据上述数据处理的步骤a和步骤b,该文件片的结束符为尾换行符,直接剔除尾换行符后面的字节流数据。该文件片的首字符不是首换行符,直接剔除首换行符之前的字节流数据。
[0089]
上述文件片读取完毕后,需要将读取的信息保存至数据库的文件处理表中,所述文件处理表中保存的信息包括节点ip、节点编号、文件片开始的索引位置、文件片结束的索引位置、尾换行符的索引位置、处理状态、开始时间和结束时间等。
[0090]
在一种优选实施例中,所述方法还包括:监控、故障转移处理,具体包括:
[0091]
文件处理业务监控:应用中开启守护线程,定时扫描数据库存储的文件处理表,若所有分片任务均正常处理结束,则当前文件处理结束,若处理失败、或者当前节点在预设时间(例如,30分钟,该时间可根据当前文件处理时间进行调整)内未处理完毕,则判定该分片任务处理失败,对于处理失败的任务可以由定时任务发起重新处理。
[0092]
故障转移处理:若某个节点处理失败,且判定当前应用不可用(其他技术手段比如健康检查),则人工(或守护线程)修改该节点对应的编号,当守护线程扫描到符合该编号的当前节点的任务未成功时,发起重新解析;处理成功后,更新相应节点的状态信息。这里,守护线程也可以直接修改编号,守护线程修改属于系统处理,人工修改属于人工介入。
[0093]
实施例二:
[0094]
参阅图6所示,本技术还提供了一种对账系统中的大文件分布式处理装置,所述装置适用于包括文件服务器和n个节点的集群中,每个节点对应一个应用服务器,所述文件服务器为所述n个节点中的至少一个提供对账文件,所述n为大于等于1的正整数,所述装置包括:
[0095]
节点编号单元100,用于将集群中各应用服务器所在的节点按照预设的编号规则进行编号;
[0096]
逻辑分片单元200,用于将所述文件服务器中存储的一个对账文件按预设的分片策略进行逻辑分片,将逻辑分片后的文件片按序分配至相应节点的缓存中;
[0097]
文件片读取单元300,用于每个节点从所述文件服务器中下载完整的对账文件,并将对账文件存储在本地,各节点根据当前节点的编号确定读取的相应的文件片,通过字节流的方式读取文件片,获取相应的文件片数据,直至完整的对账文件被节点全部读取成功;其中,读取的每一个文件片数据存储于一块连续内存中,包括一个起始位置的首字符、一个结束位置的结束符和位于首字符和结束符之间的至少一个换行符,所述换行符用于触发数据换行操作;
[0098]
节点数据处理单元400,用于获取所述文件片数据,对所述文件片数据进行数据处理,使逻辑分片后读取的数据中不存在不完整的行。
[0099]
上述的逻辑分片单元200包括:
[0100]
第一计算模块201,用于获取节点的内存大小,取内存大小的预设比例作为文件片
的大小;
[0101]
第二计算模块202,用于将对账文件的大小除以文件片的大小,得到对账文件对应的分片数量,分片数量对应需要处理对账文件的节点数量;
[0102]
节点分配模块203,用于判断当第二计算模块202计算得到的分片数量小于或等于真实部署的节点数量时,所述文件服务器对各节点进行直接分配,当第二计算模块202计算得到的分片数量大于真实部署的节点数量时,所述文件服务器对各节点进行循环分配。
[0103]
上述的节点数据处理单元400包括:
[0104]
第一处理模块401,用于计算所述文件片数据对应的尾换行符的索引位置,所述尾换行符为一个文件片数据中包含的最后一个换行符;判断该文件片数据的结束符是否为尾换行符,若是,则剔除尾换行符后面的字节流数据;若否,则再次读取对账文件,从该尾换行符的索引位置往后读,读到下一个换行符后结束,再将此次重新读取的字节流数据合并到先前分片读取的字节流数据中;
[0105]
第二处理模块402,用于计算所述文件片数据对应的首换行符的索引位置,所述首换行符为一个文件片数据中包含的第一个换行符;判断该文件片数据的首字符是否为首换行符,若否,则直接剔除首换行符之前的字节流数据。
[0106]
在一种优选实施例中,所述装置还包括:监控模块和故障转移处理模块;其中,所述监控模块包括守护线程,用于监控集群中各节点的文件处理过程;其中,启动守护线程用于定时扫描各节点的文件处理过程,若所有分片任务均正常处理结束,则当前对账文件处理结束;若存在某个分片任务处理失败、或者当前节点的处理时间超过预设时间,则判定该分片任务处理失败,对于处理失败的任务由定时任务发起重新处理。所述故障转移处理模块,用于当某个节点处理失败时,人工(或守护线程)修改该节点对应的编号,当守护线程扫描到符合该编号的当前节点的任务未成功时,发起重新解析;处理成功后,更新相应节点的状态信息。
[0107]
综上所述,本技术提供了一种对账系统中的大文件分布式处理方法及装置,对账文件处理采用集群部署,通过算法将对账文件分成若干块(即分片,逻辑划分,物理不划分),将逻辑分片后的文件内容分配到集群中相应的节点,各节点分别处理各自的任务。渠道对账在使用该本技术的技术方案进行分布式改造后,显著提升了文件处理效率,有效地解决了单机内存不够的问题,让大文件的处理在硬件配置较低的虚拟机、或者云服务器上也能快速处理,便于应用程序的微服务化。另外,通过分布式改造后,彻底解决了单点不稳定的潜在风险。
[0108]
以上对本发明的具体实施例进行了详细描述,但其只是作为范例,本发明并不限制于以上描述的具体实施例。对于本领域技术人员而言,任何对本发明进行的等同修改和替代也都在本发明的范畴之中。因此,在不脱离本发明的精神和范围下所作的均等变换和修改,都应涵盖在本发明的范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献