分布式缓存系统及缓存集群的管理方法与流程

文档序号:12828883阅读:267来源:国知局
分布式缓存系统及缓存集群的管理方法与流程

本发明涉及通信技术领域,尤其涉及一种分布式缓存系统及缓存集群的管理方法。



背景技术:

随着各公司web站点访问量的上升,web站点的性能作为影响用户体验的关键因素,遇到越来越多的挑战,单纯的扩容机器已经不能满足需求。缓存作为提高数据访问性能的重要技术,在web站点中的应用越来越广泛。然而,随着各公司缓存技术使用的推广,缓存集群的自动化分配、可靠性保证、高效管理变得越来越重要。

memcached是一种分布式内存对象缓存系统,用于动态网页应用以减轻数据库负载,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站的访问速度。现有的memcached缓存系统中,包括memcached客户端和服务器,一个服务器上有多个缓存节点,每个缓存节点为独立的memcached缓存进程,多个缓存节点组成缓存集群,当有缓存业务申请时,通过管理员手动启动服务器上的缓存进程,memcached客户端中预先在配置文件中配置并存储缓存集群以及缓存集群中的缓存节点列表,当memcached客户端接收到缓存访问请求时,由memcached客户端根据一致性哈希算法将该缓存访问请求分发到其中一个缓存节点上。

现有的缓存系统存在以下缺陷:服务器上的缓存进程需要通过管理员手动启动,在某一缓存进程宕掉时,也需要通过管理员手动重启恢复,很不方便,在缓存集群中的服务器比较多的情况下,这种缺点更为突出。



技术实现要素:

本发明提供一种分布式缓存系统及缓存集群的管理方法,以解决现有的缓存系统中缓存进程需要人工启动以及在缓存进程宕掉时需要人工重启的问 题。

第一方面,本发明提供一种分布式缓存系统,包括:多个服务器和缓存web管理器;其中,

所述缓存web管理器用于:分配缓存集群,为缓存集群中的缓存节点分配标识并存储,并在分配缓存集群时向所述服务器发送启动命令;

所述服务器用于:接收所述缓存web管理器发送的所述启动命令,根据所述启动命令启动所述服务器上的缓存进程,从所述缓存web管理器获取所述服务器上的所有缓存节点的标识,检测所有缓存节点的存活状态,若检测到一缓存节点没有存活,立即重新启动所述服务器上的缓存进程。

进一步地,还包括:配置中心和客户端,所述配置中心用于:

在所述缓存web管理器分配缓存集群或者更新缓存集群中的缓存节点后,将缓存集群的配置信息存储在所述配置中心的内存中,所述配置信息包括:配置生成或更改的时间戳、集群标识id、所述集群id对应的缓存集群的缓存节点列表和所述客户端请求所述配置信息的周期;

接收所述客户端周期性发送的请求所述配置信息的命令,读取所述内存,返回所述配置信息给所述客户端;

所述客户端用于:向所述配置中心周期性发送请求所述配置信息的命令,接收所述配置中心返回的所述配置信息。

进一步地,所述缓存web管理器还用于:

在更新缓存集群中的缓存节点之前,更改所述客户端请求所述配置信息的周期。

进一步地,所述客户端具体用于:

首次向所述配置中心发送请求所述配置信息的命令时,若请求失败,则从所述客户端的本地配置文件中读取缓存节点列表,再发起与读取的缓存节点列表中的缓存节点的连接;

接着按照预设周期向所述配置中心发送请求所述配置信息的命令,接收到所述配置中心返回的所述配置信息后,若检测到所述配置信息中的配置生成或更改的时间戳发生变化,则更新所述客户端一致性哈希环中的缓存节点列表,并将所述配置信息更新到所述客户端的本地配置文件中,发起与更新后的缓存节点列表中的缓存节点的连接。

进一步地,所述缓存web管理器还用于:

检测到一服务器宕机后,将发生宕机的服务器上的所有缓存节点迁移至其它空闲服务器。

进一步地,所述缓存web管理器还用于:

检测缓存集群中每个缓存节点的状态,在确定缓存节点状态异常时,发起报警。

第二方面,本发明提供一种缓存集群的管理方法,包括:

