CN112148498A - 数据同步方法、装置、服务器及存储介质 - Google Patents

数据同步方法、装置、服务器及存储介质 Download PDF

Info

Publication number
CN112148498A
CN112148498A CN202011064351.0A CN202011064351A CN112148498A CN 112148498 A CN112148498 A CN 112148498A CN 202011064351 A CN202011064351 A CN 202011064351A CN 112148498 A CN112148498 A CN 112148498A
Authority
CN
China
Prior art keywords
data
preset
synchronized
event
buffer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202011064351.0A
Other languages
English (en)
Inventor
刘耀晖
王飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ping An Puhui Enterprise Management Co Ltd
Original Assignee
Ping An Puhui Enterprise Management Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ping An Puhui Enterprise Management Co Ltd filed Critical Ping An Puhui Enterprise Management Co Ltd
Priority to CN202011064351.0A priority Critical patent/CN112148498A/zh
Publication of CN112148498A publication Critical patent/CN112148498A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/547Messaging middleware

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Quality & Reliability (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及数据处理技术领域,提供一种数据同步方法、装置、服务器及存储介质,方法包括:根据预设的无锁策略,获取待同步数据,其中,所述无锁策略包括单线程获取策略或基于多线程的比较再交换策略;根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据,其中,所述缓冲数组中两个数据之间填充有预设数量的占位数据;根据预设的未读数据变量,从所述缓冲数据中确定可读数据;通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件。本申请能提高数据同步的效率。本申请可以应用于数字医疗中数据同步场景中。

Description

数据同步方法、装置、服务器及存储介质
技术领域
本发明涉及数据处理技术领域,尤其涉及一种数据同步方法、装置、服务器及存储介质。
背景技术
目前,可以通过数据同步组件,比如阿里巴巴的Canal,将数据库的数据同步至各个节点中,但在实践中发现,数据同步的过程中会使用锁等资源,数据的同步效率不高。
因此,如何提高数据同步的效率是一个需要解决的技术问题。
发明内容
鉴于以上内容,有必要提供一种数据同步方法、装置、服务器及存储介质,能够提高数据同步的效率。
本发明的第一方面提供一种数据同步方法,所述数据同步方法包括:
根据预设的无锁策略,获取待同步数据,其中,所述无锁策略包括单线程获取策略或基于多线程的比较再交换策略;
根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据,其中,所述缓冲数组中两个数据之间填充有预设数量的占位数据;
根据预设的未读数据变量,从所述缓冲数据中确定可读数据;
通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件。
在一种可能的实现方式中,所述根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据包括:
针对每个所述待同步数据,获取所述数组可用位置变量的最新值;
从所述基于环形数据结构的缓冲数组中确定与所述最新值对应的位置空间;
判断所述位置空间是否存在已存储数据;
若所述位置空间不存在已存储数据,将所述待同步数据写入至所述位置空间中,获得所述缓冲数据;或
若所述位置空间存在已存储数据,根据所述待同步数据,将所述已存储数据进行替换操作,获得所述缓冲数据。
在一种可能的实现方式中,所述通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件包括:
通过解密线程,对所述可读数据进行解密,获得解密数据;
根据所述解密数据,生成输入事件;
根据幂等性校验算法,对所述输入事件进行过滤,获得过滤事件;
根据所述过滤事件的事件类型,将所述过滤事件分配给预设的多个业务线程进行数据处理,获得同步数据以及输出事件;
将所述输入事件以及所述输出事件确定为用于故障恢复的同步事件。
在一种可能的实现方式中,所述根据预设的无锁策略,获取待同步数据包括:
判断所述待同步数据的数据源是否为消息中间件;
若所述待同步数据的数据源为消息中间件,根据所述单线程获取策略,使用消息中间件的拉动模式,按照预设时间间隔以及预设数据量,使用单线程从所述消息中间件中获取所述待同步数据。
在一种可能的实现方式中,所述根据预设的无锁策略,获取待同步数据包括:
判断所述待同步数据的数据源是否有多个;
若所述待同步数据的数据源有多个,根据所述基于多线程的比较再交换策略,通过比较再交换算法来使用多个线程从多个所述数据源中获取待同步数据。
在一种可能的实现方式中,所述通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件之后,所述数据同步方法还包括:
当检测到运行中的服务停止运行时,从所述同步事件中确定未完成的目标事件;
将所述目标事件以事件流的形式进行存储。
在一种可能的实现方式中,所述将所述目标事件以事件流的形式进行存储之后,所述数据同步方法还包括:
当接收到故障恢复指令时,从预设的存储位置获取所述目标事件;
将所述目标事件加载至内存中以进行事件重演。
本发明的第二方面提供一种数据同步装置,所述数据同步装置包括:
获取模块,用于根据预设的无锁策略,获取待同步数据,其中,所述无锁策略包括单线程获取策略或基于多线程的比较再交换策略;
写入模块,用于根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据,其中,所述缓冲数组中两个数据之间填充有预设数量的占位数据;
确定模块,用于根据预设的未读数据变量,从所述缓冲数据中确定可读数据;
处理模块,用于通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件。
本发明的第三方面提供一种服务器,所述服务器包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现所述的数据同步方法。
本发明的第四方面提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述的数据同步方法。
由以上技术方案,本发明中,可以通过无锁策略,获取待同步数据,避免了因使用锁而产生的资源消耗,同时,通过在缓冲数组中两个数据之间填充有预设数量的占位数据,避免了相同的数据被不同的线程加载修改导致其他线程加载的数据失效的问题,进一步提高了数据处理的效率,而且,可以生成用于故障恢复的事件,提高了系统的稳定性。本申请可以应用于数字医疗中数据同步场景中,如患者就诊数据同步。
附图说明
图1是本发明公开的一种数据同步方法的较佳实施例的流程图。
图2是本发明公开的一种数据同步装置的较佳实施例的功能模块图。
图3是本发明实现数据同步方法的较佳实施例的服务器的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
本发明实施例的数据同步方法应用在服务器中,也可以应用在服务器和通过网络与所述服务器进行连接的电子设备所构成的硬件环境中,由服务器和电子设备共同执行。网络包括但不限于:广域网、城域网或局域网。
其中,服务器可以是指能对网络中其它设备(如电子设备)提供服务的计算机系统。如果一个个人电脑能够对外提供文件传输协议(File Transfer Protocol,简称FTP)服务,也可以叫服务器。从狭义范围上讲,服务器专指某些高性能计算机,能通过网络,对外提供服务,其相对于普通的个人电脑来说,稳定性、安全性、性能等方面都要求更高,因此在CPU、芯片组、内存、磁盘系统、网络等硬件和普通的个人电脑有所不同。
所述电子设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述电子设备还可包括网络设备和/或用户设备。其中,所述网络设备包括但不限于单个网络设备、多个网络设备组成的服务器组或基于云计算(Cloud Computing)的由大量主机或网络设备构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。所述用户设备包括但不限于任何一种可与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理PDA等。
请参见图1,图1是本发明公开的一种数据同步方法的较佳实施例的流程图。其中,根据不同的需求,该流程图中步骤的顺序可以改变,某些步骤可以省略。其中,所述数据同步方法的执行主体可以是服务器。
S11、根据预设的无锁策略,获取待同步数据,其中,所述无锁策略包括单线程获取策略或基于多线程的比较再交换策略。
其中,所述待同步数据可以是某个重要系统(比如交易核算系统)在内存中产生的大量数据,这些数据可以是其他众多系统进行数据处理的原始数据,因此,需要对这些数据进行系统同步。
本发明实施例中,可以根据不同的配置信息从数据库和/或消息中间件和/或数据接口中获取所述待同步数据。
具体的,所述根据预设的无锁策略,获取待同步数据包括:
判断所述待同步数据的数据源是否为消息中间件;
若所述待同步数据的数据源为消息中间件,根据所述单线程获取策略,使用消息中间件的拉动模式,按照预设时间间隔以及预设数据量,使用单线程从所述消息中间件中获取所述待同步数据。
在该可选的实施方式中,判断所述待同步数据的数据源是否为消息中间件,若所述待同步数据的数据源为消息中间件,根据所述单线程获取策略,从消息中间件中获取所述待同步数据,且只启动一个线程从所述消息中间件中获取所述待同步数据,避免多个线程同时将同一组数据写入内存而产生的写冲突,选用拉动(PULL)模式从消息中间件中获取所述待同步数据,拉动模式是指由启动的线程主动去所述消息中间件获取数据,可以实时调整获取的消息数量、时间间隔,从而能够实现根据当前系统的负载进行调整获取的数据的数量,提高数据获取效率。
具体的,所述根据预设的无锁策略,获取待同步数据包括:
判断所述待同步数据的数据源是否有多个;
若所述待同步数据的数据源有多个,根据所述基于多线程的比较再交换策略,通过比较再交换算法来使用多个线程从多个所述数据源中获取待同步数据。
在该可选的实施方式中,可以判断所述待同步数据的数据源是否有多个,若所述待同步数据的数据源有多个,需要从多个数据源中获取所述待同步数据,启动的线程有多个,可以通过比较再交换(CAS,Compare and Swap)算法从多个所述数据源中获取待同步数据,避免使用锁导致的系统资源消耗。
其中,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B,算法原理是当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
S12、根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据,其中,所述缓冲数组中两个数据之间填充有预设数量的占位数据。
具体的,所述根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据包括:
针对每个所述待同步数据,获取所述数组可用位置变量的最新值;
从所述基于环形数据结构的缓冲数组中确定与所述最新值对应的位置空间;
判断所述位置空间是否存在已存储数据;
若所述位置空间不存在已存储数据,将所述待同步数据写入至所述位置空间中,获得所述缓冲数据;或
若所述位置空间存在已存储数据,根据所述待同步数据,对所述已存储数据进行替换操作,获得所述缓冲数据。
其中,所述数据可用位置变量可以用于指示所述缓冲数组中当前可以存放数据的位置。
其中,当线程持续向所述缓冲数组中写入数据时,会在到达末尾时环绕至头部,展开新一轮的环绕,即无需进行数据的删除操作来腾出数组空间,新的数据可以覆盖掉旧的数据。
其中,可以预设一个数组可用位置变量,所述数组可用位置变量用于指示所述缓冲数据的下一个可用位置,即可以将数据写入的位置。
本发明实施例中,针对每个所述待同步数据,获取所述数组可用位置变量的最新值,从所述基于环形数据结构的缓冲数组中确定与所述最新值对应的位置空间,判断所述位置空间是否存在已存储数据,若所述位置空间不存在已存储数据,将所述待同步数据写入至所述位置空间中,获得所述缓冲数据,或者,若所述位置空间存在已存储数据,根据所述待同步数据,对所述已存储数据进行替换操作,获得所述缓冲数据,由于数据在CPU缓存中不是以单独变量或单独指针来存储的,而是由缓存行组成的,通常为64字节,Java中long类型为8字节,因此,一个缓存行可以存储8个long类型的变量,当long型数组中的一个值被加载到缓存行中时,另外七个值会被一同加载,这种CPU特性存在一个弊端,假如数组中的第一个位置正在被生产者写入,第八个位置正在被消费者写入,生产者与消费者运行在不同内核的线程中,使用不同的缓存,当生产者更新了数组中的第一个位置的数据,内存中的数组中的第一个位置的值会被更新,内存中数组中的第一个位置的值的更新会使所有缓存了该值的缓存行失效,处理同一缓存行的其它数据的其他线程,需要重新从内存中读取整个缓存行,执行过程显然被延缓了,这种对缓存行的共享在并发场景下是影响效率的,所述缓冲数组的数据之间可以填充有7个不被使用的long型变量,即每个数据某一线程进行处理时,影响的缓存行中只有这一个数据,对其他数据没有影响,避免了上述缓存行失效的问题,提高数据处理效率。
S13、根据预设的未读数据变量,从所述缓冲数据中确定可读数据。
其中,所述未读取数据变量可以用于指示所述缓冲数组中正在读取的数据的下一个数据的位置,即所述可读数据在数组中的位置。
S14、通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件。
具体的,所述通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件包括:
通过解密线程,对所述可读数据进行解密,获得解密数据;
根据所述解密数据,生成输入事件;
根据幂等性校验算法,对所述输入事件进行过滤,获得过滤事件;
根据所述过滤事件的事件类型,将所述过滤事件分配给预设的多个业务线程进行数据处理,获得同步数据以及输出事件;
将所述输入事件以及所述输出事件确定为用于故障恢复的同步事件。
其中,所述同步数据可以是被线程经过不同业务数据的处理逻辑,然后进行数据过滤、聚集、计算、映射等处理,并渲染为外部输出系统要求的数据结构,同时,使用公钥进行加密后,包装成输出通道要求的数据结构的数据,所述同步数据通过对接数据输出通道传输到上下游各个系统中,完成数据同步。
其中,事件可以是一种数据结构,包括了数据本身的内容以及系统运行时产生的状态等参数,事件可以被写入至磁盘中进行存储,事件可以看成是一个事件对象,包括事件ID、业务场景ID、数据类型ID、同步渠道、事件内容、事件生命周期、事件状态、事件上下文等属性。
在该可选的实施方式中,可以先通过解密线程,对所述可读数据进行解密,获得解密数据,然后根据所述解密数据,生成输入事件,再根据幂等性校验算法,对所述输入事件进行过滤,获得过滤事件,根据所述过滤事件的事件类型,将所述过滤事件分配给预设的多个业务线程进行数据处理,获得同步数据以及输出事件,将所述输入事件以及所述输出事件确定为用于故障恢复的同步事件。其中,所述对所述输入事件进行过滤包括:同一个事件输入两次,会通过事件ID进行过滤,即过滤掉相同ID的事件,不同事件ID的输入,若事件内容一致,且处于先接收到的事件的生命周期内,则过滤后接收到的事件。
作为一种可选的实施方式,所述通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件之后,所述方法还包括:
当检测到运行中的服务停止运行时,从所述同步事件中确定未完成的目标事件;
将所述目标事件以事件流的形式进行存储。
在该可选的实施方式中,可以通过“关闭钩子”监听系统的运行环境的正常关闭,比如监听JVM(Java Virtual Machine,java虚拟机),通过预设的方法(比如Runtime的addShutdownHook)向JVM注册关闭钩子,当JVM正常关闭时,通过指定的线程(比如Hook线程)对内存现场记录快照,将内存中未完成的事件快照以事件流的形式写入磁盘,磁盘随机访问很慢,但流操作访问很快,有利于事件流的读写性能。
作为一种可选的实施方式,所述将所述目标事件以事件流的形式进行存储之后,所述方法还包括:
当接收到故障恢复指令时,从预设的存储位置获取所述目标事件;
将所述目标事件加载至内存中以进行事件重演。
在该可选的实施方式中,服务重启时通过拓展SpringBoot框架提供的ApplicationRunner接口,从磁盘读取事件流,向内存中重演事件。
在图1所描述的方法流程中,可以通过无锁策略,获取待同步数据,避免了因使用锁而产生的资源消耗,同时,通过在缓冲数组中两个数据之间填充有预设数量的占位数据,避免了相同的数据被不同的线程加载修改导致其他线程加载的数据失效的问题,进一步提高了数据处理的效率,而且,可以生成用于故障恢复的事件,提高了系统的稳定性。
图2是本发明公开的一种数据同步装置的较佳实施例的功能模块图。
请参见图2,所述数据同步装置20可运行于服务器中。所述数据同步装置20可以包括多个由程序代码段所组成的功能模块。所述数据同步装置20中的各个程序段的程序代码可以存储于存储器中,并由至少一个处理器所执行,以执行图1所描述的数据同步方法中的部分或全部步骤。
本实施例中,所述数据同步装置20根据其所执行的功能,可以被划分为多个功能模块。所述功能模块可以包括:获取模块201、写入模块202、确定模块203及处理模块204。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。
获取模块201,用于根据预设的无锁策略,获取待同步数据,其中,所述无锁策略包括单线程获取策略或基于多线程的比较再交换策略。
其中,所述待同步数据可以是某个重要系统(比如交易核算系统)在内存中产生的大量数据,这些数据可以是其他众多系统进行数据处理的原始数据,因此,需要对这些数据进行系统同步。
本发明实施例中,可以根据不同的配置信息从数据库和/或消息中间件和/或数据接口中获取所述待同步数据。
写入模块202,用于根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据,其中,所述缓冲数组中两个数据之间填充有预设数量的占位数据。
确定模块203,用于根据预设的未读数据变量,从所述缓冲数据中确定可读数据。
其中,所述未读取数据变量可以用于指示所述缓冲数组中正在读取的数据的下一个数据的位置,即所述可读数据在数组中的位置。
处理模块204,用于通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件。
作为一种可选的实施方式,所述写入模块202根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据的方式具体为:
针对每个所述待同步数据,获取所述数组可用位置变量的最新值;
从所述基于环形数据结构的缓冲数组中确定与所述最新值对应的位置空间;
判断所述位置空间是否存在已存储数据;
若所述位置空间不存在已存储数据,将所述待同步数据写入至所述位置空间中,获得所述缓冲数据;或
若所述位置空间存在已存储数据,根据所述待同步数据,将所述已存储数据进行替换操作,获得所述缓冲数据。
其中,所述数据可用位置变量可以用于指示所述缓冲数组中当前可以存放数据的位置。
其中,当线程持续向所述缓冲数组中写入数据时,会在到达末尾时环绕至头部,展开新一轮的环绕,即无需进行数据的删除操作来腾出数组空间,新的数据可以覆盖掉旧的数据。
其中,可以预设一个数组可用位置变量,所述数组可用位置变量用于指示所述缓冲数据的下一个可用位置,即可以将数据写入的位置。
本发明实施例中,针对每个所述待同步数据,获取所述数组可用位置变量的最新值,从所述基于环形数据结构的缓冲数组中确定与所述最新值对应的位置空间,判断所述位置空间是否存在已存储数据,若所述位置空间不存在已存储数据,将所述待同步数据写入至所述位置空间中,获得所述缓冲数据,或者,若所述位置空间存在已存储数据,根据所述待同步数据,对所述已存储数据进行替换操作,获得所述缓冲数据,由于数据在CPU缓存中不是以单独变量或单独指针来存储的,而是由缓存行组成的,通常为64字节,Java中long类型为8字节,因此,一个缓存行可以存储8个long类型的变量,当long型数组中的一个值被加载到缓存行中时,另外七个值会被一同加载,这种CPU特性存在一个弊端,假如数组中的第一个位置正在被生产者写入,第八个位置正在被消费者写入,生产者与消费者运行在不同内核的线程中,使用不同的缓存,当生产者更新了数组中的第一个位置的数据,内存中的数组中的第一个位置的值会被更新,内存中数组中的第一个位置的值的更新会使所有缓存了该值的缓存行失效,处理同一缓存行的其它数据的其他线程,需要重新从内存中读取整个缓存行,执行过程显然被延缓了,这种对缓存行的共享在并发场景下是影响效率的,所述缓冲数组的数据之间可以填充有7个不被使用的long型变量,即每个数据某一线程进行处理时,影响的缓存行中只有这一个数据,对其他数据没有影响,避免了上述缓存行失效的问题,提高数据处理效率。
作为一种可选的实施方式,所述处理模块204通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件的方式具体为:
通过解密线程,对所述可读数据进行解密,获得解密数据;
根据所述解密数据,生成输入事件;
根据幂等性校验算法,对所述输入事件进行过滤,获得过滤事件;
根据所述过滤事件的事件类型,将所述过滤事件分配给预设的多个业务线程进行数据处理,获得同步数据以及输出事件;
将所述输入事件以及所述输出事件确定为用于故障恢复的同步事件。
其中,所述同步数据可以是被线程经过不同业务数据的处理逻辑,然后进行数据过滤、聚集、计算、映射等处理,并渲染为外部输出系统要求的数据结构,同时,使用公钥进行加密后,包装成输出通道要求的数据结构的数据,所述同步数据通过对接数据输出通道传输到上下游各个系统中,完成数据同步。
其中,事件可以是一种数据结构,包括了数据本身的内容以及系统运行时产生的状态等参数,事件可以被写入至磁盘中进行存储,事件可以看成是一个事件对象,包括事件ID、业务场景ID、数据类型ID、同步渠道、事件内容、事件生命周期、事件状态、事件上下文等属性。
在该可选的实施方式中,可以先通过解密线程,对所述可读数据进行解密,获得解密数据,然后根据所述解密数据,生成输入事件,再根据幂等性校验算法,对所述输入事件进行过滤,获得过滤事件,根据所述过滤事件的事件类型,将所述过滤事件分配给预设的多个业务线程进行数据处理,获得同步数据以及输出事件,将所述输入事件以及所述输出事件确定为用于故障恢复的同步事件。其中,所述对所述输入事件进行过滤包括:同一个事件输入两次,会通过事件ID进行过滤,即过滤掉相同ID的事件,不同事件ID的输入,若事件内容一致,且处于先接收到的事件的生命周期内,则过滤后接收到的事件。
作为一种可选的实施方式,所述获取模块201根据预设的无锁策略,获取待同步数据的方式具体为:
判断所述待同步数据的数据源是否为消息中间件;
若所述待同步数据的数据源为消息中间件,根据所述单线程获取策略,使用消息中间件的拉动模式,按照预设时间间隔以及预设数据量,使用单线程从所述消息中间件中获取所述待同步数据。
在该可选的实施方式中,判断所述待同步数据的数据源是否为消息中间件,若所述待同步数据的数据源为消息中间件,根据所述单线程获取策略,从消息中间件中获取所述待同步数据,且只启动一个线程从所述消息中间件中获取所述待同步数据,避免多个线程同时将同一组数据写入内存而产生的写冲突,选用拉动(PULL)模式从消息中间件中获取所述待同步数据,拉动模式是指由启动的线程主动去所述消息中间件获取数据,可以实时调整获取的消息数量、时间间隔,从而能够实现根据当前系统的负载进行调整获取的数据的数量,提高数据获取效率。
作为一种可选的实施方式,所述获取模块201根据预设的无锁策略,获取待同步数据的方式具体为:
判断所述待同步数据的数据源是否有多个;
若所述待同步数据的数据源有多个,根据所述基于多线程的比较再交换策略,通过比较再交换算法来使用多个线程从多个所述数据源中获取待同步数据。
在该可选的实施方式中,可以判断所述待同步数据的数据源是否有多个,若所述待同步数据的数据源有多个,需要从多个数据源中获取所述待同步数据,启动的线程有多个,可以通过比较再交换(CAS,Compare and Swap)算法从多个所述数据源中获取待同步数据,避免使用锁导致的系统资源消耗。
其中,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B,算法原理是当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
作为一种可选的实施方式,所述确定模块203,还用于所述处理模块204通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件之后,当检测到运行中的服务停止运行时,从所述同步事件中确定未完成的目标事件;
所述数据同步装置20还包括:
存储模块,用于将所述目标事件以事件流的形式进行存储。
在该可选的实施方式中,可以通过“关闭钩子”监听系统的运行环境的正常关闭,比如监听JVM(Java Virtual Machine,java虚拟机),通过预设的方法(比如Runtime的addShutdownHook)向JVM注册关闭钩子,当JVM正常关闭时,通过指定的线程(比如Hook线程)对内存现场记录快照,将内存中未完成的事件快照以事件流的形式写入磁盘,磁盘随机访问很慢,但流操作访问很快,有利于事件流的读写性能。
作为一种可选的实施方式,所述获取模块201,还用于所述存储模块将所述目标事件以事件流的形式进行存储之后,当接收到故障恢复指令时,从预设的存储位置获取所述目标事件;
所述数据同步装置20还包括:
加载模块,用于将所述目标事件加载至内存中以进行事件重演。
在该可选的实施方式中,服务重启时通过拓展SpringBoot框架提供的ApplicationRunner接口,从磁盘读取事件流,向内存中重演事件。
在图2所描述的数据同步装置20中,可以通过无锁策略,获取待同步数据,避免了因使用锁而产生的资源消耗,同时,通过在缓冲数组中两个数据之间填充有预设数量的占位数据,避免了相同的数据被不同的线程加载修改导致其他线程加载的数据失效的问题,进一步提高了数据处理的效率,而且,可以生成用于故障恢复的事件,提高了系统的稳定性。
如图3所示,图3是本发明实现数据同步方法的较佳实施例的服务器的结构示意图。所述服务器3包括存储器31、至少一个处理器32、存储在所述存储器31中并可在所述至少一个处理器32上运行的计算机程序33及至少一条通讯总线34。
本领域技术人员可以理解,图3所示的示意图仅仅是所述服务器3的示例,并不构成对所述服务器3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述服务器3还可以包括输入输出设备、网络接入设备等。
所述服务器3还包括但不限于任何一种可与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(InternetProtocol Television,IPTV)、智能式穿戴式设备等。所述服务器3所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
所述至少一个处理器32可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、分立硬件组件等。该处理器32可以是微处理器或者该处理器32也可以是任何常规的处理器等,所述处理器32是所述服务器3的控制中心,利用各种接口和线路连接整个服务器3的各个部分。
所述存储器31可用于存储所述计算机程序33和/或模块/单元,所述处理器32通过运行或执行存储在所述存储器31内的计算机程序和/或模块/单元,以及调用存储在存储器31内的数据,实现所述服务器3的各种功能。所述存储器31可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器3的使用所创建的数据等。此外,存储器31可以包括易失性和非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件等。
结合图1,所述服务器3中的所述存储器31存储多个指令以实现一种数据同步方法,所述处理器32可执行所述多个指令从而实现:
根据预设的无锁策略,获取待同步数据,其中,所述无锁策略包括单线程获取策略或基于多线程的比较再交换策略;
根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据,其中,所述缓冲数组中两个数据之间填充有预设数量的占位数据;
根据预设的未读数据变量,从所述缓冲数据中确定可读数据;
通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件。
具体地,所述处理器32对上述指令的具体实现方法可参考图1对应实施例中相关步骤的描述,在此不赘述。
在图3所描述的服务器3中,可以通过无锁策略,获取待同步数据,避免了因使用锁而产生的资源消耗,同时,通过在缓冲数组中两个数据之间填充有预设数量的占位数据,避免了相同的数据被不同的线程加载修改导致其他线程加载的数据失效的问题,进一步提高了数据处理的效率,而且,可以生成用于故障恢复的事件,提高了系统的稳定性。
所述服务器3集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存储器(RAM,Random Access Memory)等。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附关联图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。

Claims (10)

1.一种数据同步方法,其特征在于,所述数据同步方法包括:
根据预设的无锁策略,获取待同步数据,其中,所述无锁策略包括单线程获取策略或基于多线程的比较再交换策略;
根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据,其中,所述缓冲数组中两个数据之间填充有预设数量的占位数据;
根据预设的未读数据变量,从所述缓冲数据中确定可读数据;
通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件。
2.根据权利要求1所述的数据同步方法,其特征在于,所述根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据包括:
针对每个所述待同步数据,获取所述数组可用位置变量的最新值;
从所述基于环形数据结构的缓冲数组中确定与所述最新值对应的位置空间;
判断所述位置空间是否存在已存储数据;
若所述位置空间不存在已存储数据,将所述待同步数据写入至所述位置空间中,获得所述缓冲数据;或
若所述位置空间存在已存储数据,根据所述待同步数据,将所述已存储数据进行替换操作,获得所述缓冲数据。
3.根据权利要求1所述的数据同步方法,其特征在于,所述通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件包括:
通过解密线程,对所述可读数据进行解密,获得解密数据;
根据所述解密数据,生成输入事件;
根据幂等性校验算法,对所述输入事件进行过滤,获得过滤事件;
根据所述过滤事件的事件类型,将所述过滤事件分配给预设的多个业务线程进行数据处理,获得同步数据以及输出事件;
将所述输入事件以及所述输出事件确定为用于故障恢复的同步事件。
4.根据权利要求1所述的数据同步方法,其特征在于,所述根据预设的无锁策略,获取待同步数据包括:
判断所述待同步数据的数据源是否为消息中间件;
若所述待同步数据的数据源为消息中间件,根据所述单线程获取策略,使用消息中间件的拉动模式,按照预设时间间隔以及预设数据量,使用单线程从所述消息中间件中获取所述待同步数据。
5.根据权利要求1所述的数据同步方法,其特征在于,所述根据预设的无锁策略,获取待同步数据包括:
判断所述待同步数据的数据源是否有多个;
若所述待同步数据的数据源有多个,根据所述基于多线程的比较再交换策略,通过比较再交换算法来使用多个线程从多个所述数据源中获取所述待同步数据。
6.根据权利要求1至5中任一项所述的数据同步方法,其特征在于,所述通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件之后,所述数据同步方法还包括:
当检测到运行中的服务停止运行时,从所述同步事件中确定未完成的目标事件;
将所述目标事件以事件流的形式进行存储。
7.根据权利要求6所述的数据同步方法,其特征在于,所述将所述目标事件以事件流的形式进行存储之后,所述数据同步方法还包括:
当接收到故障恢复指令时,从预设的存储位置获取所述目标事件;
将所述目标事件加载至内存中以进行事件重演。
8.一种数据同步装置,其特征在于,所述数据同步装置包括:
获取模块,用于根据预设的无锁策略,获取待同步数据,其中,所述无锁策略包括单线程获取策略或基于多线程的比较再交换策略;
写入模块,用于根据预设的数组可用位置变量,将所述待同步数据写入至基于环形数据结构的缓冲数组中,获得缓冲数据,其中,所述缓冲数组中两个数据之间填充有预设数量的占位数据;
确定模块,用于根据预设的未读数据变量,从所述缓冲数据中确定可读数据;
处理模块,用于通过预设的多个处理线程对所述可读数据进行处理,获得同步数据以及用于故障恢复的同步事件。
9.一种服务器,其特征在于,所述服务器包括处理器和存储器,所述处理器用于执行存储器中存储的计算机程序以实现如权利要求1至7中任意一项所述的数据同步方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有至少一个指令,所述至少一个指令被处理器执行时实现如权利要求1至7中任意一项所述的数据同步方法。
CN202011064351.0A 2020-09-30 2020-09-30 数据同步方法、装置、服务器及存储介质 Pending CN112148498A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011064351.0A CN112148498A (zh) 2020-09-30 2020-09-30 数据同步方法、装置、服务器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011064351.0A CN112148498A (zh) 2020-09-30 2020-09-30 数据同步方法、装置、服务器及存储介质

Publications (1)

Publication Number Publication Date
CN112148498A true CN112148498A (zh) 2020-12-29

Family

ID=73951926

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011064351.0A Pending CN112148498A (zh) 2020-09-30 2020-09-30 数据同步方法、装置、服务器及存储介质

Country Status (1)

Country Link
CN (1) CN112148498A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112732657A (zh) * 2020-12-30 2021-04-30 广州金越软件技术有限公司 一种在ftp服务场景下高效读取大量小文件的方法
CN113051055A (zh) * 2021-03-24 2021-06-29 北京沃东天骏信息技术有限公司 一种任务处理方法和装置
CN117591036A (zh) * 2024-01-18 2024-02-23 四川云海芯科微电子科技有限公司 基于固件与芯片微内核的占位数据补齐方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108694199A (zh) * 2017-04-10 2018-10-23 北京京东尚科信息技术有限公司 数据同步装置、方法、存储介质及电子设备
CN111638979A (zh) * 2020-05-24 2020-09-08 中信银行股份有限公司 调用请求的处理方法、装置、电子设备及可读存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108694199A (zh) * 2017-04-10 2018-10-23 北京京东尚科信息技术有限公司 数据同步装置、方法、存储介质及电子设备
CN111638979A (zh) * 2020-05-24 2020-09-08 中信银行股份有限公司 调用请求的处理方法、装置、电子设备及可读存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112732657A (zh) * 2020-12-30 2021-04-30 广州金越软件技术有限公司 一种在ftp服务场景下高效读取大量小文件的方法
CN113051055A (zh) * 2021-03-24 2021-06-29 北京沃东天骏信息技术有限公司 一种任务处理方法和装置
CN117591036A (zh) * 2024-01-18 2024-02-23 四川云海芯科微电子科技有限公司 基于固件与芯片微内核的占位数据补齐方法及系统
CN117591036B (zh) * 2024-01-18 2024-03-19 四川云海芯科微电子科技有限公司 基于固件与芯片微内核的占位数据补齐方法及系统

Similar Documents

Publication Publication Date Title
US10459824B2 (en) Cache-based trace recording using cache coherence protocol data
CN112148498A (zh) 数据同步方法、装置、服务器及存储介质
JP6529617B2 (ja) システムメモリから不揮発性データストレージに移行されるアプリケーションプログラムデータの選択的保持
US9824011B2 (en) Method and apparatus for processing data and computer system
CN104462225B (zh) 一种数据读取的方法、装置及系统
CN112527414B (zh) 一种基于前端的数据处理方法、装置、设备及存储介质
US11782761B2 (en) Resource management unit for capturing operating system configuration states and offloading tasks
CN112416583A (zh) 高频请求处理方法、装置、电子设备及存储介质
CN111881209A (zh) 异构数据库的数据同步方法、装置、电子设备及介质
WO2022068760A1 (zh) 内存管理的方法及其装置
WO2022048358A1 (zh) 数据处理方法、装置及存储介质
CN108369547A (zh) 持久性主存储器中的日志的尾部
CN112558884B (zh) 数据保护方法以及基于NVMe的存储设备
CN110535724B (zh) 应用程序网络读写限制方法、装置、电子设备及存储介质
US9329972B2 (en) Implementing client based throttled error logging in a computing device
CN116701248B (zh) 页表管理方法、单元、soc、电子设备及可读存储介质
US20240095185A1 (en) Memory address compression within an execution trace
WO2020073200A1 (zh) 调试程序的方法和系统
US8560577B1 (en) Method for coordinating stats collection and analysis among multiple hosts
US10089228B2 (en) I/O blender countermeasures
US11630698B2 (en) Resource management unit for capturing operating system configuration states and swapping memory content
CN111602121B (zh) 利用所应用的存储器区域生命期的比特精确跟踪分析
CN108573042B (zh) 报表同步方法、电子设备及计算机可读存储介质
CN112434237A (zh) 页面加载方法、装置、电子设备及存储介质
CN112363674B (zh) 一种数据写入方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination