一种Docker云平台下弹性缓存系统的制作方法

文档序号:9600940阅读:801来源:国知局
一种Docker云平台下弹性缓存系统的制作方法
【技术领域】
[0001] 本发明属于计算机应用技术领域,更准确地说本发明应用在云平台上,运用 Docker技术和缓存策略将CPU、内存、带宽等计算资源整合为具有弹性的缓存服务,提供给 用户。
【背景技术】
[0002] 云是由大量整合管理的计算资源和存储资源组成,通常包括提供计算能力的、提 供虚拟网络的、及提供大容量存储的服务器集群。由于来自用户的访问具有不确定性的流 量峰值,在流量较低时候,服务器平均利用率低下。在保证数据安全和服务可靠的基础上, 提高资源利用率,减少能源耗费,是云计算平台亟需解决的问题。因此,虚拟资源的弹性 分配对于提高资源利用率和降低运营成本具有现实意义。
[0003] 分布式缓存可以使对象与应用之间数据传输事件大大降低,是云平台提升应用性 能的一种重要手段。尤其对于数据密集型的Web应用,采用分布式缓存技术可以提升云平 台的性能。目前比较成熟、用户量比较大的分布式缓存系统有Amazon的ElastiCache和阿 里云的0CS,这两个系统以及大部分缓存系统都需要用户手动更改配置后才能实现集群的 弹性伸缩。若系统访问量突增,固定的缓存集群规模不能承受大流量访问,会造成系统访 问速度降低。因此,系统根据需求实时自动弹性伸缩,给用户带来极大的便利。然而,现有 的缓存系统大都采用传统虚拟化技术,虚拟机启动速度十分慢,远远达不到实时性要求,所 以,本发明采用Docker技术,实现云平台下的弹性缓存。

【发明内容】