缓存web管理器分配缓存集群,为缓存集群中的缓存节点分配标识并存储,并在分配缓存集群时向服务器发送启动命令;

所述服务器接收到所述缓存web管理器发送的所述启动命令后,根据所述启动命令启动所述服务器上的缓存进程;

所述服务器从所述缓存web管理器获取所述服务器上的所有缓存节点的标识,检测所有缓存节点的存活状态,若检测到一缓存节点没有存活,立即重新启动所述服务器上的缓存进程。

进一步地,还包括:

所述缓存web管理器更新缓存集群中的缓存节点;

配置中心在所述缓存web管理器分配缓存集群或者更新缓存集群中的缓存节点后,将缓存集群的配置信息存储在所述配置中心的内存中,所述配置信息包括:配置生成或更改的时间戳、集群标识id、所述集群id对应的缓存集群的缓存节点列表和客户端请求所述配置信息的周期;

所述客户端向所述配置中心周期性发送请求所述配置信息的命令;

所述配置中心接收到所述请求所述配置信息的命令后,读取所述内存,返回所述配置信息给所述客户端;

所述客户端接收所述配置中心返回的所述配置信息。

进一步地,所述缓存web管理器在更新缓存集群中的缓存节点之前,还包括:

所述缓存web管理器更改所述客户端请求所述配置信息的周期。

进一步地,所述客户端向所述配置中心周期性发送请求所述配置信息的命令,包括:

所述客户端首次向所述配置中心发送请求所述配置信息的命令时,若请 求失败,则从所述客户端的本地配置文件中读取缓存节点列表,再发起与读取的缓存节点列表中的缓存节点的连接;

接着所述客户端按照预设周期向所述配置中心发送请求所述配置信息的命令;

所述客户端接收所述配置中心返回的所述配置信息之后,还包括:

检测所述配置信息中的配置生成或更改的时间戳是否发生变化,若是,则更新所述客户端一致性哈希环中的缓存节点列表,并将所述配置信息更新到所述客户端的本地配置文件中,发起与更新后的缓存节点列表中的缓存节点的连接。

进一步地,还包括:

所述缓存web管理器检测到一服务器宕机后,将发生宕机的服务器上的所有缓存节点迁移至其它空闲服务器。

进一步地,还包括:

所述缓存web管理器检测缓存集群中每个缓存节点的状态,在确定缓存节点状态异常时,发起报警。

本发明提供的分布式缓存系统及缓存集群的管理方法,通过缓存web管理器分配缓存集群,为缓存集群中的缓存节点分配标识并存储,并在分配缓存集群时向服务器发送启动命令,服务器在接收到启动命令后,启动服务器上的缓存进程,这样可实现缓存集群的分配更加便捷,缓存进程的启动不需要人工操作。且通过服务器从缓存web管理器获取该服务器上的所有缓存节点的标识,检测所有缓存节点的存活状态,若检测到一缓存节点没有存活,立即重新启动该服务器上的缓存进程,进而可实现某一缓存进程宕掉时,可自行恢复,也不需要人工操作,更加方便。

附图说明

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

图1为本发明分布式缓存系统实施例一的结构示意图;

图2为本发明分布式缓存系统实施例二的结构示意图;

图3为本发明缓存集群的管理方法实施例一的流程图;

图4为本发明缓存集群的管理方法实施例二的流程图;

图5为本发明缓存集群的管理方法中动态扩容的处理过程示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明分布式缓存系统实施例一的结构示意图,如图1所示,本实施例的系统可以包括:多个服务器11和缓存web管理器12,其中,缓存web管理器12用于:分配缓存集群,为缓存集群中的缓存节点分配标识并存储,并在分配缓存集群时向服务器11发送启动命令。服务器11用于:接收缓存web管理器12发送的启动命令,根据启动命令启动服务器11上的缓存进程,从缓存web管理器12获取服务器11上的所有缓存节点的标识,检测所有缓存节点的存活状态,若检测到一缓存节点没有存活,立即重新启动服务器11上的缓存进程。具体地,系统中还包括客户端,服务器11启动了自身的缓存进程后,通过客户端接收缓存访问请求,并根据缓存访问请求执行相应的缓存服务,如根据一致性哈希算法将该缓存访问请求分发到其中一个缓存节点上。

