掌桥专利:专业的专利平台
掌桥专利
首页

一种服务器及服务器缓存持久化的方法

文献发布时间:2023-06-19 09:54:18


一种服务器及服务器缓存持久化的方法

技术领域

本申请涉及数据同步技术领域,特别地,涉及一种服务器及服务器缓存持久化的方法。

背景技术

Redis(Remote Dictionary Server:远程字典服务)是高性能的开源的数据库,有着非常高的读写性能,可以将存储在内存的键值对数据持久化到硬盘,用户可以根据实际使用场景来配置不同的持久化方式,常见的Redis持久化方式包括RDB和AOF。

在一些服务器缓存持久化的实现中,通常服务器上会部署多个Redis,每个Redis都支持RDB持久化,每个RDB持久化时最多会消耗和Redis本身相同大小的内存、以及占用1核CPU资源。

然而,服务器在长时间运行过程中会出现多个Redis在同一时间点同时进行持久化的情况,使得服务器需要预留所有Redis所需最大内存的和、以及占用和Redis个数相同的CPU核资源,造成了服务器资源浪费。

发明内容

为了解决服务器出现多个Redis同时持久化、占用过多内存、浪费CPU计算资源的问题,本申请提供了一种服务器及服务器缓存持久化的方法。

本申请的实施例是这样实现的:

本申请实施例的第一方面提供服务器,包括:第一控制器,被配置为:在第一Redis达到持久化条件时,检测是否存在正在进行持久化的第二Redis;如果存在所述第二Redis正在进行持久化,则将所述第一Redis加入持久化等待队列,所述第一Redis在所述持久化等待队列中按照排序依次执行持久化;否则,控制所述第一Redis进行持久化。

本申请实施例的第二方面提供一种服务器缓存持久化的方法,所述方法包括:在第一Redis达到持久化条件时,检测是否存在正在进行持久化的第二Redis;如果存在所述第二Redis正在进行持久化,则将所述第一Redis加入持久化等待队列,所述第一Redis在所述持久化等待队列中按照排序依次执行持久化;否则,控制所述第一Redis进行持久化。

本申请实施例有益效果在于:通过在Redis达到持久化条件时检测是否有已经持久化的Redis,可以实现避免不同Redis同时进行持久化;进一步通过将待持久化Redis加入等待队列,可以实现Redis的持久化有序进行,以实现服务器上Redis集中管理、实现服务器同一个时间点最多只有一个Redis进行持久化、只需预留和最大Redis相同内存、以及1核CPU资源。

附图说明

具体为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是根据本申请的一些实施例所示的一种包括可实现缓存持久化服务器的系统100示意图;

图2是根据本申请的一些实施例所示的一种示例性计算设备200的示意图;

图3示出了本申请一实施例服务器部署Redis的示意图;

图4示出了本申请一实施例服务器Redis应用架构的示意图;

图5示出了本申请一实施例服务器实现缓存持久化的流程示意图;

图6示出了本申请一实施例服务器判定Redis达到持久化条件时流程示意图;

图7示出了本申请一实施例服务器实现服务器缓存持久化的逻辑示意图。

具体实施方式

现在将描述某些示例性实施方案,以从整体上理解本文所公开的装置和方法的结构、功能、制造和用途的原理。这些实施方案的一个或多个示例已在附图中示出。本领域的普通技术人员将会理解,在本文中具体描述并示出于附图中的装置和方法为非限制性的示例性实施方案,并且本发明的多个实施方案的范围仅由权利要求书限定。结合一个示例性实施方案示出或描述的特征可与其他实施方案的特征进行组合。这种修改和变型旨在包括在本发明的范围之内。

本说明书通篇提及的″多个实施例″、″一些实施例″、″一个实施例″或″实施例″等,意味着结合该实施例描述的具体特征、结构或特性包括在至少一个实施例中。因此,本说明书通篇出现的短语″在多个实施例中″、″在一些实施例中″、″在至少另一个实施例中″或″在实施例中″等并不一定都指相同的实施例。此外,在一个或多个实施例中,具体特征、结构或特性可以任何合适的方式进行组合。因此,在无限制的情形下,结合一个实施例示出或描述的具体特征、结构或特性可全部或部分地与一个或多个其他实施例的特征、结构或特性进行组合。这种修改和变型旨在包括在本发明的范围之内。