[0004] 发明目的:针对现有技术中存在的问题,本发明实现具有集群状态监控(CPU使用 率、内存状态、网络状态等)功能的Docker集群管理平台,同时平台具有容器的启动与销毁 功能;每个用户可以分配一个独自的缓存集群,缓存集群根据用户配置自动创建并上线使 用;用户可以实时监测各个缓存集群运行时状态,包括缓存大小、每秒请求数、各容器状态, 缓存集群的规模可根据用户的实际使用情况动态变化;实现灾难检测与恢复机制。当一个 集群中某个节点出现异常而无法进行服务时,系统会根据节点类型不同做出相应的处理, 使集群恢复正常服务,确保了系统的高可用性;实现便于用户操作缓存数据的客户端,为提 高效率,客户端采用连接池技术,并对用户屏蔽了实现细节。
[0005] 技术方案:一种Docker云平台下弹性缓存系统,包括Webserver模块、Docker集 群管理模块、Docker宿主机集群、MySQL数据库、Etcd集群、Docker镜像仓库和客户端。
[0006]Webserver模块为系统核心,负责Docker容器的启动与删除,处理Redis集群弹性 伸缩请求与容灾方面请求,以及处理Client端各种请求,并为管理员和用户提供可视化界 面。Webserver使用JS0N作为数据交换格式。
[0007] 使用开源项目Swarm和etcd作为Docker集群管理的基础。Docker集群管理模 块通过Etcd集群,管理Docker宿主机集群,使用标准的Dcoker协议管理Docker宿主机集 群。启动时订阅相应目录,Docker宿主机定期将自身信息发布到同一目录。Docker集群管 理模块接收到订阅的信息后,根据接收的订阅信息更新宿主机列表及宿主机系统状态。同 时,Docker集群管理模块为Webserver模块提供服务,包括收集Docker宿主机中容器的信 息、新建或销毁容器、定时收集Docker宿主机系统状况(CPU负载、内存信息、带宽、I/O信 息)。
[0008] Docker宿主机集群:存储引擎选用Redis,基于开源项目Codis搭建Redis集群。 Docker宿主机集群有多个Redis集群构成。每个Redis集群对应一个DockerImage。在 DockerImage中,集成一个容器守护进程模块,以及不同类型的容器节点。在Docker宿主 机集群中,容器节点类型分为Redis模式、Proxy模式和Manager模式。根据Docker容器 节点类型的不同,启动相应的流程,主要包括启动过程管理、节点状态监控、弹性实现、节点 故障上报。
[0009] 在Docker云平台中,为了实现多租户隔离,每个用户都有一个独占的RediS集群。 Client端与集群中Proxy节点可以直接通信。为了确保高可用性,用户在配置Redis集群 时可以选择建立Redis Slave节点,基于Redis的主从复制功能,slave节点具有与master 节点相同数据。当Redis Master节点失效时,实时地将slave节点提升为master节点。
[0010] Client端通过TCP/IP协议与Redis集群通信,通过HTTP协议与Webserver通信。 Client端的功能是验证用户身份、更新Docker宿主机集群的Proxy列表、提供存取缓存接 口。由于Redis集群Proxy节点不固定,为了确保Client端及时更新Proxy列表,采用连 接池技术管理Client与Proxy的所有连接。
[0011] MySQL数据库:用于存储Webserver模块的数据。
[0012] Ectd集群:用于整个系统的服务发现平台。
[0013] Docker镜像仓库:为Docker宿主机提供Docker Image下载服务。
[0014] WebServer模块是系统管理中枢,具有扩展能力,采用无状态设计方法,可以根据 需求横向扩展。Webserver模块启动后,在Etcd集群中/Webserver目录发布自身信息。当 其他模块向Webserver模块发请求时,首先从该目录下随机获取某个WebServer服务地 址,此处使用了etcd的服务发现功能。根据请求对象,Webserver细分为用户服务模块、管 理员服务模块、Client服务模块、Docker集群通信模块。
[0015] 用户服务模块:用户服务模块主要以B/S架构为用户提供服务,服务包括:Redis 缓存集群初始化、Redis缓存集群监控。用户通过Web界面配置所需集群,配置项包括初始 Redis服务组个数、弹性高阈值、弹性低阈值、是否保证高可用,选择完毕后将信息提交。系 统分析处理配置信息后,启动所需的节点容器,五分钟左右Redis集群便可成功创建并将 集群信息保存到MySQL数据库。创建集群后用户通过Web页面监视集群状态,包括集群ID 值、集群是否成功启动、缓存大小、每分钟处理请求数、命中率、Redis节点个数、Proxy节点 个数。
[0016] 管理员服务模块:管理员服务模块主要以B/S架构为管理员提供服务,服务主要 为整个系统的监控。管理员登录后,以网页形式提供整个Docker宿主机集群状态,信息包 括:宿主机数目、失连宿主机信息、宿主机系统信息(如IP地址、CPU使用率、内存使用率、 带宽)、所有Redis集群的信息(如集群ID、Redis节点信息、Proxy节点信息等)。
[0017] Client服务模块:Client服务模块主要处理来自Client的HTTP请求,这些请求 包括用户验证、获得Proxy列表。对于用户验证,Client提交的用户名、密码、集群ID信息 验证通过后,返回Proxy地址列表。此外还需处理Client每隔一段时间会发出获得Proxy 地址列表的请求。
[0018]Docker集群通信模块:Docker集群通信模块通过Docker管理API(单独部署即为 SwarmAPI,其他部署为相应平台提供的API)实现Redis集群初始化模块、弹性伸缩模块、 容灾模块。
[0019] 容器守护进程模块集成在DockerImage中,当容器启动时,容器守护进程模块首 先启动。容器启动模式根据节点类型不同,分成Redis模式、Proxy模式、Manager模式。 其中Manager节点负责整个集群的管理并将集群相关信息保存在etcd集群中。Proxy是 Client连接Redis的代理服务,它本身实现了Redis协议,表现与一个原生Redis服务相 同。Redis作为存储引擎分为master、slave两种节点,slave复制master中数据,保证高 可用性。这两种节点组成了一个ServerGroup。采用哈希槽的方式对数据进行分片,数据 根据CRC32 (key) % 1024分布在1024个slot中,slot是一个虚拟的概念,数据实际存储在 多个ServerGroup中,对于ServerGroup来说没有任何分布式逻辑在其中,每个Server Group负责一部分key-value数据。
[0020] 为了实现弹性缓存功能,弹性伸缩模块负责处理Redis集群中Manager节点的弹 性伸缩请求,请求类型包括:增加Redis服务组、删除Redis服务组、增加Proxy节点、删除 Proxy节点。
[0021] 弹性云缓存系统一个重要特性就是缓存集群规模会随着负载的变化而相应伸缩。 随着应用读取缓存速度的增加,Redis缓存集群所需要的内存、CPU、带宽资源也会相应增 加,这时,需要通过增加Redis节点或Proxy节点,提升Redis集群承载能力。相反,当用 户的应用读取缓存的速度减少时,Redis集群所需要的资源也会相应减少,此时可以减少 Redis节点或Proxy节点,提升整个弹性缓存系统的利用率。
[0022] 为了实现集群的弹性伸缩功能,本发明使用基于动态三次指数平滑预测算法的集 群弹性伸缩实现。
[0023] 在Redis集群中,Manager节点定时收集所有Proxy、Redis节点的负载信息。Proxy 的负载信息包括内存使用率MUS_、CPU使用率Cus_、带宽使用率Nus_。Redis节点的信息只 包括内存使用率Mus_。
[0024] 对于Redis节点,Manager会将所有Redis节点的MusagfJj(据,整合在一起形成 Redis节点的整体负载。当系统长时间运行后,可能会造成各节点负载情况分布不均,因此, 整合时需要分析这些Redis节点负载信息的离散度,采用公式(1)计算Redis节点负载信 息为:
[0026] 其中i表示Redis节点的序号,如果〇多20,说明负载分布不均,此时需要执行 Rebalance操作,重新分配这些Redis节点负载。]\^表示节点i的内存使用率,S卩已用内存 除以总共内存。μ表示Reids节点的整体负载,并保存到Redis负载的时间序列{Rt,t= 1,2,...,η}中。时间序列用固定长度队列保存在Manager节点的内存中。
[0027] 对于Proxy节点,Client端采用轮询方式与Proxy进行通信,使得每个Proxy节 点的负载情况相差不大。所有Proxy节点的整体负载Pall可利用公式(2)计算得到:
[0029] 同样,Pall表示Proxy节点的整体负载,并保存至Proxy负载的时间序列{Pt,t= 1,2,...,11},11表
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1