高并发数据同步方法及系统与流程

文档序号:11774836阅读:1679来源:国知局
高并发数据同步方法及系统与流程

本发明涉及数据同步领域,特别是涉及一种可实现数据一致性和低延迟的高并发数据同步方法及系统。



背景技术:

目前随着互联网的发展,金融公司的数据在每年成几何倍数增长,数据同步是内部一个非常重要的流程,而券商行业对数据一致性及时效性要求极高,要求数据零丢失、且低时延。

同时经典的cap理论表明,任何分布式系统在一致性、可用性、分区容错性方面,不能兼得,最多只能取其二。而券商行业每天开市期间大量的交易数据在短时间内聚集,数据同步的时效性会大打折扣,这个问题在行情高峰期间尤为明显。目前在券商行业中存在的数据同步产品仍存在高并发下性能瓶颈的问题,如高并发下同步延迟会达到十多秒。



技术实现要素:

本发明的技术目的在于提出一种可保证数据一致性且可极大地减少数据同步延迟的高并发数据同步方法及系统。

针对上述技术目的,本发明提供的高并发数据同步方法包含以下步骤。步骤1,数据源端启动拆分线程,该拆分线程从持久化区域读取上次同步位置,并定时读取数据库的最新位置,该拆分线程针对该上次同步位置和该最新位置所对应范围内的数据段进行拆分,并将拆分的数据段放入代办拆分的拆分池中。步骤2,该数据源端启动多个数据采集线程,该多个数据采集线程不断从该拆分池中读取拆分的数据段消费。步骤3,该数据源端启动合并线程,该合并线程中的事务池针对每个拆分的数据段中读取到的数据进行事务控制。步骤4,该合并线程按顺序执行事务池中的任务,该合并线程将事务完成的数据根据该事务下动作键值的hash算法进行分类,并行发送给该数据源端启动的多个发送线程。步骤5,该多个发送线程将分类的数据发送到消息中间件,且在发送完毕后该合并线程将该最新位置写入该数据源端启动的持久化线程,并由该持久化线程异步写入该持久化区域。步骤6,数据末端启动多个接收线程并行接收该消息中间件中缓冲的数据,且该数据末端在业务完成后使用该消息中间件做持久化。

优选地,当该合并线程按顺序执行事务池中的任务时,若事务未完成则按事务标识放入该事务池继续等待,如果该事务已完成则从该事务池中清除该事务。

优选地在步骤4中,该合并线程将完成事务下的动作进行分拆,将每个动作中的键值转成hash值后对该多个发送线程的数量取模,根据得到的取模值放入对应的发送线程中。进一步地,每个动作中的键值选取自每条数据的主键或者数据存储的物理地址。

优选地,该多个数据采集线程之间并行工作。

本发明还提供一种高并发数据同步系统,包含数据源端、消息中间件和数据末端。该数据源端启动的拆分线程从持久化区域读取上次同步位置,并定时读取数据库的最新位置,该拆分线程针对该上次同步位置和该最新位置所对应范围内的数据段进行拆分,并将拆分的数据段放入代办拆分的拆分池中。该数据源端启动的多个数据采集线程不断从该拆分池中读取拆分的数据段消费。该数据源端启动的合并线程中的事务池针对每个拆分的数据段中读取到的数据进行事务控制。该数据源端启动的合并线程按顺序执行事务池中的任务,该合并线程将事务完成的数据根据该事务下动作键值的hash算法进行分类,并行发送给该数据源端启动的多个发送线程。该多个发送线程将分类的数据发送到消息中间件,且该合并线程在发送完毕后将该最新位置写入该数据源端启动的持久化线程,并由该持久化线程异步写入该持久化区域。该数据末端启动的多个接收线程并行接收该消息中间件中缓冲的数据,且该数据末端在业务完成后使用该消息中间件做持久化。

优选地,当该合并线程按顺序执行事务池中的任务时,若事务未完成则按事务标识放入该事务池继续等待,如果该事务已完成则从该事务池中清除该事务。

优选地,该合并线程将完成事务下的动作进行分拆,将每个动作中的键值转成hash值后对该多个发送线程的数量取模,根据得到的取模值放入对应的发送线程中。进一步地,每个动作中的键值选取自每条数据的主键或者数据存储的物理地址。

优选地,该多个数据采集线程之间并行工作。

与现有技术相比,本发明的持久化策略保证数据一致性,且拆分和缓冲的方式极大地提高了高并发下数据同步的处理能力,使系统可实现针对大量数据低延迟同步。

附图说明

图1为本发明一实施例的数据同步方法的流程图。

图2为本发明的数据同步系统的工作原理示意图。

具体实施方式

为使对本发明的目的、构造、特征、及其功能有进一步的了解,兹配合实施例详细说明如下。

请参见图1和图2,图1为本发明一实施例的数据同步方法的流程图,图2为本发明的数据同步系统的工作原理示意图。本发明的高并发数据同步方法包含以下步骤:

s1,数据源端启动拆分线程,该拆分线程从持久化区域读取上次同步位置,并定时读取数据库的最新位置,该拆分线程针对该上次同步位置和该最新位置所对应范围内的数据段进行拆分,并将拆分的数据段放入代办拆分的拆分池中。

s2,该数据源端启动多个数据采集线程,该多个数据采集线程不断从该拆分池中读取拆分的数据段消费。优选地,该多个数据采集线程之间并行工作。

