一种群集环境下的数据缓存方法及系统的制作方法

文档序号:7653402阅读:114来源:国知局
专利名称:一种群集环境下的数据缓存方法及系统的制作方法
技术领域
本发明涉及数据库应用技术,特别是涉及一种群集环境下的数据缓存方法及系统。
背景技术
在数据库应用系统中,为了满足大型应用的性能需求,在应用系统的服务端通常有两种技术解决方案群集技术和缓存技术。其中,所述群集技术是使单独服务器实现物理和程序上的连接,并在服务器之间进行协同通讯,以使它们能够执行共同的任务;即使某一台服务器停止运行,故障应急进程会自动将该服务器的工作负载转移至另一台服务器,以保证提供持续不断的服务。因此,群集技术可以通过多台服务器并行计算提升系统的计算能力。所述缓存技术是指通过利用已有的计算结果,避免重复计算全面降低系统的压力。
应用系统一般会采用其中的一种方法使性能得到一定的提升,因为所述两种技术都不完美,两种技术之间存在一些矛盾。
例如,在某个系统中,服务器端使用了多台中间件服务器的群集技术,在每台服务器上都单独使用缓存技术。用户U1通过S1服务器更新了数据库中的订单B1,用户U2通过S2服务器查询订单B1,由于S2服务器此时并不知道用户U1已经更新过订单B1,会直接将缓存的订单B1数据返回给用户U2,所以用户U2会得到未更新的错误数据。这种情况下,群集技术得到了充分发挥,但在处理缓存时出现缓存不同步的问题。
在实际应用中,为了解决上述问题,通常会使用两种解决方法一种是让不同的中间件服务器负责彼此不冲突的业务模块。例如,某系统包含呼叫中心业务模块和财务业务模块,两模块在数据上和业务上彼此独立,不存在内部交互。在群集环境中部署这两个模块时,为了避免性能压力,将呼叫中心模块部署在一台服务器上,财务系统模块部署在另一台服务器上,由于业务压力被不同的服务器分担,并且缓存数据不会发生冲突,所以系统性能有所提高。
另一种是让不同的服务器负责不同的数据实体。例如,某集团有两家工厂共同使用一套业务系统,两工厂之间彼此不存在业务和数据关系,每个工厂使用一套独立的数据实体。在群集环境中部署这两个工厂的业务时,每个工厂固定使用其中一台服务器,由于业务压力被两台服务器分担,并且缓存数据在不同的服务器上不发生冲突。
以上两种方法都可以避免在群集环境中出现缓存冲突,但所述应用方案存在以下缺陷第一,要求具体客户端联结固定的服务器,网络配置复杂;第二,服务器之间不能分享计算能力,当局部出现性能压力时,不能由其他服务器分担压力。所以,上述两种方法虽然可以避免缓存不同步的问题,但却不能充分利用群集技术的性能均衡特征,在应用中不能发挥系统的最大性能。
综上所述,目前还没有解决方法,能够使群集技术和缓存技术同时得到充分的发挥。