本申请中使用了流程图用来说明根据本申请的一些实施例的系统所执行的操作。应当明确理解,流程图的操作可以不按顺序来精确地执行。相反,这些操作可以以相反的顺序或同时执行。而且,可以将一个或多个其他操作添加到流程图。一个或多个操作可以从流程图中移除。

图1是根据本申请的一些实施例所示的一种包括可实现缓存持久化服务器的系统100示意图。

包括可实现缓存持久化服务器的系统100是一个包含服务器可实现缓存持久化服务的系统。包括可实现缓存持久化服务器的系统100可以包括一个服务器110、至少一个存储设备120、至少一个网络130,服务器110可以包括一个控制器112。

在一些实施例中,服务器110可以是一个单独的服务器或者一个服务器群组。所述服务器群可以是集中式的或分布式的(例如,服务器110可以是一个分布式的系统)。在一些实施例中,服务器110可以是本地的或远程的。例如,服务器110可以通过网络130访问存储在存储设备120中的数据。服务器110可以直接连接到存储设备120访问存储数据。在一些实施例中,服务器110可以在一个云平台上实现。所述云平台可以包括私有云、公共云、混合云、社区云、分布云、多重云等或上述举例的任意组合。在一些实施例中,服务器110可以在与本申请图2所示的计算设备上实现,包括计算设备200中的一个或多个部件。

在一些实施例中,服务器110可以包括一个控制器112。控制器112可以处理与服务请求相关的信息和/或数据以执行本申请描述的一个或多个功能。例如,控制器112可以通过网络130发送数据至存储设备120,用于更新存储在其中的数据。在一些实施例中,控制器112可以包括一个或多个处理器。控制器112可以包括一个或多个硬件处理器,例如中央处理器(CPU)、专用集成电路(ASIC)、专用指令集处理器(ASIP)、图像处理器(GPU)、物理运算处理器(PPU)、数字信号处理器(DSP)、现场可编辑门阵列(FPGA)、可编辑逻辑器件(PLD)、控制器、微控制器单元、精简指令集计算机(RISC)、微处理器等或上述举例的任意组合。

存储设备120可以存储数据和/或指令。在一些实施例中,存储设备120可以存储数据。在一些实施例中,存储设备120可以存储供服务器110执行或使用的数据和/或指令,服务器110可以通过执行或使用所述数据和/或指令以实现本申请描述的实施例方法。在一些实施例中,存储设备120可以包括大容量存储器、可移动存储器、挥发性读写存储器、只读存储器(ROM)等或上述举例的任意组合。在一些实施例中,存储设备120可以在一个云平台上实现。例如所述云平台可以包括私有云、公共云、混合云、社区云、分布云、多重云等或上述举例的任意组合。

在一些实施例中,存储设备120可以与网络130连接以实现与包括可实现缓存持久化服务器的系统100中的一个或多个部件之间的通信。包括可实现缓存持久化服务器的系统100的一个或多个部件可以通过网络130访问存储在存储设备120中的数据或指令。在一些实施例中,存储设备120可以直接与包括可实现缓存持久化服务器的系统100的一个或多个部件连接或通信。在一些实施例中,存储设备120可以是服务器110的一部分。

网络130可以促进信息和/或数据的交换。在一些实施例中,包括可实现缓存持久化服务器的系统100中的一个或多个部件可以通过网络130向包括可实现缓存持久化服务器的系统100中的其他部件发送信息和/或数据。例如,服务器110可以通过网络130获取/得到请求。在一些实施例中,网络130可以是有线网络或无线网络中的任意一种,或其组合。在一些实施例中,网络130可以包括一个或多个网络接入点。例如,网络130可能包括有线或无线网络接入点,如基站和/或互联网交换点130-1、130-2等等。通过接入点,包括可实现缓存持久化服务器的系统100的一个或多个部件可能连接到网络130以交换数据和/或信息。

图2是根据本申请的一些实施例所示的一种示例性计算设备200的示意图。服务器110、存储设备120可以在计算设备200上实现。例如,控制器112可以在计算设备200上实现并被配置为实现本申请中所披露的功能。

计算设备200可以包括用来实现本申请所描述的系统的任意部件。例如,控制器112可以在计算设备200上通过其硬件、软件程序、固件或其组合实现。为了方便起见图中仅绘制了一台计算机,但是本申请所描述的与包括可实现缓存持久化服务器的系统100相关的计算功能可以以分布的方式、由一组相似的平台所实施,以分散系统的处理负荷。

