缓存健康度检测方法及装置的制造方法
【技术领域】
[0001] 本发明涉及计算机领域,尤其是涉及一种缓存健康度检测方法及装置。
【背景技术】
[0002] 分布式缓存在当今互联网中有着广泛的运用。常见的分布式缓存,如:Redis, MemcacheJair等,在对于并发查询压力较大的应用场景,分布式缓存发挥了极其重要的作 用。但是,在一些对缓存一致性要求特别高的场合,如:用户在支付宝的账务流水交易记录 等场景中,如果缓存的数据与实际不一致,会导致用户从缓存中返回的查询数据不完整或 不准确,从而引起用户的疑惑或用户投诉等。
[0003] 目前,通常在更新缓存和数据库时,仅仅从保存缓存和数据库的源头保证数据的 一致性来保证两者更新完全一致。相应的,当缓存操作失败,采用数据库对应的本地事务回 滚来解决缓存与数据库一致性的问题。然而,该种方式在出现不可预见因素时,无法保证缓 存与数据库的数据一致性。例如:缓存服务器意外重启或者缓存数据被意外踢出等情况,都 会使得查询请求从缓存中得到的数据不完整或与实际数据存在一定差异,此种差异的出现 对缓存一致性要求很高的应用场合,是无法接受的。
[0004] 然而,现有技术无法对缓存健康度做有效地实时监控,进而当出现类似上述不可 预见因素发生时,无法及时解决发现问题,导致整个系统出错概率很高,严重影响用户使 用。
【发明内容】
[0005] 本发明的目的之一在于提供一种缓存健康度检测方法及装置。
[0006] 为实现上述发明目的之一,本发明一实施方式提供了一种缓存健康度检测方法, 其包括:
[0007] 每一预设周期,若服务器未处于满负载状态,则在服务器的访问请求中抽取至少 一个作为抽样请求;
[0008] 将抽样请求通过异步线程查询服务器的数据库和缓存中的数据,得到相对应的原 始数据和缓存数据;
[0009] 比对上述缓存数据和原始数据,并根据比对结果判断缓存健康度。
[0010] 作为本发明一实施方式的进一步改进,所述"每一预设周期,若服务器未处于满负 载状态,则在服务器的访问请求中抽取至少一个作为抽样请求"具体包括:
[0011] 每一预设周期,根据所述服务器的负载获取对应所述负载的抽样比例,并根据所 述抽样比例以及访问的请求数量计算抽样请求的数量;其中,服务器负载越高,抽样比例越 低;服务器负载越低,抽样比例越高。
[0012] 作为本发明一实施方式的进一步改进,抽样请求的数量=所述抽样比例*访问请 求的数量;
[0013] 所述抽样比例=1-服务器当前负载百分比,若所述服务器当前负载百分比大于 或等于1,则表示所述服务器处于满负载状态,不进行抽样。
[0014] 作为本发明一实施方式的进一步改进,所述服务器的当前负载百分比=R1*CPU 负载+R2*内存负载+R3*I0负载+R4*网络负载,其中,R1、R2、R3、R4为相应参数的权重值, 所述 R1>R2>R3。
[0015] 作为本发明一实施方式的进一步改进,所述CPU负载为:服务器当前的CPU负载/ (服务器的CPU核数*单核CPU的负载基准值);
[0016] 所述内存负载为:服务器当前的内存负载/内存的负载基准值;
[0017] 所述10负载为:服务器当前的10负载/10的负载基准值;
[0018] 所述网络负载为:服务器当前的网络负载/网络的负载基准值。
[0019] 作为本发明一实施方式的进一步改进,所述方法还包括:
[0020] 若所述缓存数据和所述原始数据相同,则表示缓存健康度良好;
[0021] 若所述缓存数据和所述原始数据不相同,则依据所述原始数据更新所述缓存数 据。
[0022] 为实现上述发明目的之一,本发明一实施方式提供了一种缓存健康度检测装置, 其包括:
[0023] 抽样模块,用于在每一预设周期,若服务器未处于满负载状态,则在服务器的访问 请求中抽取至少一个作为抽样请求;
[0024] 查询模块,用于将抽样请求通过异步线程查询服务器的数据库和缓存中的数据, 得到相对应的原始数据和缓存数据;
[0025] 比对模块,用于比对上述缓存数据和原始数据,并根据比对结果判断缓存健康度。
[0026] 作为本发明一实施方式的进一步改进,所述抽样模块用于:每一预设周期,根据所 述服务器的负载获取对应所述负载的抽样比例,并根据所述抽样比例以及访问请求的数量 计算抽样请求的数量;其中,服务器负载越高,抽样比例越低;服务器负载越低,抽样比例 越1?。
[0027] 作为本发明一实施方式的进一步改进,抽样请求的数量=所述抽样比例*访问请 求的数量;
[0028] 所述抽样比例=1-服务器当前负载百分比,若所述服务器当前负载百分比大于 或等于1,则表示所述服务器处于满负载状态,不进行抽样。
[0029] 作为本发明一实施方式的进一步改进,所述服务器的当前负载百分比=R1*CPU 负载+R2*内存负载+R3*I0负载+R4*网络负载,其中,R1、R2、R3、R4为相应参数的权重值, 所述 R1>R2>R3。
[0030] 作为本发明一实施方式的进一步改进,所述CPU负载为:服务器当前的CPU负载/ (服务器的CPU核数*单核CPU的负载基准值);
[0031] 所述内存负载为:服务器当前的内存负载/内存的负载基准值;
[0032] 所述10负载为:服务器当前的10负载/10的负载基准值;
[0033] 所述网络负载为:服务器当前的网络负载/网络的负载基准值。
[0034] 作为本发明一实施方式的进一步改进,所述比对模块还用于判断所述缓存数据和 所述原始数据是否相同,
[0035] 若所述缓存数据和所述原始数据相同,则表示缓存健康度良好;
[0036] 若所述缓存数据和所述原始数据不相同,则依据所述原始数据更新所述缓存数 据。
[0037] 与现有技术相比,本发明的有益效果是:本发明的缓存健康度检测方法及装置,在 高并发查询请求且不改变系统整体负载的前提下,可实时的进行抽样,并根据抽样请求获 取数据库和缓存中的数据,以判断缓存的健康度,如此,即可在缓存和数据库中数据不一致 时,即时发现问题。
【附图说明】
[0038] 图1是本发明一实施方式中缓存健康度检测方法的流程图;
[0039] 图2是本发明一实施方式中影响服务器当前负载百分比的各种主要的参数列表;
[0040] 图3是本发明一实施方式的缓存健康度检测装置的模块图。
【具体实施方式】
[0041] 以下将结合附图所示的各实施方式对本发明进行详细描述。但这些实施方式并不 限制本发明,本领域的普通技术人员根据这些实施方式所轻易做出的结构、方法、或功能上 的变换均包含在本发明的保护范围内。
[0042] 一般地,缓存是将数据以key-value的形式存储在相对较高访问速度存储介质的 Hash表中,以便于在查询数据时,只需要从存储介质中根据Key获取对应的Value。存储于 缓存中的数据具有访问速度快、数据易丢失等特点。
[0043] 所述健康度指缓存中的数据与实际数据库的数据一致性的比例。当缓存中的数据 与实际数据库的数据完全一致时,则健康度为百分之百,相应的,所述缓存的健康度是衡量 缓存数据有效性的重要指标。
[0044] 如图1所示,在本发明一实施方式中,所述缓存健康度检测方法包括:
[0045] 每一预设周期,若服务器未处于满负载状态,则在服务器的访问请求中抽取至少 一个作为抽样请求。
[0046] 优选的,可动态获取服务器当前负载下合理的抽样比例。在服务器集群环境下,每 台服务器的负载和内存占用都是各不相同的,因此,需要一种集群动态分配策略将抽样请 求按照负载的不同分布到不同的服务器上。如:若某一服务器当前负载很高,则这台服务器 当前可能不会分配到抽样请求,而当前负载较低的服务器就会分配到较多的抽样请求,以 实现对服务器资源充分利用,且这种基于负载的抽样不会影响到服务器的整体性能,实现 资源的最大化利用和功能最大化。
[0047] 相应的,在本发明一实施方式中,可动态地获取服务器当前合理的抽样比例,并根 据抽样比例随机抽取访问请求中特定的请求作为健康度抽样请求。
[0048] 具体的,每一预设周期,根据所述服务器的负载获取对应所述负载的抽样比例,并 根据所述抽样比例以及访问请求的数量计算抽样请求的数量;其中,服务器负载越高,抽样 比例越低;服务器负载越低,抽样比例越高。
[0049] 进一步的,抽样请求的数量=所述抽样比例*访问请求的数量;
[0050] 所述抽样比例=1-服务器当前负载百分比