进一步地,缓存web管理器12还用于:检测到一服务器宕机后,将发生宕机的服务器上的所有缓存节点迁移至其它空闲服务器,这样可以解决在某一服务器宕机后所带来的问题,实现缓存集群的容灾。

进一步地,缓存web管理器还用于:检测缓存集群中每个缓存节点的状态,在确定缓存节点状态异常时,发起报警。具体地,确定缓存节点状态异常,包括以下三种情况:

一、若检测到缓存节点拒绝连接时间超过预设时间,则确定缓存节点状态异常;或者,

二、周期性向缓存节点发送get命令,连续超时时间大于预设时间,或者连续超时次数大于预设次数,则确定缓存节点状态异常;或者,

三、周期性向缓存节点发送stats命令,统计缓存节点状态信息,若命中率低于预设阈值,则确定缓存节点状态异常。

具体地,缓存web管理器12可以使管理员能够自动化分配、部署及管理缓存集群,还可使业务人员能够查看缓存集群详情、缓存节点的状态监控及能够对缓存集群进行报警控制,进而可提供灵活的监控报警,以便管理员做出相应的处理。

本实施例提供的分布式缓存系统,通过缓存web管理器分配缓存集群,为缓存集群中的缓存节点分配标识并存储,并在分配缓存集群时向服务器发送启动命令,服务器在接收到启动命令后,启动服务器上的缓存进程,这样可实现缓存集群的分配更加便捷,缓存进程的启动不需要人工操作。且通过服务器从缓存web管理器获取该服务器上的所有缓存节点的标识,检测所有缓存节点的存活状态,若检测到一缓存节点没有存活,立即重新启动该服务器上的缓存进程,进而可实现某一缓存进程宕掉时,可自行恢复,也不需要人工操作,更加方便。

图2为本发明分布式缓存系统实施例二的结构示意图,如图2所示,本实施例的系统在图1所示系统的基础上,还可以包括:配置中心13和客户端14,配置中心13用于:在缓存web管理器12分配缓存集群或者更新缓存集群中的缓存节点后,将缓存集群的配置信息存储在配置中心13的内存中,该内存如为redis,配置信息包括:配置生成或更改的时间戳、集群标识(identity,简称:id)、集群id对应的缓存集群的缓存节点列表和客户端请求配置信息的周期,接收客户端14周期性发送的请求配置信息的命令,读取内存,返回配置信息给客户端14。

客户端14用于:向配置中心13周期性发送请求配置信息的命令,接收配置中心13返回的配置信息。进一步地,缓存web管理器12还用于:在更新缓存集群中的缓存节点之前,更改客户端请求配置信息的周期。

其中,客户端14具体用于:首次向配置中心发送请求配置信息的命令时,若请求失败,则从客户端的本地配置文件中读取缓存节点列表,再发起与读取的缓存节点列表中的缓存节点的连接。接着按照预设周期向配置中心发送 请求配置信息的命令,接收到配置中心返回的配置信息后,若检测到配置信息中的配置生成或更改的时间戳发生变化,则更新客户端一致性哈希环中的缓存节点列表,并将配置信息更新到客户端的本地配置文件中,发起与更新后的缓存节点列表中的缓存节点的连接。其中,客户端的本地配置文件是缓存集群相关配置的说明,如包括数据中心的ip端口号、集群id、key前缀、与服务器建立网络连接的参数、请求最大超时时间、序列化方式等设置。

本实施例中,通过在分布式缓存系统中设置配置中心和客户端,当用户通过缓存web管理器对缓存集群进行分配或更新缓存集群中的缓存节点后,更新缓存集群中的缓存节点例如添加至少一个缓存节点,都通知到配置中心,配置中心存储分配后的缓存集群的配置信息,再通过客户端周期性地从配置中心请求不断更新的缓存集群的配置信息,发起与更新的缓存集群的配置信息中包含的缓存节点的连接,可实现业务程序运行时缓存集群的动态扩容,解决了现有的缓存系统在应用程序启动运行后,可使用的缓存服务内存不可以动态扩容的问题。