计算设备200可以包括与网络连接的通信端口250,用于实现数据通信。计算设备200可以包括一个处理器220,可以以一个或多个处理器的形式执行程序指令。示例性的电脑平台可以包括一个内部总线210、不同形式的程序存储器和数据存储器包括,例如,硬盘270、和只读存储器(ROM)230或随机存储器(RAM)240,用于存储由计算机处理和/或传输的各种各样的数据文件。示例性的计算设备可以包括存储在只读存储器230、随机存储器240和/或其他类型的非暂时性存储介质中的由处理器220执行的程序指令。本申请的方法和/或流程可以以程序指令的方式实现。计算设备200也包括输入/输出部件260,用于支持电脑与其他部件之间的输入/输出。计算设备200也可以通过网络通讯接收本披露中的程序和数据。

为理解方便,图2中仅示例性绘制了一个处理器。然而,需要注意的是,本申请中的计算设备200可以包括多个处理器,因此本申请中描述的由一个处理器实现的操作和/或方法也可以共同地或独立地由多个处理器实现。例如,如果在本申请中,计算设备200的处理器执行步骤1和步骤2,应当理解的是,步骤1和步骤2也可以由计算设备200的两个不同的处理器共同地或独立地执行。

图3示出了本申请一实施例服务器部署Redis的示意图。

在一些实施例中,本申请提供的服务器提供了一种Redis持久化集中管理系统agent,负责管理、配置服务器上所有已部署Redis的持久化、并且对服务器已部署Redis持久化进程进行监听和探测,使服务器在同一时间点最多只有一个Redis在进行持久化,服务器Redis部署结构如图所示。

例如,服务器1部署2个Redis以及Redis持久化集中管理系统agent、服务器2部署3个Redis以及Redis持久化集中管理系统agent,所述服务器1、服务器2可位于同一机房、也可位于不同的机房。

在一些实施例中,服务器上会部署多个Redis实例,例如部署3个Redis,其内存大小分别为5G、10G、20G,则服务器的空闲内存需要预留所有Redis最大内存之和即35G内存、以及3核CPU计算资源。

图4示出了本申请一实施例服务器Redis应用架构的示意图。

在一些实施例中,机房一和机房二为两个数据中心,可同时承担业务。在一些实施例中,机房一可承担60~70%的业务,机房二可承担40%~30%的业务。机房二可对机房一进行redis数据单向同步,当机房一挂掉后,可将机房一的业务及时切换到机房二,避免了机房一挂掉后,机房一上的业务中断。

在一些实施例中,机房一挂掉后,将给机房二带来较大的负担,为避免机房一挂掉,机房一通常设置有一个以上的redis节点。例如,机房一设置有两个redis节点:第一节点和第二节点,R表示读数据,W表示写数据。两个redis节点工作在主从模式,其中一个redis节点作为主节点,另一个redis节点作为从节点,主节点设置为源redis,源redis可进行主从切换,即从节点可提升为主节点,从而成为源redis。

又例如,第一节点可作为Redis-M,即主节点,第二节点可作为第一节点的从节点,即Redis-S;或第二节点可作为主节点,第一节点作为第二节点的从节点。机房一的业务可读写机房一的redis节点。当机房一的Redis-M有数据写入时,Redis-M会将写入的数据发送给Redis-S,使Redis-S与Redis-M同步。

在一些实施例中,可默认设置第一节点为源redis,承担业务。当第一节点挂掉后,进行主从切换,使第二节点成为源redis,承担业务,当第一节点上线后,第一节点作为从节点;当第二节点挂掉后,再次进行主从切换,使第一节点成为源redis,第二节点上线后,第二节点作为从节点;机房二也可设置有两个redis节点,其中一个redis节点作为机房二的Redis-M,另一个redis节点作为机房二的Redis-S。机房二的业务可写机房一的redis,或者机房二本身无写操作,读机房二的redis,这时就需要同步单元将机房一的redis数据实时同步到机房二的redis节点。

图5示出了本申请一实施例服务器实现缓存持久化的流程示意图。

本申请提供了一种服务器缓存持久化的方法,具体包括以下步骤。

在步骤501中,在第一Redis达到持久化条件时,检测是否存在正在进行持久化的第二Redis。

本申请还提供了一种服务器,所述服务器可实现本申请提供的服务器缓存持久化方法,所述服务器包括第一控制器,所述第一控制器被配置为在第一Redis达到持久化条件时,检测是否存在正在进行持久化的第二Redis。

