分布式缓存管理技术的研究与实现

2018-05-14 11:09李映
科学与技术 2018年18期

李映

摘要:本文对基于Redis的分布式缓存技术进行了详细分析,并阐述了基于Redis的分布式缓存管理技术CacheManager。CacheManager实现了分布式缓存的自动接入部署、弹性伸缩扩容与全面监控等各项管理运维功能,有效地提升了系统运维人员的维护效率,加强了分布式缓存的可用性与稳定性。

关键词:分布式系统;高并发;Redis;缓存集群

一、引言

随着电子商务在移动互联网时代的迅速发展,各种的秒杀类、分享类、团购类等热度高、并发量大的营销活动对电子商务后台支撑系统的缓存集群也带来了极大压力,缓存集群往往因为运营人员缺乏有效的监控和管理,在用户流量高峰下容易出现宕机,从而导致整个支撑系统全面瘫痪。

二、Redis分布式缓存与管理技术

Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,其提供多种语言的API,因为其出众的性能在众多的移动互联网企业后台支撑系统中被应用于构建系统的缓存模块。

(一)Redis分布式缓存

Redis 集群是一个分布式、容错的 Redis 实现,Redis 集群中不存在中心节点或者代理节点,集群的主要设计目标是达到线性可扩展性,下面是Redis缓存集群的几种配置方式。

1.主从模式(master/slaver)

主从模式的一个作用是备份数据,当一个缓存节点损坏(指不可恢复的硬件损坏)时,数据因为有备份,可以方便恢复。另一个作用是负载均衡,查询操作就可以通過查询从节点来完成。主从模式的缺点是master节点宕机以后,剩下的slave不能成为master,Redis缓存就不能对外提供写服务了。

2.哨兵模式(Sentinel)

在主从模式中,当master节点宕机以后,slave节点不能主动选举一个master节点出来,Sentinel模式就安排一个或多个哨兵(sentinel)来监控此类情况,当哨兵发现master节点宕机后就会从slave中重新选举一个master。Sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,Sentinel模式就不能满足需求了。

3.集束模式(Cluster)

Cluster模式的出现是为了解决单机Redis缓存容量有限的问题,将Redis的数据根据一定的规则分配到多台机器。Cluster模式是Sentinel模式和主从模式的组合方案,通过Cluster可以实现主从和master重选功能,因为Redis的数据是根据一定规则分配到不同机器的,当数据量过大时可以新增机器进行扩容,所以Cluster模式适合数据量巨大的场景。

(二)基于Redis的分布式缓存管理技术(CacheManager)

本文研究的Redis分布式缓存管理技术CacheManager实现了从各个缓存节点申请接入到最终部署上线以及整个缓存集群监控、自动弹性扩容的全方位功能。

CacheManager主要可分为缓存管理模块与缓存监控模块两大部分:

1.分布式缓存管理

分布式缓存管理技术支持对Redis缓存集群Sentinel和Cluster模式的管理。

(1)自动接入部署

如果新的缓存服务器需纳入CacheManager的管理范围,运维人员可通过CacheManager的管理界面操作向管理服务发送缓存申请,申请内容包含需节点部署的缓存服务器地址、缓存内存大小、集群模式等信息。管理服务会与申请服务器进行通信并收集相关资源信息,如果符合管理规范,则自动对缓存服务器进行部署并纳入管理范围。

(2)统一配置管理

运维管理人员可以通过CacheManager的管理界面对缓存集群进行统一的配置管理,比如运维人员可通过界面化的操作对集群中的缓存应用实例进行结构调整,对集群中的实例和节点的动态上下线处理、数据迁移、节点调整等操作。

(3)弹性自动扩容

CacheManager支持运维人员提前根据系统的资源配置(集群的机器数量、硬件配置条件、Redis集群类型等)结合并发需求制定缓存集群的扩容策略。扩容策略在CacheManager被设置好后即自动生效,一旦缓存集群出现资源不足的情况,将根据设定策略自动弹性扩容。运维人员也可以实时介入,调整扩容策略并且一键设置生效。

CacheManager针对Redis缓存集群的扩容策略主要有垂直伸缩扩容与水平伸缩扩容两种。

● 垂直伸缩扩容策略

此类策扩容略的实现原理是通过调整每个Redis缓存实例的可用内存量做到垂直拓展。这种策略优点是适用于所有类型的Redis集群,缺点是受限于Redis缓存所在服务器的物理内存资源大小。

● 水平伸缩扩容策略

CacheManager仅支持Sentinel和Cluster两种Redis缓存集群的水平伸缩扩容策略。

针对Sentinel类型的缓存集群,当服务器物理内存不够用或者运维人员在切换故障机器时,CacheManager通过进行在线切换主从关系和实例所属机器实现扩容。

针对Cluster类型的缓存集群,CacheManager平台通过进行动态加减缓存实例并在线迁移数据来实现伸缩扩容。此扩容方案的伸缩性最灵活,但是因为数据迁移需要重新分区,并导入到目标节点中,计算耗时比较长,扩容的速度最慢。

2.分布式缓存监控

CacheManager的缓存集群监控模块按照监控对象的不同可以分成四部分:

(1)缓存服务器监控

缓存服务器的监控是指定时统计各个缓存服务器的性能状况,主要监测指标是缓存服务器的内存使用率,CPU使用率,网络流量消耗消耗情况,服务器系统的负载情况等,监控目的是确保缓存集群中的服务器本身运行良好。

(2)缓存实例监控

缓存应用拓扑监控是指以缓存集群中的各个缓存实例为监测对象,实时查看各个缓存实例的运行状态,监测范围包含缓存实例运行的情况,内存使用情况,当前对象数,当前连接数,缓存的命中率,角色关系等命中率,慢查询数,慢查询的详细信息等。

(3)缓存命令监控

缓存命令监控是指监测集群中的各个单个缓存实例,统计各实例中各个命令的分布情况、执行情况、以及命令执行趋势等信息。

(4)监控预警

对以上三个监控模块监测到的信息进行阈值告警,达到预警值采用短信等方式通知系统运维人员。告警阈值可实时进行设置,告警的信息点可以进行动态添加。

三、总结

针对Redis分布式缓存的管理技术CacheManager具备自动接入部署、弹性伸缩扩容与全面监控管理等各项功能,大幅提升了运维人员的系统维护效率,有力加强了缓存集群与整个支撑系统的可用性与稳定性。

参考文献

[1]王剑冰. 一种高并发分布式缓存服务架构[J]. 科学技术创新,2016(31):172-172.

[2]邱祝文. 基于redis的分布式缓存系统架构研究[J]. 网络安全技术与应用,2014(10).

[3]周智. Redis分布式缓存实现与解析[J]. 信息通信,2018,No.186(06):29-30.

[4]戚伟强. 分布式缓存模式研究及其在金融系统中的应用[D]. 浙江大学,2008.

[5]孙赫. 大规模协同计算平台下缓存层的研究与优化[D]. 西安电子科技大学,2015.

[6]徐朝辉,张兰英,刘现民. 分布式缓存系统[J]. 计算机系统应用.

(作者单位:中国移动通信集团江苏有限公司)