发明内容
本发明所要解决的技术问题是提供一种群集环境下的数据缓存方法及系统,以解决在应用系统中同时使用群集技术与缓存技术相冲突的问题。
为解决上述技术问题,根据本发明提供的具体实施例,本发明公开了以下技术方案一种群集环境下的数据缓存方法,包括客户端发送数据调用请求;服务器查询本地缓存中是否存在所述要调用的数据,若不存在,则查询数据库;若存在,则判断所述缓存数据是否失效,如果未失效,则直接将所述缓存中的数据结果返回给客户端;如果失效,则查询数据库;查询数据库,将查询结果返回给客户端,并写入缓存。
优选的,按照以下步骤判断缓存数据是否失效记录数据库数据的更新时间;服务器获取缓存数据的创建时间,并与所述更新时间比较;若所述更新时间晚于创建时间,则所述缓存数据失效;否则,未失效。
所述步骤还包括客户端发送数据更新请求,服务器更新数据库数据,并刷新相应的更新时间。
优选的,以对象关键字为索引,记录数据库数据的更新时间;所述客户端请求中包含至少一个对象关键字,服务器根据所述对象关键字查询数据库数据的更新时间。
优选的,按照以下步骤查询缓存中是否存在客户端要调用的数据对应客户端请求计算唯一识别码,完全相同的请求的识别码一致;服务器根据所述识别码查询缓存,若查找到,则缓存中存在所述客户端要调用的数据;若未查找到,则在缓存中保存数据库查询结果时,将对应的识别码也保存。
其中,客户端计算所述唯一识别码,并随请求一起发送给服务器;或者服务器接收到客户端请求后,计算所述唯一识别码。
其中,采用Hash算法对请求包含的全部信息进行计算,得到唯一识别码。
一种群集环境下的数据缓存系统,包括数据库服务器,用于存储数据;客户端,用于向中间服务器发送数据调用请求;中间服务器,用于响应客户端请求,每个中间服务器上都部署缓存,根据所述客户端请求查询本地缓存中是否存在客户端要调用的数据,若不存在,则查询数据库服务器;若存在,则判断所述缓存数据是否失效,如果未失效,则直接将所述缓存中的数据结果返回给客户端;如果失效,则查询数据库服务器;查询数据库服务器,将查询结果返回给客户端,并写入缓存。
所述系统还包括状态服务器,用于记录数据库数据的更新时间;所述中间服务器通过将缓存数据的创建时间与状态服务器记录的更新时间进行比较,判断所述缓存数据是否失效,若所述更新时间晚于创建时间,则所述缓存数据失效;否则,未失效。
优选的,所述状态服务器以对象关键字为索引;所述客户端请求中包含至少一个对象关键字,状态服务器根据所述对象关键字查询数据库数据的更新时间。
其中,所述中间服务器根据客户端数据更新请求更新数据库服务器的数据后,触发状态服务器刷新相应的更新时间。
优选的,所述中间服务器的缓存以识别码为索引,所述识别码根据客户端请求计算得到,与客户端请求唯一对应;中间服务器根据所述识别码查询缓存,若查找到,则缓存中存在客户端要调用的数据;若未查找到,则在缓存中保存数据库查询结果时,将对应的识别码也保存。
其中,所述识别码由客户端计算得到,并随请求一起发送给中间服务器;或者,由中间服务器在接收到客户端请求后计算得到。
根据本发明提供的具体实施例,本发明公开了以下技术效果首先,在群集环境下使用缓存技术,服务器通过判断本地缓存中是否存在客户端要调用的数据,并进一步判断缓存中的数据是否失效,来解决缓存与数据库不同步问题,保证返回给客户端的数据结果是最新的数据;而且,所述方法不会破坏群集技术的特性,可以充分发挥群集技术的性能均衡特征,从而解决了群集技术与缓存技术相冲突的问题。因此,将两种技术同时应用能够提升系统的性能。
其次,由于每个中间服务器都部署了缓存,在缓存未失效的情况下,服务器直接从本地读取缓存数据,响应更加迅速。而且,避免了使用共享缓存由于频繁访问带来的性能瓶颈问题。
再次,与传统的对每一个缓存数据记录一个关键字的方式相比,使用对象关键字查询状态服务器的方法,对象关键字的数量是少量而有限的,因此大幅度削减了状态服务器(或数据库服务器)的数据量,在判断缓存是否有效时更加迅速。
再次,在判定缓存数据是否存在时,传统方法中使用复杂条件参数判定导致了大量的编码,而本发明实施例使用计算唯一识别码的方法,避免使用所述复杂条件,简化了判定过程。而且,在客户端对请求信息进行计算获得识别码,有效地降低了服务器的性能压力。
最后,传统方式下,在中间服务器中建立缓存并管理缓存,需要具体针对每一类数据进行缓存的编码。而本发明中,使用基于请求的服务器访问方法,可对需要缓存的每一次服务器调用进行缓存,实质上被缓存的不是业务对象,而是整个服务器请求的结果,服务器请求可以访问任意业务对象,只要确定好业务对象关键字即可。是否使用缓存的区别仅在于发起服务器请求的方法名称不同,仅需要在客户端修改调用方式。因此,实现了缓存与业务逻辑相剥离,降低了系统实现缓存计算的复杂性。