在一些实施例中,第一控制器在第一Redis达到持久化条件时,检测是否存在正在进行持久化的第二Redis,具体可实施为第一控制器在第一Redis位于持久化等待队列的头部位置时,检测是否存在正在进行持久化的第二Redis。

例如,第一控制器判断持久化等待队列中是否有Redis在等待持久化,如果存在第一Redis在队列中并处于队列的头部位置时,第一控制器判定服务器此时刻是否有其它Redis,即第二Redis正在进行持久化;如果此时刻服务器存在第二Redis正在持久化,则第一控制器对所述第一Redis不作处理;如果此时刻服务器不存在第二Redis正在持久化,则第一控制器将控制所述第一Redis进行持久化,即将持久化等待队列中头部位置的第一Redis进行持久化,并将其从持久化等待队列中剔除。

在一些实施例中,第一控制器在第一Redis达到持久化条件时,检测是否存在正在进行持久化的第二Redis,具体可实施为第一控制器判定第一Redis在指定时间内有指定数量的键值发生变化时,检测是否存在正在进行持久化的第二Redis。

Redis持久化策略被配置为是在指定的时间长度内至少有指定数量的键值key发生变化,则第一Redis开始持久化。例如,服务器需要每小时做一次持久化,则第一控制器可可配置第一Redis在每次持久化结束开始的3600秒内有至少有一个键值key发生变化,则第一控制器将控制第一Redis进行持久化。

图6示出了本申请一实施例服务器判定Redis达到持久化条件时流程示意图。

在步骤601中,实时获取服务器已部署Redis、及其持久化策略,预留与最大Redis相同的内存空间及1核CPU计算资源。

在一些实施例中,第一控制器判定第一Redis在指定时间内有指定数量的键值发生变化,具体包括所述第一控制器实时获取服务器已部署Redis、及其持久化策略,预留与最大Redis相同的内存空间及1核CPU计算资源。

例如,第一控制器可实时获取服务器已部署的Redis及其配置的持久化策略;当服务器有新的Redis被部署启动后,第一控制器所控制的agent将第一时间自动探测发现服务器新部署的Redis及其持久化策略。

在一些实施例中,第一控制器实时获取服务器已部署Redis、及其持久化策略,具体包括所述第一控制器:判定第一Redis是否已配置了持久化策略;如果否,则为所述第一Redis配置默认持久化策略。

例如,用户可以通过服务器的agent为新部署的第一Redis配置持久化策略;如果用户由于各种原因没有通过agent对所述新部署的第一Redis配置持久化策略,则第一控制器将为所述第一Redis配置默认持久化策略。服务器在配置默认持久化策略的整个过程无需重启agent,agent可以实现自动发现新部署Redis、并为其配置默认持久化策略。

在步骤602中,根据第一Redis末次持久化时间点、键值变化数量、及其持久化策略,判定所述第一Redis在是否在指定时间内有指定数量的键值发生变化。

例如,第一控制器实时获取第一Redis末次持久化时间点,即最后一次进行持久化的时间点,以及从未次持久化时间点至当前时刻键值key的变化数量,以判定第一Redis是否达到持久化条件。

在一些实施例中,在第一Redis未达到持久化条件时,第一控制器根据第三Redis末次持久化时间点、键值变化数量、及其持久化策略,判定所述第三Redis是否在指定时间内有指定数量的键值发生变化,以确定所述第三Redis是否达到持久化条件。

如果上述实施例中,第一Redis未达到持久化条件,没有在指定时间内有至少指定数量的键值发生变化,则第一控制器继续检测其它服务器已部署的Rd ies,即本申请所述的第三Redis。

继续参考图5,在步骤502中,如果存在所述第二Redis正在进行持久化,则将所述第一Redis加入持久化等待队列,所述第一Redis在所述持久化等待队列中按照排序依次执行持久化;否则,控制所述第一Redis进行持久化。

需要说明的是,每个服务器上部署Redis持久化集中管理系统agent。Redis本身不再配置持久化策略,持久化策略配置都由第一控制器控制agent进行。

例如,当有第一Redis达到持久化条件时,并且已有其它Redis正在进行持久化,则将第一Redis加入到持久化等待队列,等待正在进行持久化的第二Redis持久化完成后,再控制第一Redis进行持久化,这样可以使得服务器在任意时间点最多只有一个Redis正在进行持久化,可以节约节约、CPU计算资源。

在一些实施例中,Redis通过RDB形式实现持久化,可以最大化Redis的性能。

