一种内存数据的同步处理方法、装置、服务器及系统
技术领域
本申请属于计算机数据处理技术领域,特别涉及一种内存数据的同步处理方法、装置、服务器及系统。
背景技术
随着计算机信息技术的发展和互联网应用的普及,服务器需要处理的数据量也越来越大。单台计算机已经难以满足一些大规模数据的处理需求,为此需要将多台计算机联合起来,构成分布式服务系统。分布式服务系统可以使用大量廉价的计算机构成计算机集群,通过该集群可以取代昂贵的高运算速度的计算机进行高速运算和存储。目前,分布式服务系统也成为诸多应用领域中越来越重要的服务器的组建方式。
一般的,一些大型分布式服务系统通常包括业务核心系统、后台数据库以及外围服务系统。所述业务核心系统通常可以包括多个子系统服务器组成的子系统集群,这些子系统集群中的子服务器可以加载读取后台数据库中的数据。当用户的操作引起后台数据库中的数据发生变更时,为了保持整个分布式服务系统数据的同步,所述业务核心系统在触发业务操作时往往需要实时读取后台数据库的数据去更新当前子系统服务器中的内存数据。所述外围服务系统也可以为多个外围系统服务器组成的外围系统集群。根据触发的业务需求,所述外围系统服务器可以访问业务核心系统中相应的子系统服务器,读取所述子系统服务器内存中的数据,实现数据的交互、处理等。
在分布式服务系统中,应用系统的服务器常会有需要业务上进行某个操作需要触发相应的程序、资源等数据更新。例如操作人员在后台管理维护时更新用户基本信息,此操作会引起后台记录用户基本信息的后台数据库中的数据发生变更。由于用户基本信息通常是分布式服务系统中多个甚至所有业务依赖的基本信息,分布式服务系统中的各个应用服务器通常也需要相应的更新内存数据。在子系统服务器内存更新的过程中,如果未等到内存中所有的资源加载完毕或加载失败等而出现外围系统服务器调用该子系统服务器当前未被更新成最新内存数据的历史内存数据时,会造成多方应用系统业务上使用的内存数据不一致,可能导致业务系统资源受损、业务逻辑错误甚至服务系统故障或者宕机等严重后果发生。现有技术分布式服务系统中若被外围系统服务器访问的子系统服务器的实时更新内存数据的过程还未完成,会导致所述外围系统服务器同步的内存数据不是最新的实时数据,对分布式服务系统中的业务系统应用造成很大的风险。
同时,如果外围服务系统中的大量外围服务器在同一时间内或短时间内访问调用子系统服务器,在外围系统服务器大并发的请求情况下往往会引起子系统同一时间内读取数据库的输入输出接口访问量过大以及业务核心系统的临时缓存增大,如果读取的数据量也较大的话,还很有可能引起内存溢出。
因此,现有技术中内存数据的同步处理方法还存在着外围系统服务同步访问的不是最新的内存数据,以及大并发的请求情况下还会大幅度增加后台数据库输入输出接口的访问量和临时缓存,增加了子系统内存数据处理负载压力,大大降低了子系统服务器甚至整个分布式服务系统运行的可靠性。
发明内容
本申请实施例的目的在于提供一种内存数据的同步处理方法、装置、服务器及系统,可以保障系统可以访问读取最新的内存数据,减少后台数据库IO访问量和内存占用量,优化内存数据同步处理效率,提供系统运行的可靠性。
本申请提供的一种内存数据的同步处理方法、装置、服务器及系统是这样实现的:
一种内存数据的同步处理方法,所述方法包括:
接收到后台数据库更新的通知消息时将内存数据的当前更新时间设置为当前系统时间;
在接收到外围系统服务器发送的内存同步更新请求后,判断所述内存数据的历史更新时间是否小于所述当前更新时间;
当所述判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新;
当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间。
一种分布式系统内存数据的同步处理方法,所述方法包括:
第一子系统服务器完成后台数据库数据更新后向子系统集群中的第二子系统服务器发送内存更新的第一通知消息,以及向所述子系统集群的外围系统集群中的外围系统服务器发送内存更新的第二通知消息;
接收到所述第一通知消息的第二子系统服务器将内存数据的当前更新时间设置为当前系统时间;
接收到第二通知消息的外围系统服务器向与所述外围服务器相对应的所述系统集群中的第三子系统服务器发送内存同步更新请求;
所述第三子系统服务器在接收到所述外围系统服务器发送的内存同步更新请求后,判断设置的所述第三子系统的内存数据的历史更新时间是否小于所述当前更新时间;当所述判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新;当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间;
所述外围系统服务器基于所述第三子系统服务器更新成功后的内存数据进行内存数据同步更新。
一种内存数据的同步处理装置,所述装置包括:
更新监测模块,用于接收到后台数据库更新的通知消息时将内存数据的当前更新时间设置为当前系统时间;
判断模块,用于在接收到外围系统服务器发送的内存同步更新请求后,判断所述内存数据的历史更新时间是否小于所述当前更新时间;
第一处理模块,用于当所述判断模块的判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新;
第二处理模块,用于当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间。
一种服务器,所述服务器包括:
输入输出接口,用于获取后台数据库更新的通知消息,提供读取后台数据库中的数据进行内存更新的接口,以及提供外围系统服务器访问内存数据进行外围系统服务器内存数据同步的接口;
处理单元,被设置成用于基于接收到后台数据库更新的通知消息时将内存数据的当前更新时间设置为当前系统时间;还用于在接收到外围系统服务器发送的内存同步更新请求后判断所述内存数据的历史更新时间是否小于所述当前更新时间;还用于当所述判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新;还用于当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间。
一种分布式系统,包括至少一个子系统服务器的子系统集群和多个外围系统服务器的外围系统集群,执行包括下述操作:
监测到后台数据库更新时向所述外围系统服务器发送内存更新的通知消息,以及将设置在子系统服务器内存数据的当前更新时间设置为当前系统时间;
接收到所述通知消息的外围系统服务器向与所述外围服务器相对应的所述系统集群中的子系统服务器发送内存同步更新请求;
接收到所述内存同步请求的子系统服务器判断设置在所述子系统服务器的内存数据的历史更新时间是否小于当前更新时间;
当所述判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新,以及当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间,并将更新后的内存数据同步至所述外围系统服务器;否则,读取子系统服务器的内存数据同步至所述外围系统服务器。
本申请提供的一种内存数据的同步处理方法、装置、服务器及系统,在分布式服务系统中业务核心系统和外围服务系统的数据同步过程中,通过比较业务核心系统中子系统服务器的当前更新时间和历史更新时间的大小,可以智能判断所述子系统服务器中的内存数据是否需要更新,保证了所述外围服务系统中的外围系统服务器从所述子服务器读取的内存数据为最新的更新后的内存数据,保障业务应用系统使用的内存数据的一致性。同时本申请提供的内存数据的同步处理方法,在后台数据库发送变时可以主动将后台数据库中的数据更新到子系统服务器的内存数据中,而不需要外围系统服务器每次调用子系统服务器时所述子系统服务器每次都需要去后台数据库读取数据。这样可以实现一次加载内存数据成功后不需要多次读取后台数据库来重新更新内存数据,可以有效减少数据库IO读取和内存占用量,降低内存溢出风险、优化内存数据同步效率。本申请中提供内存数据同步方法、装置及系统保障可以保障系统可以访问读取最新的内存数据,减少数据库IO读取和内存占用量,优化内存数据同步处理效率,提供系统运行的可靠性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的分布式系统内存数据的同步处理方法一种实施例的流程示意图;
图2是本申请提供的一种内存数据的同步处理方法一种实施例的方法流程示意图;
图3是本申请提供的一种内存数据的同步处理方法另一种方法流程示意图;
图4是本申请提供的一种内存数据的同步处理方法另一种实施例的方法流程示意图;
图5是本申请提供的一种内存数据的同步处理方法的另一种实施例的方法流程示意图;
图6是本申请提供的一种内存数据的同步处理方法的另一种实施例的方法流程示意图;
图7是本申请提供的内存数据的同步装置一种实施例的模块结构示意图;
图8是本申请所述内存数据的同步装置另一种实施例的模块结构示意图;
图9是本申请所述内存数据的同步装置另一种实施例的模块结构示意图;
图10是本申请所述内存数据的同步装置另一种实施例的模块结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
下面结合附图对本申请所述的内存数据同步的方法进行详细的说明。图1是本申请提供的分布式系统内存数据的同步处理方法一种实施例的方法流程图示意图。虽然本申请提供了如下述实施例或附图所示的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多或者更少的操作步骤。在逻辑性上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本申请实施例提供的执行顺序。所述方法在实际中的数据同步过程中或者装置执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
具体的本申请提供的一种分布式系统内存数据的同步处理方法的一种实施例如图1所示,所述方法可以包括:
S1:第一子系统服务器完成后台数据库数据更新后向子系统集群中的第二子系统服务器发送内存更新的第一通知消息,以及向所述子系统集群的外围系统集群中的外围系统服务器发送内存更新的第二通知消息。
所述的子系统集群通常可以为分布式业务服务系统中的业务核心系统,可以主要系统应用服务器中基本数据的运营、维护、处理等。所述的后台数据库可以存储所述业务核心系统运行所需要的数据,如程序加载资源、基础数据等。需要说明的是,本申请中一种实施例的应用场景中,在所述分布式业务服务系统的子系统集群中可以存在一个或者多个后台数据库,例如可以设置存储用户基本信息的后台数据库,也可以同时设置存储订单信息或者资产信息的后台数据库等。所述后台数据库中的数据可以包括多种存储方式,例如常见的SQLServer、Oracle、Access、DB2等。由于业务处理上的需求,作业人员可以对后台数据库中的数据进行操作,如添加、修改、删除基本数据等。具体的如图1所示,用户(作业人员)在所述子系统集群中某个子系统服务器,如子系统服务器上1执行了更新用户基本信息的业务操作。所述后台数据库基于用户在所述子系统服务器上1的操作进行相应后台数据库中数据的更新。
与此同时,所述子系统集群中与所述后台数据库有关联关系的子系统服务器需要相应的更新内存数据。本申请中所述的关联系可以包括子系统的操作行为需要读取所述后台数据库的子系统服务器均与所述后台数据库存在关联关系。本实施例的一个应用场景中可以为所有的子系统服务器使用同一个用户基本信息的后台数据库。因此,当作业人员在其中一个子系统服务器(为便于清楚的描述,本应用场景中可以将引起后台数据库更新的子系统服务器统一称为第一子系统服务器,如图1中的子系统服务器1)上进行了更新用户基本信息的业务操作,那么所述第一子系统服务器可以在完成后台数据库更新后向同一子系统集群中的其他子系统服务器(为便于清楚的描述,本实施例中可以统一称为第二子系统服务器,如图1中的子系统服务器2、子系统服务器3、子系统服务器4等)发送内存更新的第一通知消息。具体的在本申请的一种实施例中,可以通过DRM向所述第二子系统服务器发送第一通知消息,通知其他所有子系统服务器准备更新最新的用户基本数据的后台数据库的内存数据。如图1所示,本实施例中同时可以通过DRM向外围系统服务器发送内存更新的第二通知消息,通知所有的外围系统服务器实时同步读取用户缓存信息。
上述实施例中所述的DRM(Distributed Resource Management)为分布式资源管理,可以为应用提供应用框架。所述的DRM提供了一种能力,可以在应用运行时动态、即时的改变应用系统内存中的资源值,同时也可以与业务核心系统中的子服务器和外围系统服务器进行通信,可以解决多机房问题。在本实施例应用场景中,所述的外围系统服务器可以通过webservices服务调用访问子系统,在读取子系统内存数据后同样可以通过webservices透传到外围系统。所述的Web Service,为一种低耦合的、自包含的、基于可编程的web的应用程序,可以使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成,用于开发分布式的互操作。
本实施例中,检测到数据库完成更新后,可以通过DRM向子系统集群中的子系统服务器和外围系统服务器发送内存更新的通知消息。
S2:接收到所述第一通知消息的第二子系统服务器将内存数据的当前更新时间设置为当前系统时间。
本申请提供的内存数据的同步处理方法可以为子系统集群中的子系统服务器设置用户判断内存数据是否为更新后的最新数据的标识信息。具体的,在本实施例所述的分布式系统的子系统服务器中可以新增两个DRM标识符:上次触发内存数据更新的历史更新时间(historyUpdateTime)和当前要触发内存数据更新的当前更新时间(currentUpdateTime)。
子系统服务器检测到后台数据库完成更新后,可以将设置的子系统服务器内存数据的当前更新时间更新为当前系统时间,并向外围系统服务器发送内存更新通知消息。需要说明的,所述的子系统服务器可以包括上述实施例所述的第一子系统服务器和接收到所述第一通知消息的第二子系统服务器,在其他的一些实施例中,用户操作引起后台数据库数据变更的子系统服务器可以不需要接收所述的第一通知消息,通常的进行后台数据库操作的子系统服务器可以基于作业人员在自身系统上的操作确定后台数据库发生了更新。这种情况下,所述的第二子系统服务器可以包括所述第一子系统服务器,其中第一系统服务器接收自身发送的第一通知消息可以在系统内部通过相应功能组件、应用、程序之间的消息交互等实现。例如第一子系统中的第一组件进行业务操作后第二组件可以接收到后台数据库更新完成的反馈消息视为第一通知消息,准备进行第一子系统的内存更新。
另一种实施例中,所述的第一子系统服务器也可以为业务维护的服务器,可以不需要更新某一类后台数据的内存数据,或者不需要更新内存数据,这种应用场景中,所述第一子系统服务器在本申请所述方法中执行了变更后台数据库数据,而可以不需要更新第一子系统服务器中的内存数据,此时所述的第二子系统服务器可以不包括所述第一子系统服务器。本申请一种实施例中为便于描述可以将引起后台数据库数据更新的操作行为的子系统服务器称为第一子系统服务器,将子系统集群中与更新的后台数据库有关联关系的子系统服务器称为第二子系统服务器。
在本实施例中,所述当前更新时间和所述历史更新时间可以作为所述业务核心系统中子服务器的标识符,所述标识符可以具有标识符值,不同子系统服务器的可以对应着相应的标识符值。在本实施例中,所述业务核心系统中第二子系统服务器在接收内存更新的第一通知消息后,可以通过读取后台数据库中的最新数据更新内存数据。例如,某分布式服务系统的业务核心系统中包括20台子系统服务器,分别以编号1,2,3,4,…,20表示,当完成后台数据更新后,可以通过所述分布式资源管理系统(DRM)发送内存更新的第一通知消息至上述20台子系服务器。例如,子系统服务器1接收通知的时间为2015年10月20日9时23分18秒20毫秒,可以将子系统服务器的当前更新时间的DRM标识符的值设置为:historyUpdateTime=2015102009231820。若子系统服务器1之前有过内存数据更新,则所述历史更新时间(historyUpdateTime)标识符存储有最新的内存数据更新的时间信息。若子系统服务器1之前没有进行过内存数据更新,可以设置子系统服务器1的历史更新时间的值为默认的空为0值。
当然,在一些实施例中也可以为部分子系统服务器接收到所述内存更新的第一通知消息。如上述20台子系统服务器中,有19台子系统服务器的业务与用户基本信息有关联关系,其中一台子系统服务器20中的所有业务并不使用用户基本信息的后台数据库。那么在用户基本信息的后台数据库发送更新后子系统服务器20接收到不到第一通知消息,其相应的当前更新时间也不需要进行修改。
本申请实施例中,接收到所述第一通知消息的第二子系统服务器可以将内存数据的当前更新时间设置为当前系统时间。
S3:接收到第二通知消息的外围系统服务器向与所述外围服务器相对应的所述系统集群中的第三子系统服务器发送内存同步更新请求。
所述的外围系统集群可以包括多个外围系统服务器。接收到所述第二通知消息的外围系统服务器需要读取后台数据同步更新内存数据。根据业务应用的需要,所述的外围系统集群中可以由一个或者多个外围系统服务器访问子系统集群中的一个或者多个子系统服务器的内存数据。一般的,所述的外围服务器与子系统服务器基于业务服务、数据交互等有着相应的对应关系。
本申请实施例中,可以将与需要进行内存数据同步更新的外围系统服务器对应的子系统集群中的子系统服务器称为第三子系统服务器。接收到通过DRM发送的内存更新的第二通知消息的外围系统服务器向与所述外围服务器相对应的所述系统集群中的第三子系统服务器发送内存同步更新请求,具体的可以通过webservices接口调用访问子系统服务器进行同步内存数据服务。
S4:所述第三子系统服务器在接收到所述外围系统服务器发送的内存同步更新请求后,判断设置的所述第三子系统的内存数据的历史更新时间是否小于所述当前更新时间;当所述判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新;当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间。
在所述第三子系统服务器接收外围系统服务器发送的内存同步更新请求后,判断第三子系统服务器中设置的DRM标识的值,即比较历史更新时间标识符中的值与当前更新时间标识符中的值的大小。如果判断的结果为历史更新时间小于当前更新时间,则可以表示当前第三子系统服务器中的内存数据不是最新的数据,需要进行更新。所述第三子系统服务器可以读取用户基本信息的后台数据库中的数据进行更新。如果当前第三子系统服务器的内存数据更新成功,可以将当前第三子系统服务器的历史更新时间更新为当前系统时间,此时更新后的历史更新时间大于或大于等于当前更新时间,即historyUpdateTime>currentUpdateTime。以图1所示的分布式服务系统举例说明,由上述可知,子系统服务器2接收到第二通知的时间为2015年10月20日9时23分18秒20毫秒,历史同步时间为2015年10月18日19时16分07秒45毫秒,可以将当前更新时间设置为2015年10月20日9时23分18秒20毫秒。所述子系统服务器2在2015年10月20日9时24分06秒10毫秒完成了内存数据的更新,此时,可以将历史同步时间更新为当前系统时间,也就是2015年10月20日9时24分06秒10毫秒。这样,子系统服务器2完成内存数据更新后将历史更新时间修改为当前系统时间,保障更新后子系统服务器的历史更新时间大于或等于当前系统时间,表明内存数据已经更新,而在下一次内存数据更新时历史更新时间小于当前系统时间,保障外围系统服务器在子系统服务器内存数据更新后才读取,进行同步处理。
子系统集群中的子系统服务器更新内存数据可以包括多种实施方式。在本实施例的一个场景中,系统维护人员对后台数据库中的用户基本信息进行更新操作,所述子系统服务器读取所述客户基本信息后,可以将变更后的用户基本信息复制到内存中。在本实施例的另一个场景中,系统维护人员对后台数据库中的客户基本信息进行更新操作,所述子系统服务器读取所述客户基本信息后,可以将变更后的客户基本信息复制到缓存中。存储于缓存中的数据可以方便于外围系统服务器的读取,并且缓存的读取速度是内存的读取速度的数倍,尤其对于同一时间有多台外围系统服务器读取同一子系统服务器的场景,可以减少所述子系统服务器的输入输出访问量,降低所述子服务器发生内存溢出的风险,提高数据同步的工作效率。需要说明的是,所述分布式资源管理系统发送的数据同步更新通知中可以包含所述后台数据库中更新数据的存储位置,可以节省所述子服务器读取所述后台数据库的时间,提高工作效率。
一般的,子系统集群中的子系统服务器内存数据更新后,由于数据处理延时等,其更新后的历史更新时间通常大于略当前更新时间。但本申请并不排除更新后的历史更新时间等于当前更新时间的应用场景,例如出于时间精度的考虑、延时补充等处理的场景。本申请所述的方法包括基于设置的内存数据历史更新时间和当前更新时间的标识信息智能判断子系统服务器内存数据是否为最新更新后的数据。
需要说明的是,本申请中所述当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间的一种实施方式包括接收到后台数据更新的通知消息后子系统服务器便开始进行更新内存数据,在更新期间没有接收到外围系统服务器发送的内存同步更新请求,此时同样可以在所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间。
另外,本申请中所述的读取所述后台数据库中的数据对所述内存数据进行更新包括子系统服务器接收到内存数据更新的第一通知消息时已经执行内存数据更新的情况。具体而言,子系统服务器接收到DRM通信消息后开始准备更新内存数据,在更新内存数据的过程中如果没有外围系统服务器调用该系统服务器的内存数据,则该系统服务器一直更新内存数据,直至更新完成后相应的将历史更新时间更新为当前系统时间,如图1中子系统服务器2整个内存数据更新过程中没有被外围系统服务器调用。若在内存数据更新期间有外围系统服务器调用该子系统服务器的内存数据,例如调用子系统服务器4,由于子系统服务器4的内存数据未更新完成,历史更新时间仍小于当前系统时间,此时可以继续读取所述后台数据库中的数据对所述内存数据进行更新。当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间。
基于上述实施例所述的实施方案可以看出,本申请提供的内存数据同步处理方法可以基于历史更新时间和当前更新时间两个标识符可以有效保障外围系统服务器调用到的子系统服务器中的内存数据为最新更新后的数据,保障了分布式服务系统中核心业务系统和外围系统中服务器使用的内存数据的一致性,提高了系统运行的可靠性。
S5:所述外围系统服务器基于所述第三子系统服务器更新成功后的内存数据进行内存数据同步更新。
所述第三子系统服务器内存数据更新成功后,所述外围系统服务器可以基于更新后的内存数据进行数据同步更新操作。所述外围系统服务器可以读取最新的内存数据,具体的实现方式上,可以包括通过读取子系统服务器的内存数据后通过webservices透传到外围系统服务器,实现外围系统服务器的内存同步更新。
在本申请实施例中,所述外围系统服务器可以通过Web Services访问所述子服务器,所述Web Services可以作为所述外围系统服务器访问所述子服务器的接口,运行于不同的机器上,应用时可以无需附加的第三方软件或者硬件。本实施例中的Web Services可以忽略所述外围系统服务器和所述子系统服务器语言、平台、内部协议的不同,实现两者之间的数据交换。一般的,所述的Web Services的部署往往是基于常规的产业标准,如标准通用标记语言的子集XML、HTTP,因此,本实施例通过Web Services访问所述子系统服务器可以降低应用接口的成本。
本实施例提供的分布式系统内存数据的同步处理方法可以基于设置的历史更新标识和当前更新标识,如上述应用场景中的DRM标识符historyUpdateTime、currentUpdateTime,智能判断子系统服务器的内存数据是否为最新的数据。若不是最新时,更新从后台数据库中读取最新的内存数据更新当前子系统服务器的内存数据,可以有效避免外围系统服务器从所述当前子系统服务器中读取未更新的数据从而导致分布式服务系统中的内存数据不一致的情况。具体的实现方式上可以利用DRM技术对更新内存数据进行先后同步,及一次加载内存数据功能后可以不再多次读取后台数据库来重新更新内存数据,可以减少数据库IO读取和内存占用,优化同步效率。
上述所述的分布式系统内存数据的同步处理方法具体的对应子系统集群中的子系统服务器操作而言,可以在检测到后台数据发生变更后进行子系统服务器的内存数据同步处理。当有外围系统服务器调用当前子系统服务器时,可以基于设置的内存数据的历史更新时间和当前更新时间判断内存数据是否为最新更新后的数据。如果不是,则子系统服务器进行内存数据更新。在更新成功后,所述外围系统服务器才可以读取子系统服务器的内存数据,进行外围系统服务器的内存更新。因此,本申请还提供一种内存数据的同步处理方法,图2是本申请提供的一种内存数据的同步处理方法一种实施例的方法流程示意图。如图2所示,所述方法可以包括:
S11:接收到后台数据库更新的通知消息时进行内存数据更新,并将内存数据的当前更新时间设置为当前系统时间;
S12:在接收到外围系统服务器发送的内存同步更新请求后,判断所述内存数据的历史更新时间是否小于所述当前更新时间;
S13:当所述判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新;
S14:当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间。
上述所述的内存数据的同步处理方法可以的执行主体可以包括子系统集群中的某一子系统服务器。在本申请的其他实施方式中,也可以设置单独的用于内存数据同步处理的装置,如某个同步应用、组件、业务服务系统等,由该内存数据同步处理的装置执行子系统服务器的内存数据更新、信息判断等处理。当然,如果判断结果为否,则可以表示当前内存数据已被更新为最新,不需要每一次调用该子系统服务器时都要去实时读取后台数据库中的数据,大大降低内存溢出的风险。图3是本申请提供的一种内存数据的同步处理方法另一种方法流程示意图。
上述所述的方法中,后台数据库更新后还可以向外围系统服务器发送内存更新通知消息,告知外围系统服务器相应的更新内存数据。
在子系统服务器内存数据更新完成后,此时的历史更新时间大于当前更新时间,可以再次判断子系统服务器内存数据的历史更新时间是否小于当前更新时间。如果历史更新时间大于或等于当前更新时间,则可以将更新后的内存数据同步至所述外围系统服务器。图4是本申请提供的一种内存数据的同步处理方法另一种实施例的方法流程示意图,如图4所示,所示方法还可以包括:
S15:当所述判断的结果为所述历史更新时间大于或等于所述当前更新时间时,将所述内存数据同步至所述外围系统服务器。
当然,若子系统服务器或内存数据同步处理装置在接收到内存同步更新请求后判断的结果为历史更新时间大于或等于当前更新时间时,可以直接将当前子系统服务器的内存数据同步在外围系统服务器。在具体的实施过程中,可以进行周期性或基于子系统内存数据更新成功/完成的消息多次比较判断历史更新时间和当前更新时间。在子系统服务器内存数据更新完成后,此时的历史更新时间大于当前更新时间,则可以将此时的内存数据同步至所述外围系统服务器。
本申请所述内存数据的同步处理方法的另一种实施例中,若子系统服务器的历史更新时间为空(包括历史更新时间的标识符为0或者设置的表示该子系统服务器的内存数据未进行更新过的标识信息)时则可以进行子系统服务器的内存数据的更新处理。另一种应用场景中,在比较过程中若历史更新时间与当前更新时间相等,也可以进行子系统服务器的内存数据的更新处理。这样可以在子系统服务器内存数据实际并没有更新为最新后台数据时有效避免因延时、误差、时间精度等原因造成历史更新时间与当前更新时间相等而使外围服务器没有读取到最新的内存数据的情况,保障了内存数据最新的更新数据,提高数据处理的准确性和可靠性。因此,本申请还提供所述内存数据同步处理方法的另一种实施例。图5是本申请所述内存数据的同步处理方法的另一种实施例的方法流程示意图,如图5所示,所述方法还可以包括:
S16:在检测到所述历史更新时间为空,或所述判断的结果为所述历史更新时间等于所述当前更新时间时,读取所述后台数据库中的数据对所述内存数据进行更新。
当然,参照其他实施例,当所述内存数据更新成功后可以将所述内存数据的历史更新时间更新为当前系统时间。
图6是本申请所述内存数据的同步处理方法的另一种实施例的方法流程示意图。如图6所示,若子系统服务器的内存数据更新失败,则可以重新进行内存数据更新所述方法还可以包括:
S17:当所述内存数据更新失败时,重新读取所述后台数据库中的数据对所述内存数据进行更新;若所述内存数据更新失败次数达到设置的上限值时停止内存数据更新,并设置不更新所述内存数据的历史更新时间。
本实施例中所述的失败次数的上限值可以根据数据处理需求进行设置。若失败次数达到上限值则可能存在一些故障问题,可以设置停止内存数据更新。当所述内存数据更新失败时,所述内存数据并没有实质更新为内存数据库中的数据,可以设置不更新所述内存数据的历史更新时间。
本申请实施例提供的内存数据的同步处理方法可以用于分布式系统间的内存数据同步处理。从本申请的实施方案的分布式服务器系统的应用场景中,可以有多台外围系统服务器先后访问同一个子系统服务器,换句话说,在所述子系统服务器中的内存数据更新成功后,还可以有不同的外围系统服务器访问所述子服务器。一般地,现有技术使用的方法通常是外围系统服务器每访问一次所述子系统服务器,所述子系统服务器都会访问一次后台数据库,导致所述子系统服务器的输入输出访问量较大,甚至引起所述子服务器的内存溢出。在本实施例中,可以通过比较子系统服务器中的当前更新时间和历史更新时间的大小,判别所述子系统服务器的内存数据是否是最新实时数据。当所述内存数据是更洗后的最新实时数据时,所述外围系统服务器可以直接访问所述子系统服务器的内存数据,避免一台或多台外围系统服务器一次或多次访问所述后台数据库,大大降低所述后台数据库的输入输出访问量,减少子系统服务器内存数据处理负载压力,降低内存溢出风险,提高外围系统服务器的访问效率和整个分布式服务器系统运行的可靠性。
基于本申请所述内存数据的同步处理方法,本申请还提供一种内存数据的同步处理装置。图7是本申请提供的内存数据的同步装置一种实施例的模块结构示意图,所述装置用于保障分布式服务系统中业务核心系统和外围服务系统使用的内存数据的一致性。具体的如图7所示,所述装置可以包括:
更新监测模块101,可以用于接收到后台数据库更新的通知消息时将内存数据的当前更新时间设置为当前系统时间;
判断模块102,可以用于在接收到外围系统服务器发送的内存同步更新请求后,判断所述内存数据的历史更新时间是否小于所述当前更新时间;
第一处理模块103,可以用于当所述判断模块102的判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新;
第二处理模块104,可以用于当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间。
本申请提供的一种数据同步的处理装置在分布式服务系统中业务核心系统和外围系统服务器的数据同步过程中,可以通过比较业务核心系统中子系统服务器的当前更新时间和历史更新时间的大小,判断所述子系统服务器中的内存数据是否是最新实时数据,以保证所述外围系统集群中的外围系统服务器从所述子系统服务器读取的内存数据是实时数据,保障了所述业务核心系统和所述外围服务系统内存数据的一致性。同时可以降低所述子系统服务器对内存数据的访问量,降低内存数据发生溢出的风险。本申请中提供的实施例可以大大降低子系统内存数据处理的负载压力,提高子系统服务器数据同步处理效率和系统运行的可靠性。
图8是本申请所述内存数据的同步装置另一种实施例的模块结构示意图。如图8所示,所述装置还可以包括:
外围系统同步处理模块105,可以用于当所述判断模块102的判断结果为所述历史更新时间大于或等于所述当前更新时间时,将所述内存数据同步至所述外围系统服务器。
在子系统服务器内存数据更新完成后,此时的历史更新时间大于当前更新时间,可以再次判断子系统服务器内存数据的历史更新时间是否小于当前更新时间。如果历史更新时间大于或等于当前更新时间,则可以将更新后的内存数据同步至所述外围系统服务器。在具体的实施过程中,可以进行周期性或基于子系统内存数据更新成功/完成的消息多次比较判断历史更新时间和当前更新时间。在子系统服务器内存数据更新完成后,此时的历史更新时间大于当前更新时间,则可以将此时的内存数据同步至所述外围系统服务器。
图9是本申请所述内存数据的同步装置另一种实施例的模块结构示意图。如图9所示,所述装置还可以包括:
第三处理模块106,可以用于在检测到所述历史更新时间为空,或所述判断模块102的判断结果为所述历史更新时间等于所述当前更新时间时,读取所述后台数据库中的数据对所述内存数据进行更新。
本实施例中当子系统服务器的内存数据之前没有更新过,此时的历史更新时间可以为默认的空(如前所述,所述“空”可以包括历史更新时间的标识符的值为0或其他设置的表示该子系统服务器的内存数据未进行更新过的标识信息),或在子系统服务器内存数据实际并没有更新为最新后台数据时有效避免因延时、误差、时间精度等原因造成历史更新时间与当前更新时间相等是避免外围服务器读取到不是最新的内存数据的情况,保障了内存数据最新的更新数据,提高数据处理的准确性和可靠性。
图10是本申请所述内存数据的同步装置另一种实施例的模块结构示意图。如图10所示,所述装置还可以包括:
第四处理模块107,可以用于当所述内存数据更新失败时,重新读取所述后台数据库中的数据对所述内存数据进行更新,直至所述内存数据更新失败次数达到设置的上限值时停止内存数据更新,并设置不更新所述内存数据的历史更新时间。
本实施例中所述的失败次数的上限值可以根据数据处理需求进行设置。若失败次数达到上限值则可能存在一些故障问题,可以设置停止内存数据更新。当所述内存数据更新失败时,所述内存数据并没有实质更新为内存数据库中的数据,可以设置不更新所述内存数据的历史更新时间。
上述实施例所述的内存数据的同步处理方法或装置可以子系统服务器为执行主体的方式实现或者作用于子系统服务器上的单独设置的处理模块、应用、组件等方式实现。基于本申请实施例所述,本申请还提供一种服务器,如本申请上述实施例中的子系统服务器,具体的,所述服务器可以包括:
输入输出接口,可以用于获取后台数据库更新的通知消息,和读取后台数据库中的数据进行内存更新的接口,以及提供外围系统服务器访问内存数据进行外围系统服务器内存数据同步的接口;
处理单元,被设置成可以用于基于接收到后台数据库更新的通知消息时将内存数据的当前更新时间设置为当前系统时间;还可以用于在接收到外围系统服务器发送的内存同步更新请求后判断所述内存数据的历史更新时间是否小于所述当前更新时间;还可以用于当所述判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新;还可以用于当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间。
上述的输入输出接口可以包括一处或多处I/O数据流的接口,如接收通过DRM通知服务器进行内存更新的消息,或通过webservices使得外围系统服务器可以访问同步内存缓存数据,以及通过后台数据库的I/O访问接口读取内存数据进行更新等。所述的处理单元可以包括一个或多个逻辑判断的处理单元,如CPU、逻辑门、可编程控制电路等。
本申请提供的所述方法、装置的各个实施例可以使用多种应用场景下服务器内存数据更新的情况。尤其是对于分布式特别是大型分布式服务系统,可以有效的保障外围调用系统使用的为核心业务系统中的子系统服务器最新的内存数据,保障业务上内存数据的一致性,同时还可以有效减少分布式系统中服务器对后台数据库的访问量和内存占用,优化同步效率,提高整个分布式统运行的效率和可靠性。基于上述,本申请还提供一种分布式系统,具体的,
所示分布式系统,包括至少一个子系统服务器的子系统集群和多个外围系统服务器的外围系统集群,且,
监测到后台数据库更新时向所述外围系统服务器发送内存更新的通知消息,以及将设置在子系统服务器内存数据的当前更新时间设置为当前系统时间;
接收到所述通知消息的外围系统服务器向与所述外围服务器相对应的所述系统集群中的子系统服务器发送内存同步更新请求;
接收到所述内存同步请求的子系统服务器判断设置在所述子系统服务器的内存数据的历史更新时间是否小于当前更新时间;
当所述判断的结果为是时,读取所述后台数据库中的数据对所述内存数据进行更新,以及当所述内存数据更新成功后将所述内存数据的历史更新时间更新为当前系统时间,并将更新后的内存数据同步至所述外围系统服务器;否则,读取子系统服务器的内存数据同步至所述外围系统服务器。
由上述所述方法或装置的各个实施例的实施方案及描述可以看出,本申请提供的内存数据同步处理装置、服务器及系统可以基于历史更新时间和当前更新时间两个标识符可以有效保障外围系统服务器调用到的子系统服务器中的内存数据为最新更新后的数据,保障了分布式服务系统中核心业务系统和外围系统中服务器使用的内存数据的一致性,提高系统运行的可靠性。
尽管本申请内容中提到内存、数据库、缓存之间的数据处理、通过DRM/webservices试试的子系统与外围服务器的消息交互、更新时间的判断等的数据处理、信息交互之类的描述,但是,本申请并不局限于必须是完全标准或者所提及的方式的信息及数据处理、信息交互的情况。本申请中各个实施例所涉及的上述描述仅是本申请中的一些实施例中的应用,在某些标准、方法的基础上略加修改后的实施方式也可以实行上述本申请各实施例的方案。当然,在符合本申请上述各实施例的中所述的处理方法步骤的其他无创造性的变形,仍然可以实现相同的申请,在此不再赘述。
虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或服务器、系统执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行以及包括采用循环判断的方式执行(例如并行处理器或者多线程处理的环境)。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。当然,也可以将实现某功能的模块由多个子模块或子单元组合实现。
本申请中所述的方法、装置或模块可以以计算机可读程序代码方式的控制器实现。所述控制具体的可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本申请所述装置中的部分模块可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、类等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的硬件的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,也可以通过数据迁移的实施过程中体现出来。该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,移动终端,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。本申请的全部或者部分可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、移动通信终端、多处理器系统、基于微处理器的系统、可编程的电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。