图1是本发明实施例所述一种群集环境下的数据缓存系统结构图;
图2是本发明实施例所述群集环境下通过缓存获取数据的步骤流程图;图3是图1所示系统中各组成部件的数据处理示意图。
具体实施例方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。
造成群集技术与缓存技术冲突的原因,是由于服务器之间的缓存数据存在不同步的问题,有效的解决方法是让不同服务器上的缓存数据能够同步。本发明提供了一种群集环境下缓存数据同步的方法及应用系统,在每台群集服务器上都使用缓存技术,服务器通过判断本地缓存中是否存在客户端要调用的数据,并进一步判断缓存中的数据是否失效,来解决缓存与数据库不同步问题,保证返回给客户端的数据结果是最新的数据。
在数据库应用系统中,有一些数据基本不变化或者变化很少,但被频繁读取,因此重复的数据读取给数据库造成了巨大压力,通过缓存手段可以避免数据库被频繁读取,将这类数据称为“基础数据”;而另外一些数据,在业务系统使用过程中会不断变化,或者是不断增加,这类数据缓存价值不大,称之为“业务数据”。本发明实施例中提出的缓存方案主要是解决所述基础数据的缓存问题。
本发明实施例实现了一种适用于群集环境下的高效缓存机制,为便于说明,下面先介绍所述缓存机制的应用环境。
参照图1,是所述一种群集环境下的数据缓存系统结构图。所述系统包括客户端1、群集2、中间服务器3、数据库服务器4和状态服务器5。其中,多个客户端1和多台中间服务器3分别与群集2相连,通过群集2为每个客户端1分配一个中间服务器3。中间服务器3通过内部网络与数据库服务器4和状态服务器5相连接,每一台中间服务器3都可以直接访问数据库服务器4和状态服务器5。
在群集环境下,多台中间服务器3以对称的方式组成一个服务器集合,每台服务器都具有等价的地位。而且,本发明实施例中的中间服务器3还利用中间件技术实现业务中间件的功能。而群集2是网络负载均衡群集,用于实现多台中间服务器3的负载均衡功能,能够平均分配客户端1请求到所述服务器集合,提供快速获取重要数据的功能,解决大量并发访问问题,从而提高系统性能。在采用群集技术的同时,每台中间服务器3上都配置缓存空间,并进行缓存管理,实现数据缓存功能。
在数据库服务器4中会存储多种基础数据,为每一类基础数据取一个名字,称作对象关键字。为了避免冲突,所述对象关键字在整个系统中是唯一的。所述状态服务器5是独立在群集环境之外的一个服务程序,用于记录数据库服务器4中存储数据的对象关键字和对应的更新时间,并以所述对象关键字为索引。
上述系统在正常运行的情况下,客户端如果需要查询某一基础数据,客户端将提交一个查询请求来获取需要的基础数据,如果所述基础数据存在于中间服务器的缓存中,则使用缓存数据。通过缓存获取基础数据是缓存使用的核心,参照图2所示,是所述群集环境下通过缓存获取数据的步骤流程图。
步骤201,客户端以请求的方式发起中间服务器调用,所述请求中主要包含被调用的服务器组件信息、调用的方法和参数。此外,还需要附加一个参数,是一组(一个或多个)对象关键字,所述对象关键字说明这次调用中所涉及的基础数据的类别信息。
步骤202,在提交请求前,客户端先对请求的全部信息进行某种Hash(哈希算法)计算,获取唯一识别码,完全相同的请求的唯一识别码一致。
采用Hash算法计算的目的是将请求的全部信息——一些不定长的字符或字符串编码压缩,得到一个唯一与所述请求对应的识别码。在缓存中,对应每种客户端请求的数据结果,也保存了相应的识别码。所以,所述识别码用于查询缓存数据,客户端在每次发送请求前都计算一次识别码。
当然,为实现压缩请求信息的功能,也可以采用其他数据压缩方法,例如自定义压缩算法等。而且,Hash算法也包括多种算法,例如MD2(Message-Digest Algorithm 2,一种信息-摘要算法)、MD4、MD5、SHA、SHA-1(安全散列算法)等。
需要说明的是,上述通过计算获取识别码的步骤也可以在中间服务器上实现,即客户端直接将请求发送给中间服务器,由中间服务器进行计算。但是,这种方式会增加中间服务器的负担,所以上述在客户端获取唯一识别码的方式,能够有效地降低服务器的性能压力。
步骤203,客户端在获取了唯一识别码后,将请求的全部信息附加上所述唯一识别码提交给中间服务器。
步骤204,中间服务器收到客户端发来的请求,首先,根据唯一识别码到本地缓存数据中查询,查找缓存中是否已经保存了所述客户端需要的数据结果。如果存在识别码相同的缓存数据,则获取该缓存数据的创建时间,继续步骤205,进行缓存数据是否失效的判断;否则,跳转到步骤206。
步骤205,中间服务器根据请求信息中的对象关键字,到状态服务器查询所述对象关键字对应的最晚的更新时间。如果发现最晚更新时间晚于缓存数据的创建时间,证明缓存数据在创建后,数据库服务器中相关类别的数据已更新过,缓存数据与数据库数据不一致,缓存已失效,执行步骤206进行数据库查询;否则,缓存数据有效,中间服务器可以直接读取本地缓存的数据结果,并将所述结果返回给客户端。
步骤206,如果缓存数据不存在,或者缓存数据失效,则需要到数据库服务器中进行查询。中间服务器根据请求中的相关参数,通过对应的服务器组件完成对数据库服务器的查询,取得计算结果,并将计算结果以及上面计算出的唯一识别码写入本地缓存中,同时将所述结果返回给客户端。如果是缓存数据失效的情况,则写入缓存的操作完成了缓存数据的更新;如果是缓存数据不存在的情况,则写入缓存的操作完成了缓存数据的创建。
上述通过缓存获取数据的过程中,步骤202-204用于实现缓存数据是否存在的判定,判定方法是根据唯一识别码查询缓存。这种判定方法与传统方式相比具有明显优势在传统方法中,一般针对同一类业务对象创建一组缓存数据,需要根据业务对象的具体特征数据来识别缓存数据,当业务对象类型不同时,特征数据也不同,需要通过不同的编码来实现,导致了大量的编码;而本发明实施例使用计算唯一识别码的方法,避免使用所述复杂条件,简化了判定过程。
并且,步骤205用于判定缓存数据是否失效,与传统的对每一个缓存数据记录一个关键字的方式相比,使用对象关键字查询状态服务器的方法,对象关键字的数量是少量而有限的,因此大幅度削减了状态服务器(或数据库服务器)的数据量,在判断缓存是否有效时更加迅速。而且,通过将缓存数据的创建时间与更新时间比较来判定是一种简单易行的方法,本发明不限定其他本领域技术人员所熟知和可行的判定方法,例如通过设置标志位来区别缓存数据是否与数据库数据一致等。
本发明优选的,使用基于请求的服务器访问方法,而在传统方式下,在中间服务器中建立缓存并管理缓存,需要具体针对每一类数据进行缓存的编码。上述使用基于请求的服务器访问方法,可对需要缓存的每一次服务器调用进行缓存,实质上被缓存的不是业务对象,而是整个服务器请求的结果,服务器请求可以访问任意业务对象,只要确定好业务对象关键字即可。是否使用缓存的区别仅在于发起服务器请求的方法名称不同,仅需要在客户端修改调用方式。因此,实现了缓存与业务逻辑相剥离,降低了系统实现缓存计算的复杂性。
上面的过程是基础数据的查询过程,不涉及状态服务器中对象关键字的时间更新,当基础数据发生更新时会涉及对象关键字的时间更新。
在系统正常运行时,如果需要增加、修改、删除数据库服务器中某一基础数据,则会触发基础数据的更新过程,进一步会触发状态服务器的更新。更新步骤如下第一步,客户端以请求的方式发起服务器调用,请求中包含更新基础数据所需的服务器组件信息、方法和参数,同时附加一个参数,该参数为对象关键字,对象关键字说明这次调用中所涉及的基础数据的类别信息。客户端将所述请求信息提交给中间服务器。
第二步,中间服务器收到客户端发来的请求,完成基础数据更新;然后根据请求中的对象关键字,到状态服务器将对应的对象关键字的更新时间刷新,完成对象关键字时间的更新,并将调用结果返回客户端。这样,状态服务器记录的更新时间将与数据库服务器中的数据更新同步变化。
需要说明的是,基础数据更新时并不进行相应缓存数据的更新,缓存数据是在上述步骤206中,当客户端需要调用缓存数据,判定缓存数据失效后,通过重新写入缓存来更新缓存数据。
当系统由于某种原因,如手工修改了基础数据或者数据库损坏等情况,导致缓存与数据库不一致的时候,可通过初始化状态服务器的方法达成让所有缓存失效的目的。所述初始化状态服务器是指将状态服务器的所有对象关键字的默认更新时间设置为当前时间,这样整个系统所涉及的缓存数据将全部失效。
上述同时使用群集技术和缓存技术的方式,既解决了缓存不同步问题,还能够充分发挥群集技术的性能均衡特征,从而解决了群集技术与缓存技术相冲突的问题。而且,由于每个中间服务器都部署了缓存,在缓存未失效的情况下,服务器可以直接从本地读取缓存数据,响应更加迅速。
虽然解决群集技术与缓存技术冲突的最简单的方法是将缓存数据存储在群集服务器共享的数据库服务器中,由于缓存数据只有一份,所以可以做到缓存完全同步。但是,所述方案带来的问题是由于频繁的访问缓存数据库,缓存数据库会成为新的性能瓶颈。但本发明实施例在每台服务器都配置缓存,可以有效地避免使用共享缓存带来的性能瓶颈问题。
图1所示系统是图2所示方法的一种具体实现,但并不限定其他的系统架构方案。基于图2所示流程,下面将完整说明图1系统中各个组成部件间的连接及数据处理情况。
如图3所示,客户机1计算对应请求的唯一识别码,中间服务器3实现缓存控制和业务组件功能,为缓存开辟存储空间6并保存缓存数据,业务对象关键字的时间基线(即更新时间)保存在状态服务器5中,基础数据保存在数据库服务器4中。
客户机1将包含业务对象关键字、被调用的服务器组件信息、调用的方法和参数的请求信息,以及唯一识别码一起发送给中间服务器3。中间服务器3通过缓存控制,根据所述识别码判断缓存数据是否存在,若不存在,则通过业务组件调用数据库服务器4获取请求结果,返回给客户机1。若存在,则继续判断所述缓存数据是否失效,在状态服务器5中查询业务对象关键字的时间基线,若缓存数据的创建时间早于所述时间基线,则缓存过期失效,需要通过业务组件调用数据库服务器4;若缓存有效,则直接将缓存的请求结果返回给客户机1。中间服务器3在调用数据库服务器4获取请求结果后,将结果返回给客户机1的同时,还需要将所述请求结果及相应的识别码写入缓存中。
图1和图3所示系统中未详述的部分可以参见图2所示方法的相关部分,为了篇幅考虑,在此不再详述。
以上对本发明所提供的一种群集环境下的数据缓存方法及系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种群集环境下的数据缓存方法,其特征在于,包括客户端发送数据调用请求;服务器查询本地缓存中是否存在所述要调用的数据,若不存在,则查询数据库;若存在,则判断所述缓存数据是否失效,如果未失效,则直接将所述缓存中的数据结果返回给客户端;如果失效,则查询数据库;查询数据库,将查询结果返回给客户端,并写入缓存。
2.根据权利要求1所述的方法,其特征在于,按照以下步骤判断缓存数据是否失效记录数据库数据的更新时间;服务器获取缓存数据的创建时间,并与所述更新时间比较;若所述更新时间晚于创建时间,则所述缓存数据失效;否则,未失效。
3.根据权利要求2所述的方法,其特征在于,还包括客户端发送数据更新请求,服务器更新数据库数据,并刷新相应的更新时间。
4.根据权利要求2所述的方法,其特征在于以对象关键字为索引,记录数据库数据的更新时间;所述客户端请求中包含至少一个对象关键字,服务器根据所述对象关键字查询数据库数据的更新时间。
5.根据权利要求1所述的方法,其特征在于,按照以下步骤查询缓存中是否存在客户端要调用的数据对应客户端请求计算唯一识别码,完全相同的请求的识别码一致;服务器根据所述识别码查询缓存,若查找到,则缓存中存在所述客户端要调用的数据;若未查找到,则在缓存中保存数据库查询结果时,将对应的识别码也保存。
6.根据权利要求5所述的方法,其特征在于客户端计算所述唯一识别码,并随请求一起发送给服务器;或者服务器接收到客户端请求后,计算所述唯一识别码。
7.根据权利要求5所述的方法,其特征在于采用Hash算法对请求包含的全部信息进行计算,得到唯一识别码。
8.一种群集环境下的数据缓存系统,其特征在于,包括数据库服务器,用于存储数据;客户端,用于向中间服务器发送数据调用请求;中间服务器,用于响应客户端请求,每个中间服务器上都部署缓存,根据所述客户端请求查询本地缓存中是否存在客户端要调用的数据,若不存在,则查询数据库服务器;若存在,则判断所述缓存数据是否失效,如果未失效,则直接将所述缓存中的数据结果返回给客户端;如果失效,则查询数据库服务器;查询数据库服务器,将查询结果返回给客户端,并写入缓存。
9.根据权利要求8所述的系统,其特征在于,还包括状态服务器,用于记录数据库数据的更新时间;所述中间服务器通过将缓存数据的创建时间与状态服务器记录的更新时间进行比较,判断所述缓存数据是否失效,若所述更新时间晚于创建时间,则所述缓存数据失效;否则,未失效。
10.根据权利要求9所述的系统,其特征在于所述状态服务器以对象关键字为索引;所述客户端请求中包含至少一个对象关键字,状态服务器根据所述对象关键字查询数据库数据的更新时间。
11.根据权利要求9所述的系统,其特征在于所述中间服务器根据客户端数据更新请求更新数据库服务器的数据后,触发状态服务器刷新相应的更新时间。
12.根据权利要求8所述的系统,其特征在于所述中间服务器的缓存以识别码为索引,所述识别码根据客户端请求计算得到,与客户端请求唯一对应;中间服务器根据所述识别码查询缓存,若查找到,则缓存中存在客户端要调用的数据;若未查找到,则在缓存中保存数据库查询结果时,将对应的识别码也保存。
13.根据权利要求12所述的系统,其特征在于所述识别码由客户端计算得到,并随请求一起发送给中间服务器;或者,由中间服务器在接收到客户端请求后计算得到。
全文摘要
本发明公开了一种群集环境下的数据缓存方法及系统,以解决在应用系统中同时使用群集技术与缓存技术相冲突的问题。所述方法包括客户端发送数据调用请求;服务器查询本地缓存中是否存在所述要调用的数据,若不存在,则查询数据库;若存在,则判断所述缓存数据是否失效,如果未失效,则直接将所述缓存中的数据结果返回给客户端;如果失效,则查询数据库;查询数据库,将查询结果返回给客户端,并写入缓存。由此,保证了服务器返回给客户端的数据结果是最新的数据;而且,所述方法不会破坏群集技术的特性,可以充分发挥群集技术的性能均衡特征,从而解决了群集技术与缓存技术相冲突的问题。因此,将两种技术同时应用能够提升系统的性能。
文档编号H04L29/08GK101090401SQ200710105708
公开日2007年12月19日 申请日期2007年5月25日 优先权日2007年5月25日
发明者雷中南 申请人:金蝶软件(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1