例如,父进程fork(派生)出一个子进程进行持久化,父进程可以正常业务处理,并且RDB文件比较紧凑,较AOF文件小,在大数据集的情况下恢复速度比AOF形式要快,因此通常选用RDB进行持久化。

又例如,Redis调用fork()指令派生出一个子进程进行持久化,同时拥有父进程和子进程;子进程将数据集写入到一个临时RDB文件中;当子进程完成对新RDB文件的写入时,Redis用新RDB文件替换原来的RDB文件,并删除旧的RDB文件。

在一些实施例中,Redis在RDB持久化的时候派生出一个新进程来,新进程会占用1核的CPU资源,采用操作系统的Copy-On-Write策略,如果父进程的内存没被修改,子进程与父进程共享Page;如果父进程的Page被修改,则复制一份改动前的内容给新进程;

在系统极度繁忙时,如果父进程的所有Page在子进程写RDB过程中都被修改过了,就需要两倍内存。所以需要给Redis预留一倍的内存,例如Redis的数据占用5G内存,则服务器需要预留5G的空闲内存。

图7示出了本申请一实施例服务器实现服务器缓存持久化的逻辑示意图。

在一些实施例中,第一控制器实时获取持久化等待队列头部数据;

如果第一控制器可以在所述持久化等待队列取到数据,即持久化等待队列中有第一Redis在队列中并处于队列的头部位置等待持久化,则第一控制器判定服务器此时刻是否有其它Redis,即第二Redis正在进行持久化;

如果第一控制器不能在所述持久化等待队列取到数据,即持久化等待队列中没有Redis等待持久化,则第一控制器实时获取服务器已部署的所有Redis、及其配置的持久化策略;

第一控制器实时获取各Redis,例如第一Redis的末次持久化时间点,即最后一次进行持久化的时间点,以及从未次持久化时间点至当前时刻键值key的变化数量;

第一控制器判定第一Redis是否已配置了持久化策略;如果否,则为第一Redis配置默认持久化策略;如果已配置持久化策略,则判定第一Redis是否达到持久化条件;

如果第一Redis未达到持久化条件时,则第一控制器判定另外的Redis,即第三Redis是否达到持久化条件;

如果第一Redis到持久化条件时,则第一控制器判定服务器此时刻是否有其它Redis,即第二Redis正在进行持久化;

如果此时刻服务器存在第二Redis正在持久化,且第一Redis不存在于持久化等待队列中时,则第一控制器将所述第一Redis加入持久化等待队列,所述第一Redis在所述持久化等待队列中按照排序依次执行持久化;

如果此时刻服务器不存在第二Redis正在持久化,则第一控制器将控制所述第一Redis进行持久化;

若第一Redis持久化之前存在于持久化等待队列中,则将其从持久化等待队列中剔除。

本申请的有益效果在于通过在Redis达到持久化条件时检测是否有已经持久化的Redis,可以实现避免不同Redis同时进行持久化;进一步通过将待持久化Redis加入等待队列,可以实现Redis的持久化有序进行,以实现服务器上Redis集中管理、实现服务器同一个时间点最多只有一个Redis进行持久化、只需预留和最大Redis相同内存、以及1核CPU资源。

此外,本领域技术人员可以理解,本申请的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本申请的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为″数据块″、″模块″、″引擎″、″单元″、″组件″或″系统″。此外,本申请的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。

计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、RF、或类似介质,或任何上述介质的组合。

本申请各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB.NET、Python等,常规程序化编程语言如C语言、Visual Basic、Fortran 2003、Perl、COBOL 2002、PHP、ABAP,动态编程语言如Python、Ruby和Groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或服务器上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN)、或连接至外部计算机(例如通过因特网)、或在云计算环境中、或作为服务使用如软件即服务(SaaS)。

此外,除非权利要求中明确说明,本申请所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本申请流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本申请实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。

同理,应当注意的是,为了简化本申请披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本申请实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本申请对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。

针对本申请引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本申请作为参考。与本申请内容不一致或产生冲突的申请历史文件除外,对本申请权利要求最广范围有限制的文件(当前或之后附加于本申请中的)也除外。需要说明的是,如果本申请附属材料中的描述、定义、和/或术语的使用与本申请所述内容有不一致或冲突的地方,以本申请的描述、定义和/或术语的使用为准。

相关技术
  • 一种服务器及服务器缓存持久化的方法
  • 缓存方法、缓存边缘服务器、缓存核心服务器和缓存系统
技术分类

06120112339448