一种通过软件架构扩展缓存的系统的制作方法

文档序号:7814842阅读:232来源:国知局
一种通过软件架构扩展缓存的系统的制作方法
【专利摘要】本发明涉及一种通过软件架构扩展缓存的系统,包括服务端,客户端,在所述服务端和客户端之间部署多组服务器作为扩展缓存的扩展缓存服务器,每组服务器由主服务器和多台备用服务器构成;通过在已有的系统中增加缓存控制模块来确定所述客户端缓存和/或扩展缓存服务器上的扩展缓存的读写使用。本发明将分布式缓存引入企业应用架构,通过软件架构来提升原有系统的性能及稳定性。
【专利说明】一种通过软件架构扩展缓存的系统

【技术领域】
[0001]本发明涉及计算机领域,特别是一种通过软件架构扩展缓存的系统。

【背景技术】
[0002]近年来,随着各企业业务的飞速发展,各企业所使用的系统和子系统之间承载、处理、交互的数据量也在同步快速增长。尽管各企业使用的系统采用一流的企业级架构开发,拥有众多优点,但是业务量的超快速增长给企业系统带来大数据、高并发的全新挑战,对整个核心系统的性能及稳定性造成较大压力。目前虽然可以通过增加硬件资源的方法来对抗这种压力,但是无限制的增加硬件资源是不现实的,必须考虑通过软件架构的改造来应对。


【发明内容】