进一步地,缓存web管理器还包括缓存申请模块、数据中心管理模块和物理机管理模块,其中,缓存申请模块将原来的oa沟通、邮件申请、邮件审批流程标准化,如处理缓存申请、方便系统管理员查看缓存申请及查看审批,数据中心管理模块添加或删除数据中心,物理机管理模块添加或删除物理机,数据中心管理模块、物理机管理模块方便缓存系统管理员对所有缓存资源统筹规划。

需要说明的是,缓存集群扩容时,不同客户端拉取到新的配置信息的时间不同,短时间内配置可能会不一致,为了降低缓存配置不一致带来的风险,扩容之前,首先需要调整配置拉取间隔,将其缩减到最短,即就是缓存web管理器在更新缓存集群中的缓存节点之前,更改客户端请求配置信息的周期。另外,在集群扩容时,每次只扩展一个节点,客户端稳定运行一段时间后再扩展下一个节点。因为成倍数量的节点扩展,可能会导致客户端一致性哈希环上所有缓存节点重新分布,缓存内存命中率几乎降为零。

本实施例中,进一步地,缓存web管理器12还用于:检测到一服务器宕机后,将发生宕机的服务器上的所有缓存节点迁移至其它空闲服务器。这样可以解决在某一服务器宕机后所带来的问题,实现缓存集群的容灾。

进一步地,缓存web管理器还用于:检测缓存集群中每个缓存节点的状态,在确定缓存节点状态异常时,发起报警。

图3为本发明缓存集群的管理方法实施例一的流程图,如图3所示,本实施例的方法可以包括:

s101、缓存web管理器分配缓存集群,为缓存集群中的缓存节点分配标识并存储,并在分配缓存集群时向服务器发送启动命令。

具体地,用户在缓存web管理器上提交缓存申请,缓存web管理器确定集群id,数据中心名称、缓存规格等参数。缓存系统管理员选择与机房最近的数据中心,例如以8个节点为单位分配缓存集群,并为每个缓存节点分配一个标识。缓存系统管理员提交分配配置,缓存web管理器会调用zookeeper服务,发送启动命令到服务器,由服务器启动服务器上的缓存进程。

s102、服务器接收到缓存web管理器发送的启动命令后,根据启动命令启动服务器上的缓存进程。

s103、服务器从缓存web管理器获取服务器上的所有缓存节点的标识,检测所有缓存节点的存活状态,若检测到一缓存节点没有存活,立即重新启动服务器上的缓存进程。

其中,服务器启动了自身的缓存进程后,通过客户端接收缓存访问请求,并根据缓存访问请求执行相应的缓存服务,如根据一致性哈希算法将该缓存访问请求分发到其中一个缓存节点上。

进一步地,还可以包括:缓存web管理器检测到一服务器宕机后,将发生宕机的服务器上的所有缓存节点迁移至其它空闲服务器,这样可以解决在某一服务器宕机后所带来的问题,实现缓存集群的容灾。

进一步地,还可以包括:缓存web管理器检测缓存集群中每个缓存节点的状态,在确定缓存节点状态异常时,发起报警。具体地,确定缓存节点状态异常,包括以下三种情况:

一、若检测到缓存节点拒绝连接时间超过预设时间,则确定缓存节点状态异常;或者,

二、周期性向缓存节点发送get命令,连续超时时间大于预设时间,或者连续超时次数大于预设次数,则确定缓存节点状态异常;或者,

三、周期性向缓存节点发送stats命令,统计缓存节点状态信息,若命中 率低于预设阈值,则确定缓存节点状态异常。

具体地,缓存web管理器可以使管理员能够自动化分配、部署及管理缓存集群,还可使业务人员能够查看缓存集群详情、缓存节点的状态监控及能够对缓存集群进行报警控制,进而可提供灵活的监控报警,以便管理员做出相应的处理。

本实施例提供的缓存集群的管理方法,通过缓存web管理器分配缓存集群,为缓存集群中的缓存节点分配标识并存储,并在分配缓存集群时向服务器发送启动命令,服务器在接收到启动命令后,启动服务器上的缓存进程,这样可实现缓存集群的分配更加便捷,缓存进程的启动不需要人工操作。且通过服务器从缓存web管理器获取该服务器上的所有缓存节点的标识,检测所有缓存节点的存活状态,若检测到一缓存节点没有存活,立即重新启动该服务器上的缓存进程,进而可实现某一缓存进程宕掉时,可自行恢复,也不需要人工操作,更加方便。