s3,该数据源端启动合并线程,该合并线程中的事务池针对每个拆分的数据段中读取到的数据进行事务控制。

s4,该合并线程按顺序执行事务池中的任务,该合并线程将事务完成的数据根据该事务下动作键值(key)的hash算法进行分类,并行发送给该数据源端启动的多个发送线程。

在一实施例中,如果该顺序的作业还没做完,该合并线程将会阻塞等待。具体来说,当该合并线程按顺序执行事务池中的任务时,若事务未完成则按事务标识放入该事务池继续等待,如果该事务已完成则从该事务池中清除该事务。

优选地,在步骤s4中,该合并线程将完成事务下的动作进行分拆,将每个动作中的键值转成hash值后对该多个发送线程的数量取模,根据得到的取模值放入对应的发送线程中。在实际应用中,每个动作中的键值选取自每条数据的主键或者数据存储的物理地址,一般来说,只要是能够标志该条数据唯一性的字段即可,如在oracle数据库可以使用rowid作为键值,但本发明并不以此为限。

s5,该多个发送线程将分类的数据发送到消息中间件,且在发送完毕后该合并线程将该最新位置写入该数据源端启动的持久化线程,并由该持久化线程异步写入该持久化区域。优选地,该多个发送线程之间并行工作,互不影响。

s6,数据末端启动多个接收线程并行接收该消息中间件中缓冲的数据,且该数据末端在业务完成后使用该消息中间件做持久化。

该技术方案是以拆分处理的思想化解数据峰值,再以合并线程统一管控后续的处理,保证数据的顺序性和事务性。同时又利用每条数据独有性的特征继续拆分并行发送,保证数据发送的高效性。以消息中间件为缓冲提升数据的吞吐量,数据末端又以并行处理的思想保证数据接收的高效性。

继续参见图2,本发明的高并发数据同步系统100包含数据源端1、消息中间件2和数据末端3。

数据源端1启动的拆分线程11从持久化区域12读取上次同步位置,并定时读取数据库10的最新位置,拆分线程11针对该上次同步位置和该最新位置所对应范围内的数据段进行拆分,并将拆分的数据段放入代办拆分的拆分池13中。

数据源端1启动的多个数据采集线程14_0、14_1、…、14_m-1不断从拆分池13中读取拆分的数据段消费,其中m为数据采集线程数。优选地,多个数据采集线程之间并行工作,互不影响。

数据源端1启动的合并线程15中的事务池16针对每个拆分的数据段中读取到的数据进行事务控制。

数据源端1启动的合并线程15按顺序执行事务池16中的任务,合并线程15将事务完成的数据根据该事务下动作键值的hash算法进行分类,并行发送给数据源端1启动的多个发送线程17_0、17_1、…、17_n-1,其中n为发送线程数。在一实施例中,如果该顺序的作业还没做完,合并线程15将会阻塞等待。具体来说,当合并线程15按顺序执行事务池16中的任务时,若事务未完成则按事务标识放入事务池16继续等待,如果该事务已完成则从事务池16中清除该事务。优选地,合并线程15将完成事务下的动作进行分拆,将每个动作中的键值转成hash值后对发送线程数n取模,根据得到的取模值放入对应的发送线程中。在实际应用中,每个动作中的键值选取自每条数据的主键或者数据存储的物理地址,一般来说,只要是能够标志该条数据唯一性的字段即可,如在oracle可以使用rowid作为键值,但本发明并不以此为限。

多个发送线程将分类的数据发送到消息中间件2,且合并线程15在发送完毕后将该最新位置写入数据源端1启动的持久化线程,并由该持久化线程异步写入持久化区域12。在一实施例中,数据源端1的多个发送线程会根据设置将数据分类,发送到消息中间件2对应主题(topic)的分区中。

数据末端3启动的多个接收线程31_0、31_1、…、31_k-1并行接收消息中间件2中缓冲的数据,且数据末端3在业务完成后使用消息中间件2做持久化,其中k为接收线程数。在实际应用中,接收线程数k原则上不超过上述主题(topic)的分区数,多个接收线程同时读取消息中间件2中缓冲的数据,从数据末端3上次持久化的位置开始接收数据并在业务处理完毕后做持久化到读取的位置,因为数据源端发送的数据都会带有相应的键值(key),数据末端需要根据键值进行内容排重,以保证数据的唯一性。

本发明提出了一种数据同步过程中保证数据一致性和低延迟的解决方案。首先,本发明通过数据源端发送成功后和数据末端业务处理完毕后才做持久化,保证数据在消费完成之前不会丢失,从而保证了一致性。同时,持久化通过异步方式实现,减少时间消耗。

其次,采用拆分的方式,将数据源端的数据内容拆分成多块,将最耗时的解读过程交给多个任务并行完成,并在后面加入一个合并线程以顺序的方式,以事务为单位进行处理,并将数据以hash值进行分类并行发送,极大地提高了高并发下数据同步的处理能力。

再次,使用消息中间件做缓冲,可以启动任意个接收端并行收取数据,极大地提升了数据同步的吞吐能力。

因此,本发明的持久化策略保证了数据一致性,且极大地提高了高并发下数据同步的处理能力,使系统具备了在万笔交易下数据秒级同步的能力。

本发明已由上述相关实施例加以描述,然而上述实施例仅为实施本发明的范例。必需指出的是,已揭露的实施例并未限制本发明的范围。相反地,在不脱离本发明的精神和范围内所作的更动与润饰,均属本发明的专利保护范围。

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