[0003]针对上述部分问题,本发明提供了一种通过软件架构扩展缓存的系统,该发明除了能解决承保系统当前的负载大、响应慢的问题,还能进一步推广其它因业务数据快速增长而带来系统负荷过大需要将业务数据进行分布式缓存的企业系统中。
[0004]一种通过软件架构扩展缓存的系统,包括服务端,客户端,其特征在于:在所述服务端和客户端之间部署多组服务器作为扩展缓存的扩展缓存服务器,每组服务器由主服务器和多台备用服务器构成;通过在已有的系统中增加缓存控制模块来确定所述客户端缓存和/或扩展缓存服务器上的扩展缓存的读写使用。
[0005]优选的:所述缓存控制模块中至少有一个控制参数,所述缓存控制模块实现如下缓存规则:
[0006](I)若控制参数第一位的值为V0,表示关,则只在所述客户端缓存上进行缓存数据存储;
[0007](2)若控制参数第一位的值为VI,表示开,则同时在所述客户端缓存和扩展缓存服务器上的扩展缓存进行缓存数据存储;
[0008](3)若控制参数第一位的值为V2,表示开,则只在所述扩展缓存服务器上的扩展缓存进行缓存数据存储;
[0009](4)若控制参数第二位的值为V3,表示关,则在所述客户端缓存上读取缓存数据;
[0010](5)若控制参数第二位的值为V4,表示开,则在所述扩展缓存服务器上的扩展缓存读取数据;
[0011]其中,V0、V1、V2、V3、V4为任意数据类型。
[0012]优选的:所述要进行缓存的数据以二维结构存储在客户端缓存和扩展缓存上,分为数据接口的信息缓存维度和数据接口的名称缓存维度,所述数据接口的信息缓存维度的关键字为数据接口的入参,所述数据接口的信息缓存维度的值为所述数据接口的返回信息;所述数据接口的名称缓存维度的关键字为所述数据接口,所述数据接口的名称缓存维度的值为所述数据接口的入参。
[0013]优选的:
[0014]所述数据接口的信息缓存维度的关键字的生成规则为:数位机构代码+系统代码+所述数据接口的方法名称+所述数据接口的所有入参名称+相同数据接口的方法名称的编号;
[0015]所述数据接口名称缓存维度关键字的生成规则,数位机构代码+系统代码+所述数据接口方法名称+相同所述数据接口方法名称的编号;
[0016]所述机构代码为所述系统使用者的编码;
[0017]所述系统代码为所述系统的子系统的顺序编码;
[0018]所述相同数据接口方法名称的编号的位数大于等于所述数据接口方法名称相同的数目值的位数,所述编号的值为以自然数序列增长的整数,如果所述编号的位数比所述整数的位数多,则在所述整数的最高位前面补零;如果不存在所述数据接口的方法名称相同的情况,则所述相同数据接口的方法名称的编号为零,零的个数等于所述编号的位数。
[0019]优选的:所述客户端在请求数据时首先获取所请求数据的数据接口,并通过所述数据接口的缓存标记初步判断所请求数据使用的缓存是客户端缓存还是扩展缓存,然后按照下列规则进行读写操作:
[0020](I)如果初步判断所请求数据只在客户端缓存存储,则首先在所述客户端缓存查询数据,若没有或者数据被置为无效,则所述客户端向服务端发送数据请求;
[0021]所述服务端向所述客户端返回数据响应和所请求的数据;
[0022]所述客户端接收所述数据响应和所请求的数据并将所请求的数据存储在所述客户端缓存中;
[0023](2)如果初步判断所请求数据为客户端缓存和扩展缓存,则首先在所述客户端缓存查询数据,若没有或者数据被置为无效则向所述扩展缓存发送数据请求;
[0024]若所述扩展缓存有所请求的数据,则向所述客户端返回所请求的数据,所述客户端接收所请求的数据并在所述客户端缓存存储;
[0025]若所述扩展缓存没有所请求的数据,则向所述客户端发送没有所请求的数据的响应,所述客户端在接收所述服务端发送的没有所请求的数据的响应后,向服务端发送所述数据请求;所述服务端向所述客户端返回数据响应和所请求的数据;所述客户端接收所述数据响应和所请求的数据并将所请求的数据存储在所述客户端缓存和所述扩展缓存中;
[0026](3)如果初步判断所请求的数据为扩展缓存,则直接向所述扩展缓存所在的扩展缓存服务器发送数据请求;
[0027]若所述扩展缓存服务器上有所请求的数据,则向所述客户端返回所请求的数据;
[0028]若所述扩展缓存服务器上没有所请求的数据,则向所述客户端发送没有所请求的数据响应,所述客户端在接收没有所请求的数据响应后,向服务端发送数据请求;所述服务端向所述客户端返回数据响应和所请求的数据;所述客户端接收所述数据响应和所请求的数据并将数据存储在所述扩展缓存中;
[0029]其中,当所述客户端在向所述扩展缓存服务器发出数据请求时,如果所述客户端与所述扩展缓存服务器通信故障时,所述客户端将直接向所述服务端发出所述数据请求,所述服务端向所述客户端返回数据响应和所请求的数据,所述客户端接收所述数据响应和所请求的数据;
[0030]所述所请求的数据如果需要存储在所述客户端缓存,则将所述所请求的数据存储在所述客户端缓存上;
[0031]所述所请求的数据如果需要存储在指定的扩展缓存服务器上:若所述通信故障尚未恢复,则所述客户端放弃存储操作;若所述通信故障恢复,则所述客户端执行将所述所请求的数据存储到指定的扩展缓存服务器上。
[0032]优选的:
[0033]在所述客户端向服务端发送数据请求之前,或者在所述客户端在向所述扩展缓存服务器发出数据请求之前:所述客户端先根据所请求的数据构建所述所请求的数据的关键字值。
[0034]优选的:设置一个缓存预热设备,所述缓存预热设备包括数据接口调用频率统计模块和系统定期维护通知模块,所述数据接口调用频率统计模块按照数据接口的使用频率进行统计和排序,并在系统启动时将所述数据接口的使用频率统计和排序通知给所述系统的客户端和服务端;所述系统定期维护提醒模块用于设置定期维护的时间长度,并在一个时间长度结束时,将所述时间长度结束前的数据接口的使用频率统计和排序信息发通知给系统维护人员。
[0035]优选的:在服务端设置数据推送模块,对于在所述系统的客户端缓存存储或在扩展缓存服务器的扩展缓存中存储的缓存数据,当所述缓存数据在所述系统的服务端对应的数据发生更新时,所述数据推送模块用于主动对所述扩展缓存服务器发起更新操作或通知客户端将已经发生更新的数据置为无效;所述数据推送模块还用于在系统启动时,根据数据接口调用频率统计模块的统计,将数据预装到所述扩展缓存服务器。
[0036]优选的:所述数据接口调用频率统计模块将所述数据接口的使用频率按照从大到小的顺序进行排序,并将缓存数据按照所属数据接口依照下述原则进行缓存标记:
[0037](I)所述缓存数据所属数据接口的使用频率属于小于等于排序后的前10%的数据接口标记为V0V3,表示只在客户端缓存上进行缓存数据存储和读取;
[0038](2)所述缓存数据所属数据接口的使用频率属于大于所述排序后的前10%且小于等于排序后的前20%的数据接口标记为V1V3,表示在客户端缓存和扩展缓存上进行缓存数据存储,在发出数据请求时先在客户端缓存读取;
[0039](3)所述缓存数据所属数据接口的使用频率属于大于所述排序后的前20%的数据接口标记为V2V4,表示在扩展缓存上进行缓存数据存储和读取;
[0040]其中,V0、V1、V2、V3、V4为任意数据类型。
[0041]优选的:在所述数据推送模块用于主动对所述扩展缓存服务器发起更新操作之前,或者所述数据推送模块在系统启动时,根据数据接口调用频率统计模块的统计,将数据预装到所述扩展缓存服务器之前,所述服务端先构建所推送数据的关键字值。
[0042]优选的:所述系统包括缓存管理模块,所述缓存管理模块提供可视化的操作界面,在所述界面上能够显示当前和所述客户端通信无故障的扩展缓存服务器的地址信息和所述当前扩展缓存服务器上存储的缓存数据信息,其中:
[0043]所述缓存数据信息按照使用频率进行排序显示;
[0044]所述缓存数据信息包括用于获取缓存数据的数据接口名称,数据接口描述以及能够对所述缓存数据进行的操作;
[0045]所述扩展缓存服务器的地址信息则包括当前用于写入缓存数据的写入扩展缓存服务器的IP及其端口、当前用于读取缓存数据的读取扩展缓存服务器的IP及其端口,以及所述写入扩展缓存服务器和所述读取扩展缓存服务器的连接状态信息,所述连接状态信息包括可连接与不可连接。
[0046]优选的:
[0047]所述缓存数据信息以列表显示,所述缓存数据的显示包括数据字典缓存信息和用户系统缓存信息;
[0048]所述数据字典缓存信息和用户系统缓存信息分别按照使用频率从高到低进行排序,其中所述数据字典缓存信息默认显示数条排序在前的数据字典记录,其它部分默认隐藏,被隐藏的这部分通过用户交互来进行显示或隐藏的切换;
[0049]当数据字典记录被显示时,系统提供清理缓存的能力;
[0050]对于隐藏的数据字典记录,系统还提供对具体某数据字典记录或某些数据字典记录进行清除的能力;
[0051]所述用户系统缓存信息记录默认隐藏,通过用户交互来进行用户系统缓存信息记录的显示或隐藏的切换;对于隐藏的用户系统缓存信息记录,系统提供对具体某用户缓存信息记录或某些用户缓存信息记录进行清除的能力。
[0052]优选的:所述清除操作为对欲清除的缓存数据进行无效标记。
[0053]优选的:
[0054]所述缓存管理模块在清除扩展缓存服务器上的缓存数据后,向所述服务端发送如下通知:所述通知包含所清除的缓存数据的大小和所清除的缓存数据所属的数据接口信息;
[0055]所述服务端在接收所述通知后,通过所述数据推送模块根据其中的数据接口信息获取当前数据,并根据其中的缓存数据的大小确定发送给扩展缓存的数据量。
[0056]优选的:所述系统通过json进行序列化处理后进行数据传输,并在指定的扩展缓存服务器上以二进制的格式进行存储;所述客户端接收数据后,进行反序列化处理后使用。
[0057]优选的:所述系统使用了 Redis缓存架构。
[0058]优选的:所述系统使用了 Redis的哨兵程序。
[0059]优选的:所述系统通过编写和执行Linux脚本来启动所述哨兵程序。
[0060]优选的:在所述服务端的数据库中增加所述扩展缓存服务器的地址存储表,并将所述扩展缓存服务器的地址信息增加到所述存储表中;在所述客户端构建一个连接池来维护扩展缓存服务器的地址信息。
[0061]优选的:所述缓存管理模块还包括一致性Hash算法单元,所述服务端通过调用所述一致性Hash算法单元能够确定存放缓存信息的唯一的扩展缓存服务器,所述客户端则能够通过调用所述一致性Hash算法单元确定存取缓存信息的唯一扩展缓存服务器。
[0062]优选的:所述系统还包括缓存日志模块,所述操作缓存模块将针对缓存进行的操作写入到缓存日志文件中,所述缓存包括客户端缓存和扩展缓存。
[0063]本发明具有如下特点:
[0064](I)本发明将分布式缓存引入企业应用架构,通过软件架构来提升原有系统的性能及稳定性;
[0065](2)整个系统可按需横向扩展,可充分利用现有软、硬件资源;
[0066](3)对分布式缓存实现可视化缓存管理,方便操作;
[0067](4)在对缓存扩展后,采用高性能序列化方案替代传统的XML序列化,在大幅度减小传输数据量,整体提升系统吞吐量同时,在扩展缓存上进行序列化存储可以加快数据的处理速度;
[0068](5)采用Redis分布式缓存架构,可以实现主从复制、读写分离的技术方案,具有高可靠性。

