一种使用软件架构扩展缓存的方法

文档序号:7814863阅读:192来源:国知局
一种使用软件架构扩展缓存的方法
【专利摘要】本发明提供了一种使用软件架构扩展缓存的方法,所述方法包括下列步骤:S100设计并实现缓存的使用规则;所述缓存包括客户端缓存和通过在客户端与服务端之间部署多组服务器作为扩展缓存的扩展缓存服务器;其中,每组服务器由主服务器和多台备用服务器构成;所述使用规则为判断用客户端缓存和/或扩展缓存进行存储的方法;S200设计并实现缓存服务器上用于存储数据的数据库表;所述缓存包括客户端缓存和扩展缓存;S300设计并实现扩展缓存后数据读写规则;S400设计并实现缓存管理策略;S500设计并实现缓存优化策略。本发明提供一种将分布式缓存引入企业应用架构的方法,所述方法能够提升原有系统的性能及稳定性。
【专利说明】一种使用软件架构扩展缓存的方法

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

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


【发明内容】

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

【专利附图】

【附图说明】
[0080]图1为使用软件架构扩展缓存的方法步骤示意图;
[0081]图2为缓存使用流程示意图;
[0082]图3为采用分布式扩展缓存后的系统架构图;
[0083]图4为使用哨兵程序的系统架构图。

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