图4为本发明缓存集群的管理方法实施例二的流程图,如图4所示,本实施例的方法在图3所示实施例的基础上,还可以包括:

s201、缓存web管理器更改客户端请求配置信息的周期。

s202、缓存web管理器更新缓存集群中的缓存节点。

s203、配置中心在缓存web管理器分配缓存集群或者更新缓存集群中的缓存节点后,将缓存集群的配置信息存储在配置中心的内存中,配置信息包括:配置生成或更改的时间戳、集群标识id、集群id对应的缓存集群的缓存节点列表和客户端请求配置信息的周期。

s204、客户端向配置中心周期性发送请求配置信息的命令。

具体地,客户端首次向配置中心发送请求配置信息的命令时,若请求失败,则从客户端的本地配置文件中读取缓存节点列表,再发起与读取的缓存节点列表中的缓存节点的连接。

接着客户端按照预设周期向配置中心发送请求配置信息的命令。

s205、配置中心接收到请求配置信息的命令后,读取内存,返回配置信息给客户端。

s206、客户端接收配置中心返回的配置信息。

进一步地,客户端接收配置中心返回的配置信息之后,还包括:

检测配置信息中的配置生成或更改的时间戳是否发生变化,若是,则更新客户端一致性哈希环中的缓存节点列表,并将配置信息更新到客户端的本地配置文件中,发起与更新后的缓存节点列表中的缓存节点的连接。

进一步地,还可以包括:缓存web管理器检测到一服务器宕机后,将发生宕机的服务器上的所有缓存节点迁移至其它空闲服务器,这样可以解决在某一服务器宕机后所带来的问题,实现缓存集群的容灾。

进一步地,还可以包括:缓存web管理器检测缓存集群中每个缓存节点的状态,在确定缓存节点状态异常时,发起报警。

本实施例中,通过在分布式缓存系统中设置配置中心和客户端,当用户通过缓存web管理器对缓存集群进行分配或更新缓存集群中的缓存节点后,更新缓存集群中的缓存节点例如添加至少一个缓存节点,都通知到配置中心,配置中心存储分配后的缓存集群的配置信息,再通过客户端周期性地从配置中心请求不断更新的缓存集群的配置信息,发起与更新的缓存集群的配置信息中包含的缓存节点的连接,可实现业务程序运行时缓存集群的动态扩容,解决了现有的缓存系统在应用程序启动运行后,可使用的缓存服务内存不可以动态扩容的问题。

图5为本发明缓存集群的管理方法中动态扩容的处理过程示意图,如图5所示,动态扩容的处理过程包括:

s301、管理员通过缓存web管理器更改要扩容的缓存集群配置信息的拉取间隔,也就是更改客户端请求配置信息的周期,并更新到redis中。

s302、客户端向配置中心周期性发送请求配置信息的命令。

即就是客户端周期性向配置中心拉取新的配置信息。

s303、配置中心从redis读取新的配置,返回给客户端新的请求配置信息的周期。

s304、管理员通过缓存web管理器,对缓存集群进行扩容,并更新配置信息到redis。

s305、缓存web管理器同时向服务器发送命令,启动新分配的缓存节点进程。

s306、客户端按照新的周期周期性向配置中心发送请求配置信息的命令,配置中心从redis读取新的配置信息,返回给客户端新的缓存集群的配置信 息,客户端更新一致性hash环上的缓存节点列表。

s307、客户端向新添加的缓存节点发起连接。

如图5中缓存集群中原有的缓存节点为memcached#1-memcached#8一共8个缓存节点,新添加的缓存节点为memcached#9-memcached#16。

需要说明的是,缓存集群扩容时,不同客户端拉取到新的配置信息的时间不同,短时间内配置可能会不一致,为了降低缓存配置不一致带来的风险,扩容之前,首先需要调整配置拉取间隔,将其缩减到最短,即就是缓存web管理器在更新缓存集群中的缓存节点之前,更改客户端请求配置信息的周期。另外,在集群扩容时,每次只扩展一个节点,客户端稳定运行一段时间后再扩展下一个节点。因为成倍数量的节点扩展,可能会导致客户端一致性哈希环上所有缓存节点重新分布,缓存内存命中率几乎降为零。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1