【专利附图】

【附图说明】
[0069]图1为一种扩展缓存使用流程图;
[0070]图2为采用分布式扩展缓存后的系统架构图;
[0071]图3为使用哨兵程序的系统架构图。

【具体实施方式】
[0072]在一个基础的实施例中,一种通过软件架构扩展缓存的系统,包括服务端,客户端,在所述服务端和客户端之间部署多组服务器作为扩展缓存的扩展缓存服务器,每组服务器由主服务器和多台备用服务器构成;通过在已有的系统中增加缓存控制模块来确定所述客户端缓存和/或扩展缓存服务器上的扩展缓存的读写使用。
[0073]当前的企业应用系统均采用一流的企业级架构开发,拥有众多优点,但是业务量的超快速增长给当前系统带来大数据、高并发的全新挑战,对整个核心系统的性能及稳定性造成较大压力。虽然可以通过增加硬件资源的方法来对抗这种压力,但是无限制的增加硬件资源是不现实的,因而需要通过软件架构的改造来应对。
[0074]通过软件架构的方式来扩展缓存虽然也要增加硬件服务器,但是会同时在软件方面增加对增加的硬件服务器进行管理的模块,来帮助合理分配使用增加的硬件资源,这样使整个系统负载均衡,合理调配资源。
[0075]优选的,通过采用Redis的缓存架构来扩展缓存,Redis支持各种不同方式的排序,为了保证效率,数据都是缓存在内存中,而且Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave (主从)同步,即数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器,而同步对读取操作的可扩展性和数据冗余很有帮助,这同时也提高了系统的可靠性。用这种方式扩展缓存,不是单纯的添加硬件服务器,而是通过用软件架构的方式来提升系统的性能和稳定性。
[0076]在本实施例中,虽然可以选择已有的分布式缓存技术来对原系统进行扩展,但是为了提高系统的响应能力,充分利用所有资源,还可以同时为所述系统增加了一个缓存控制模块来确定所述系统的客户端缓存和/或扩展缓存服务器的读写使用,制定自身的读写规则。通过一个缓存控制模块的使用,可以带来两方面的好处。首先,在启用改进的系统时候如果扩展缓存部分不稳定,可以切换回原系统使用,不影响工作,这种方式可以参阅图1。其次,如果改进的系统可以正常使用,请参阅图2,客户端请求数据时绝大部分时候是和缓存服务器打交道,只有在客户端所请求的数据在缓存中未命中的情况才向服务端发出请求,大大减轻了服务端的响应负担,整体上提升了系统的性能。
[0077]优选的,可以用一个控制参数的值来实现缓存规则。比如,所述控制参数设置为两位,其中一位的值来确定是否在客户端缓存和/或扩展缓存读,另一位的值用来确定是否在客户端缓存和/或扩展缓存写。具体的,若控制参数第一位的值为V0,表示关,则只在所述客户端缓存上进行缓存数据存储;若控制参数第一位的值为VI,表示开,则同时在所述客户端和扩展缓存服务器上进行缓存数据存储;若控制参数第一位的值为V2,表示开,则只在所述扩展缓存服务器上进行缓存数据存储;若控制参数第二位的值为V3,表示关,则在所述客户端缓存上读取缓存数据;若控制参数第二位的值为V4,表示开,则在所述扩展缓存服务器上读取数据。其中,V0、V1、V2、V3、V4为任意数据类型,可以为整数也可以为字符串,表示相同含义时它们的值可以相同也可以不同。
[0078]更优的,针对所述系统的缓存规则,本发明设计了读写数据规则。所述客户端在请求数据时首先获取所请求数据的数据接口,并通过所述数据接口的缓存标记初步判断所请求数据使用的缓存是客户端缓存还是扩展缓存,然后按照下列规则进行读写操作:
[0079](I)如果初步判断所请求数据只在客户端缓存存储,则首先在所述客户端缓存查询数据,若没有或者数据被置为无效,则所述客户端向服务端发送数据请求;所述服务端向所述客户端返回数据响应和所请求的数据;所述客户端接收所述数据响应和所请求的数据并将所请求的数据存储在所述客户端缓存中;
[0080](2)如果初步判断所请求数据为客户端缓存和扩展缓存,则首先在所述客户端缓存查询数据,若没有或者数据被置为无效则向所述扩展缓存发送数据请求;
[0081]若所述扩展缓存有所请求的数据,则向所述客户端返回所请求的数据,所述客户端接收所请求的数据并在所述客户端缓存存储;
[0082]若所述扩展缓存没有所请求的数据,则向所述客户端发送没有所请求的数据的响应,所述客户端在接收所述服务端发送的没有所请求的数据的响应后,向服务端发送所述数据请求;所述服务端向所述客户端返回数据响应和所请求的数据;所述客户端接收所述数据响应和所请求的数据并将所请求的数据存储在所述客户端缓存和所述扩展缓存中;
[0083](3)如果初步判断所请求的数据为扩展缓存,则直接向所述扩展缓存所在的扩展缓存服务器发送数据请求;
[0084]若所述扩展缓存服务器上有所请求的数据,则向所述客户端返回所请求的数据;
[0085]若所述扩展缓存服务器上没有所请求的数据,则向所述客户端发送没有所请求的数据响应,所述客户端在接收没有所请求的数据响应后,向服务端发送数据请求;所述服务端向所述客户端返回数据响应和所请求的数据;所述客户端接收所述数据响应和所请求的数据并将数据存储在所述扩展缓存中;
[0086]其中,当所述客户端在向所述扩展缓存服务器发出数据请求时,如果所述客户端与所述扩展缓存服务器通信故障时,所述客户端直接向所述服务端发出所述数据请求,所述服务端向所述客户端返回数据响应和所请求的数据,所述客户端接收所述数据响应和所请求的数据;所述所请求的数据如果需要存储在所述客户端缓存,则将所述所请求的数据存储在所述客户端缓存上;所述所请求的数据如果需要存储在指定的扩展缓存服务器上,若所述通信故障尚未恢复,则所述客户端放弃存储操作,若所述通信故障恢复,则所述客户端执行将所述所请求的数据存储到指定的扩展缓存服务器上。
[0087]下面进一步阐述本发明,应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
[0088]在一个实施例中,所述系统的扩展缓存的使用方式是为了扩展后的缓存能够平稳切换,如图1所示,所述系统的客户端在发出数据请求前,构建所请求数据的关键字key,所述系统采用的数据请求时的处理原则为:
[0089]1、如果所述控制参数的第二位为V4,则所述客户端将向扩展缓存服务器发送数据请求;
[0090]1.1所述扩展缓存服务器在获取key对应value后,将向所述客户端返回所述key对应的value ;
[0091]1.2所述客户端接收所述key对应的value,并判断所述key对应的value是否为空,若是空,则判断扩展缓存中没有所请求的数据的结论,则向服务端发送数据请求;
[0092]1.3所述服务端根据请求查询数据并将数据返回给所述客户端;所述客户端根据所述控制参数第一位表示的状态,判断是否将所接收的数据存储在扩展缓存上;若所述控制参数第一位为V2,则将接收的数据的key与value关联,将所述key与value关联后的结果放入扩展缓存中;若为VI,则将接收的数据的key与value关联后的结果放入客户端缓存中;若为V0,则将接收的数据的key与value关联后的结果同时放入扩展缓存和客户端缓存中;
[0093]2、如果所述控制参数的第二位表示V3,则所述客户端判断key对应的value是否为空,若不为空,则直接在所述客户端缓存获取所请求的数据并使用;若为空,则向服务端发送数据请求;后面的处理过程与1.3相同。其中,W、V1、V2、V3、V4的要求同上,在此不再赘述。
[0094]在一个实施例中,为了方便管理缓存服务器上的数据,增加了对缓存数据的存储结构设计。所述缓存数据以二维结构存储在客户端和扩展缓存服务器上,分为数据接口的信息缓存维度和数据接口的名称缓存维度,所述数据接口的信息缓存维度的关键字为数据接口的入参,所述数据接口的信息缓存维度的值为所述数据接口的返回信息;所述数据接口的名称缓存维度的关键字为所述数据接口,所述数据接口的名称缓存维度的值为所述数据接口入参,此二维设计可以做到以数据接口为中心方便管理。在所述客户端向服务端发送数据请求之前,或者在所述客户端在向所述扩展缓存服务器发出数据请求之前:所述客户端先根据所请求的数据构建所述所请求的数据的关键字值。
[0095]优选的,所述接口信息缓存维度的关键字的生成规则为:数位机构代码+系统代码+接口方法名称+接口所有入参名称+相同接口方法名称的编号;所述接口名称缓存维度关键字的生成规则,数位机构代码+系统代码+接口方法名称+相同接口方法名称的编号;所述机构代码为所述系统使用者的编码;所述系统代码为所述系统的子系统的顺序编码;所述相同接口方法名称的编号用于区分相同的接口方法名称,通常所述相同数据接口方法名称的编号的位数大于等于所述数据接口方法名称相同的数目值的位数,所述编号的值为以自然数序列增长的整数,如果所述编号的位数比所述整数的位数多,则在所述整数的最高位前面补零;如果不存在所述数据接口的方法名称相同的情况,则所述相同数据接口的方法名称的编号为零,零的个数等于所述编号的位数。所述相同接口方法名称的编号的位数可以根据系统开发需要而设定。
[0096]在一个实施例中,使用车险承保子系统的公司在西安,其西安的机构代码为4位,假设是1234,车险承保子系统的编码为0101,某个接口方法为SeRVice.getlnfo (StRing systemCode, PRpDplan pRpDplan),并且系统中有 2 个这样的函数,为方便区别相同的接口名称,所述相同接口方法名称的编号设I位,则接口名称为SeRVice.getlnfo的接口名称缓存维度的关键字为1234-0101-SeRVicegetInfo-l,返回值为1234-0101-SeRVicegetlnfo-StRing systemCode-PRpDpIanpRpDplan-Ι,这个返回值将作为接口信息缓存维度的关键字,通过接口信息缓存维度的关键字的返回值可以得到一个具体的数据对象。
[0097]在另一个实施例中,整个系统只有一个接口方法的名称,也就是所述接口方法的名称在整个系统中唯一,则相同数据接口的方法名称的编号为一个O。
[0098]在一个实施例中,为方便管理,设相同数据接口的方法名称的编号为4位,则对于一个接口方法的名称如果有3个相同的情况,则所述相同数据接口的方法名称的编号依次为0001,0002,0003 ;而如果只有一个的情况,则所述相同数据接口的方法名称的编号为0000。
[0099]通常,在所述客户端向服务端发送数据请求之前,或者在所述客户端在向所述扩展缓存服务器发出数据请求之前:所述客户端先根据所请求的数据构建所述所请求的数据的关键字值。
[0100]在一个实施例中,为了后期对系统响应速度的优化,针对性的提高系统性能,以及为了能定期的维护,在所述系统中增加一个缓存预热设备,如附图2所示,所述缓存预热设备包括数据接口调用频率统计模块和系统定期维护通知模块,所述数据接口调用频率统计模块按照数据接口的使用频率进行统计和排序,并在系统启动时将所述数据接口的使用频率统计和排序通知给所述系统的客户端和服务端;所述系统定期维护提醒模块中可以设置定期维护的时间长度,并在一个时间长度结束时将所述时间长度结束前的数据接口的使用频率统计和排序发通知系统维护人员。
[0101]所述数据接口调用频率统计模块有助于对所述系统中各类数据的使用情况进行了解,有助于对以后的系统优化提供数据支撑。而系统定期维护提醒模块可以以邮件或者短信的方式通知系统维护人员系统中各类数据的使用情况,在后期的优化中有助于系统维护人员对系统优化采用策略的制定。
[0102]在本实施例中,通过对预热设备的利用,根据数据接口调用频率统计模块的统计,将数据预装到所述扩展缓存服务器,有利于提高大多数数据的命中率,提高系统处理能力。优选的,可以在扩展缓存使用之前,就使用该设备的数据接口调用频率统计模块功能,这样能在扩展缓存使用时取得一个很好的效果。而如果预热设备在扩展缓存使用时才开始使用,所述数据接口调用频率统计模块也能在改进后的系统使用一段时间后,重新启动系统时取得高命中率的效果。
[0103]在一个实施例中,为了提高缓存数据的命中率,所述系统增加数据推送模块,所述数据推送模块能够将已在客户端存储或在扩展缓存服务器中存储的缓存数据,当所述缓存数据在所述服务端发生更新时,如附图2所示,所述服务端主动对所述扩展缓存服务器发起更新操作,或通知客户端将已经发生更新的数据置为无效;所述数据推送模块还用于在系统启动时,根据数据接口调用频率统计模块的统计,将数据预装到所述扩展缓存服务器。而所述数据推送模块在主动对所述扩展缓存服务器发起更新操作之前,或者在系统启动时,根据数据接口调用频率统计模块的统计,将数据预装到所述扩展缓存服务器之前,所述服务端均需要先构建所推送数据的关键字值。
[0104]所述数据推送模块的使用,减轻对服务端的请求与响应压力。通过有区别的对扩展缓存进行数据更新操作而对客户端进行置无效操作,有利于提高对扩展缓存的缓存数据命中率,而同时减少对客户端通信的数据量传输,有利于提高系统的响应性能。
[0105]在一个实施例中,为更好的提高缓存数据的读取速度,所述数据接口调用频率统计模块将所述数据接口的使用频率按照从大到小的顺序进行排序,对将缓存的数据按照所属数据接口依照下述原则进行缓存标记,并在所述数据接口的缓存标记发生变化时通知所述系统的客户端:
[0106](I)所述缓存数据所属数据接口的使用频率属于小于等于排序后的前10%的数据接口标记为V0V3,表示只在客户端缓存上进行缓存数据存储和读取;
[0107](2)所述缓存数据所属数据接口的使用频率属于大于所述排序后的前10%且小于等于所述排序后的前20%的数据接口标记为V1V3,表示在客户端缓存和扩展缓存上进行缓存数据存储,在发出数据请求时先在客户端缓存读取;
[0108](3)所述缓存数据所属数据接口的使用频率属于大于所述排序后的前20%的数据接口标记为V2V4,表示在扩展缓存上进行缓存数据存储和读取。
[0109]其中,V0、V1、V2、V3、V4的要求同上,在此不再赘述。
[0110]通过按照系统业务数据的使用频率,利用二八定律对数据进行人为指定哪些数据存放在客户端缓存方便读取;哪些数据既存放在客户端缓存又存放在扩展缓存中,分担对服务端的请求响应负担;哪些数据只存放在扩展缓存中,不过度增加客户端的压力的同时,分担服务端的请求响应压力,有利于提高系统的响应性能。
[0111]为了更好的对缓存服务器进行管理,在所述系统中增加了缓存管理模块,所述缓存管理模块提供可视化的操作界面,在所述界面上能够显示当前和所述客户端通信无故障的扩展缓存服务器的地址信息和所述当前扩展缓存服务器上存储的缓存数据信息,所述缓存数据信息按照使用频率进行排序显示;所述缓存数据信息包括用于获取缓存数据的数据接口名称,数据接口描述以及能够对所述缓存数据进行的操作;所述扩展缓存服务器的地址信息包括当前用于写入缓存数据的写入扩展缓存服务器的IP及其端口、当前用于读取缓存数据的读取扩展缓存服务器的IP及其端口,以及所述写入扩展缓存服务器和所述读取扩展缓存服务器的连接状态显示,所述连接状态分为可连接与不可连接。
[0112]优选的,所述缓存数据信息以列表显示,所述缓存数据的显示包括数据字典缓存信息和用户系统缓存信息;所述数据字典缓存信息和用户系统缓存信息分别按照使用频率从高到低进行排序,其中所述数据字典缓存信息默认显示数条排序在前的数据字典记录,其它部分默认隐藏,被隐藏的这部分通过用户交互来进行显示或隐藏的切换;当数据字典记录被显示时,系统提供清理缓存的能力;对于隐藏的数据字典记录,系统还提供对具体某数据字典记录或某些数据字典记录进行清除的能力;所述用户系统缓存信息记录默认隐藏,通过用户交互来进行用户系统缓存信息记录的显示或隐藏的切换;对于隐藏的用户系统缓存信息记录,系统提供对具体某用户缓存信息记录或某些用户缓存信息记录进行清除的能力。
[0113]在一个实施例中,所进行的清除操作是一个懒加载的过程。在具体实施过程中,所述缓存数据不会被硬删除,只是会被置于无效。所述缓存管理模块在清除扩展缓存数据后,向服务端发送如下通知:所述通知包含所清除的缓存数据的大小和所清除的缓存数据所属的数据接口信息的通知;所述服务端在接收所述所清除的缓存数据的大小和数据接口信息的通知后,通过所述数据推送模块根据其中的数据接口信息获取数据,并根据其中的缓存数据的大小确定发送给扩展缓存的数据量。
[0114]更优的,所述缓存管理模块还包括一致性Hash算法单元,所述服务端通过调用所述一致性Hash算法单元能够确定存放缓存信息的唯一的扩展缓存服务器,所述客户端则能够通过调用所述一致性Hash算法单元确定存取缓存信息的唯一扩展缓存服务器。
[0115]在客户端判断请求的数据在扩展缓存时,或者在服务端的数据推送模块在进行推送数据时,都将调用一致性Hash算法单元,用于确定唯一的扩展缓存服务器。通过一致性Hash算法的使用,可以使数据存放在所有扩展服务器上分布均匀,所有扩展服务器负载均衡,有利于系统稳定。
[0116]优选的,所述系统增加了缓存日志模块,所述缓存日志模块将针对缓存进行的操作写入到缓存日志文件中,所述缓存包括客户端缓存和扩展缓存。
[0117]在另一个实施例中,为了提高传输数据提高系统数据吞吐量,减少传输数据量,加快解析速度,所述系统通过json进行序列化处理后进行数据传输,并在指定的扩展缓存服务器上以二进制的格式进行存储,所述客户端接收数据后,进行反序列化处理后使用。然而,如果所请求的数据就在客户端缓存,不需要进行序列化和反序列化处理。
[0118]在扩展缓存服务器写满数据时,同时又需要写新的数据时,所述系统使用了 Redis的LRU算法来进行数据替换。
[0119]在一个实施例中,为了提高系统的可靠性,系统使用了 Redis的哨兵程序,并通过编写Linux脚本,执行Linux命令运行所述脚本,进而启动执行哨兵程序。
[0120]通过编写脚本来控制哨兵程序,使用方便,操作简单,可以更好的方便系统维护人员进行配置和维护,提高工作效率。
[0121]为了使用所述哨兵程序,需要在部署哨兵程序的服务器上的哨兵程序的配置文件中进行相关参数的配置。另外,在所述客户端服务器上配套配置Redis的属性文件Redis.properties中配置所述哨兵程序的服务器地址,用于客户端与哨兵程序所在的服务器相连,而在哨兵程序中,会维护一个关于客户端地址的消息队列,所述客户端与所述哨兵程序所在的服务器相连后,会在所述的消息队列中注册。
[0122]为了管理和维护扩展缓存服务器,在所述服务端的数据库中增加所述扩展缓存服务器的地址存储表,并将所述扩展缓存服务器的地址信息增加到所述存储表中;在所述客户端构建一个连接池来维护扩展缓存服务器的地址信息。
[0123]在另一个实施例中,所述客户端与所述哨兵程序所在的服务器相连后,在所述的消息队列中注册并订阅了“服务器切换”的消息。当所述哨兵程序将扩展缓存服务器的主服务器的地址信息发送给所述客户端,所述客户端将更新所述地址信息。当系统启动时,哨兵程序会将所有主服务器的地址信息发送给所述客户端;当系统运行中,某个主服务器发生故障,哨兵程序会将该主服务器的某台备用服务器提升为新的主服务器,同时会将新的主服务器的地址信息通知给所述客户端。如图3所示,系统部署了多组Redis的主备服务器,通过使用哨兵集群来监控所述的主备服务器,所述哨兵集群中有多个哨兵程序,如果某台主服务器故障,所述哨兵集群会主动将该故障的主服务器的从服务器提升为主服务器,并主动将新的缓存服务器状态告知所述客户端。在图3中,还可以看到,对于多组Redis的主备服务器,所述客户端是通过一致性hash算法向指定的扩展服务器发出数据请求的,若扩展服务器上有所述客户端所请求的数据,则会向所述客户端返回所请求的数据。通过多组主备服务器来进行缓存数据存储,可以减少所述客户端对服务端的请求,减少所述服务端的响应次数,提高整个系统的响应速度;同时使用哨兵集群监控所述多组主备服务器,可以提高系统的可靠性。
[0124]本说明书中每个实施例采用采用递进的方式描述,重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0125]以上对本发明所提供的一种通过软件架构扩展缓存的系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种通过软件架构扩展缓存的系统,包括服务端,客户端,其特征在于:在所述服务端和客户端之间部署多组服务器作为扩展缓存的扩展缓存服务器,每组服务器由主服务器和多台备用服务器构成;通过在已有的系统中增加缓存控制模块来确定所述客户端缓存和/或扩展缓存服务器上的扩展缓存的读写使用。
2.根据权利要求1所述的系统,其特征在于:优选的,所述缓存控制模块中至少有一个控制参数,所述缓存控制模块实现如下缓存规则: (1)若控制参数第一位的值为V0,表示关,则只在所述客户端缓存上进行缓存数据存储; (2)若控制参数第一位的值为VI,表示开,则同时在所述客户端缓存和扩展缓存服务器上的扩展缓存进行缓存数据存储; (3)若控制参数第一位的值为V2,表示开,则只在所述扩展缓存服务器上的扩展缓存进行缓存数据存储; (4)若控制参数第二位的值为V3,表示关,则在所述客户端缓存上读取缓存数据; (5)若控制参数第二位的值为V4,表示开,则在所述扩展缓存服务器上的扩展缓存读取数据; 其中,V0、V1、V2、V3、V4为任意数据类型。
3.根据权利要求2所述的系统,其特征在于:所述要进行缓存的数据以二维结构存储在客户端缓存和扩展缓存上,分为数据接口的信息缓存维度和数据接口的名称缓存维度,所述数据接口的信息缓存维度的关键字为数据接口的入参,所述数据接口的信息缓存维度的值为所述数据接口的返回信息;所述数据接口的名称缓存维度的关键字为所述数据接口,所述数据接口的名称缓存维度的值为所述数据接口的入参。
4.根据权利要求3所述的系统,其特征在于: 所述数据接口的信息缓存维度的关键字的生成规则为:数位机构代码+系统代码+所述数据接口的方法名称+所述数据接口的所有入参名称+相同数据接口的方法名称的编号; 所述数据接口名称缓存维度关键字的生成规则,数位机构代码+系统代码+所述数据接口方法名称+相同所述数据接口方法名称的编号; 所述机构代码为所述系统使用者的编码; 所述系统代码为所述系统的子系统的顺序编码; 所述相同数据接口方法名称的编号的位数大于等于所述数据接口方法名称相同的数目值的位数,所述编号的值为以自然数序列增长的整数,如果所述编号的位数比所述整数的位数多,则在所述整数的最高位前面补零;如果不存在所述数据接口的方法名称相同的情况,则所述相同数据接口的方法名称的编号为零,零的个数等于所述编号的位数。
5.根据权利要求2所述的系统,其特征在于:所述客户端在请求数据时首先获取所请求数据的数据接口,并通过所述数据接口的缓存标记初步判断所请求数据使用的缓存是客户端缓存还是扩展缓存,然后按照下列规则进行读写操作: (I)如果初步判断所请求数据只在客户端缓存存储,则首先在所述客户端缓存查询数据,若没有或者数据被置为无效,则所述客户端向服务端发送数据请求; 所述服务端向所述客户端返回数据响应和所请求的数据; 所述客户端接收所述数据响应和所请求的数据并将所请求的数据存储在所述客户端缓存中; (2)如果初步判断所请求数据为客户端缓存和扩展缓存,则首先在所述客户端缓存查询数据,若没有或者数据被置为无效则向所述扩展缓存发送数据请求; 若所述扩展缓存有所请求的数据,则向所述客户端返回所请求的数据,所述客户端接收所请求的数据并在所述客户端缓存存储; 若所述扩展缓存没有所请求的数据,则向所述客户端发送没有所请求的数据的响应,所述客户端在接收所述服务端发送的没有所请求的数据的响应后,向服务端发送所述数据请求;所述服务端向所述客户端返回数据响应和所请求的数据;所述客户端接收所述数据响应和所请求的数据并将所请求的数据存储在所述客户端缓存和所述扩展缓存中; (3)如果初步判断所请求的数据为扩展缓存,则直接向所述扩展缓存所在的扩展缓存服务器发送数据请求; 若所述扩展缓存服务器上有所请求的数据,则向所述客户端返回所请求的数据; 若所述扩展缓存服务器上没有所请求的数据,则向所述客户端发送没有所请求的数据响应,所述客户端在接收没有所请求的数据响应后,向服务端发送数据请求;所述服务端向所述客户端返回数据响应和所请求的数据;所述客户端接收所述数据响应和所请求的数据并将数据存储在所述扩展缓存中; 其中,当所述客户端在向所述扩展缓存服务器发出数据请求时,如果所述客户端与所述扩展缓存服务器通信故障时,所述客户端将直接向所述服务端发出所述数据请求,所述服务端向所述客户端返回数据响应和所请求的数据,所述客户端接收所述数据响应和所请求的数据; 所述所请求的数据如果需要存储在所述客户端缓存,则将所述所请求的数据存储在所述客户端缓存上; 所述所请求的数据如果需要存储在指定的扩展缓存服务器上:若所述通信故障尚未恢复,则所述客户端放弃存储操作;若所述通信故障恢复,则所述客户端执行将所述所请求的数据存储到指定的扩展缓存服务器上。
6.根据权利要求5所述的系统,其特征在于: 在所述客户端向服务端发送数据请求之前,或者在所述客户端在向所述扩展缓存服务器发出数据请求之前:所述客户端先根据所请求的数据构建所述所请求的数据的关键字值。
7.根据权利要求1所述的系统,其特征在于:设置一个缓存预热设备,所述缓存预热设备包括数据接口调用频率统计模块和系统定期维护通知模块,所述数据接口调用频率统计模块按照数据接口的使用频率进行统计和排序,并在系统启动时将所述数据接口的使用频率统计和排序通知给所述系统的客户端和服务端;所述系统定期维护提醒模块用于设置定期维护的时间长度,并在一个时间长度结束时,将所述时间长度结束前的数据接口的使用频率统计和排序信息发通知给系统维护人员。
8.根据权利要求7所述的系统,其特征在于:在服务端设置数据推送模块,对于在所述系统的客户端缓存存储或在扩展缓存服务器的扩展缓存中存储的缓存数据,当所述缓存数据在所述系统的服务端对应的数据发生更新时,所述数据推送模块用于主动对所述扩展缓存服务器发起更新操作或通知客户端将已经发生更新的数据置为无效;所述数据推送模块还用于在系统启动时,根据数据接口调用频率统计模块的统计,将数据预装到所述扩展缓存服务器。
9.根据权利要求8所述的系统,其特征在于:所述数据接口调用频率统计模块将所述数据接口的使用频率按照从大到小的顺序进行排序,并将缓存数据按照所属数据接口依照下述原则进行缓存标记: (1)所述缓存数据所属数据接口的使用频率属于小于等于排序后的前10%的数据接口标记为V0V3,表示只在客户端缓存上进行缓存数据存储和读取; (2)所述缓存数据所属数据接口的使用频率属于大于所述排序后的前10%且小于等于排序后的前20%的数据接口标记为V1V3,表示在客户端缓存和扩展缓存上进行缓存数据存储,在发出数据请求时先在客户端缓存读取; (3)所述缓存数据所属数据接口的使用频率属于大于所述排序后的前20%的数据接口标记为V2V4,表示在扩展缓存上进行缓存数据存储和读取; 其中,V0、V1、V2、V3、V4为任意数据类型。
10.根据权利要求9所述的系统,其特征在于:在所述数据推送模块用于主动对所述扩展缓存服务器发起更新操作之前,或者所述数据推送模块在系统启动时,根据数据接口调用频率统计模块的统计,将数据预装到所述扩展缓存服务器之前,所述服务端先构建所推送数据的关键字值。
【文档编号】H04L29/08GK104202423SQ201410482172
【公开日】2014年12月10日 申请日期:2014年9月19日 优先权日:2014年9月19日
【发明者】王和, 邵利铎, 何栋, 王吉玲, 安然, 潘曦 申请人:中国人民财产保险股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1