分布式缓存系统HOT KEY关键技术研究

2018-05-16 12:52陈小强
科学与技术 2018年15期
关键词:云计算数据库

陈小强

摘要:分布式缓存作为支撑海量数据处理的关键技术方案,近年来受到了广泛关注和应用。本文从分布式缓存系统的工程实践出发,研究了分布式缓存系统处理Hot Key的关键技术,提出了一种分布式缓存系统优化设计,通过动态识别、自动重分布等设计,解决了Hot Key问题,同时提高了分布式缓存系统的性能、稳定性和适用性。实验验证和商用环境实际效果证明,相比传统分布式缓存系统,采用上述技术优化后分布式缓存系统提升是有效的。

关键词:数据库;分布式缓存;NoSQL;云计算;Hot Key;热点数据

1分布式缓存系统Hot Key优化设计及关键技术

分布式缓存[1]基于键-值型(Key-Value)[2]数据模型,是业界目前最广泛的一种NoSQL[3],其最大的优势在于对高并发的支持和它的可扩展性。分布式缓存的代表有开源的Redis[4]、memcached[5],亚马逊的dynamo[6],淘宝的Tair等。这些分布式缓存系统使用的数据分布算法主要有一致性Hash[7]或基于Range分区两种,但是只能保证数据分布的均衡,不能保证分布式缓存系统运行中实际数据访问的均衡,即存在Hot Key,常见场景有两类:

1)新闻APP中的热点新闻内容

2)电子商城秒杀系统中,最吸引用户眼球,性价比最高的商品信息

Hot Key导致主要问题是缓存雪崩:大量的客户端,大量的读请求集中同时访问分布式缓存系统的某个服务节点,导致服务节点响应时延逐渐加大,直至不能对外提供服务,即缓存雪崩。针对上述痛点,本文提出了一种优化的分布式缓存系统设计,创新的功能有动态识别Hot Key,识别出的Hot Key在分布式缓存系统中自动重分布,用更多节点、更多线程承担Hot Key的读取请求,这样系统地解决了Hot Key带来的缓存雪崩。下面介绍这些关键技术的原理和实现。

1.1动态识别

为了动态统计Key的访问情况,在描述Key的结构中增加访问时间和访问频率两个成员,动态识别Hot Key流程如下:

1)Client向分布式缓存系统的服务节点发起一个读请求

2)服务节点在索引中查询Key

3)Key没有查询到,直接给Client回响应,流程结束

4)Key查询到了,将Key的访问计数加1,更新访问时间

5)如果访问时间中统计周期发生变化(统计周期缺省是分钟),并且访问计数小于配置的最大QPS(每秒最大访问量),则给Client回响应,否则执行下一步

6)识别出一个Hot Key,将Key访问计数清零,开始一个新的统计周期

7)Hot Key开始自动重分布

8)给Client回响应,响应中包含Hot Key最新的分布节点信息以及过期时间,后续Client访问该Key时,如果Key没有过期则需要根据最新的分布节点信息重新计算服务节点

1.2自动重分布

动态识别出Hot Key后,必须进一步将Hot Key自动重新分布,分布到更多节点上,并分配更多的线程负责Hot Key的读取,为此在描述Key的结构中增加节点和线程信息:[< Node1,Thread1>......]

Node:Hot Key分布的节点。

Thread:节点上负责这个Hot key的读取线程数。

举个例子,一个拥有5个节点,数据是3副本的分布式缓存系统中,对一个非Hot Key来说其分布信息:[< Node1,1>,],为了节省内存和磁盘空间,非Hot Key的分布信息被省略,分布式缓存系统会进行默认处理。如果一个Key被识别为Hot Key,其分布信息形式:[< Node1,2>,]即Hot Key从原先分布在3个节点,重分布到5个节点,即分布在集群所有节点上,每个节点上有两个线程,数据有两个副本,即该Hot Key现在有10个副本,有10个线程负责读取。需要注意的是重分布时数据需要跨节点复制,网络传输会加大的响应时延。

2总结

本文从实际工程问题和需求出发,针对分布式缓存系统处理Hot Key的关键技术进行研究。通过动态识别、自动重分布等设计,提高了分布式缓存系统的性能和稳定性,能更好地适应Hot Key场景。通过和传统分布式缓存系统对比实验验证,以及商用生产环境的实际使用效果,都证明了采用上述关键技术后的分布式缓存系统提升是有效的。优化后的分布式缓存系统在动态识别Hot Key时QPS阈值等是固定配置好的,不满足业务场景的多样化,还有进一步的优化空间,可以引入人工智能确定QPS阈值,动态识别向智能识别演进是我们下一步的工作方向。

参考文献

[1]于君泽 曹洪伟 邱硕等. 深入分布式缓存从原理到实践[M].北京:机械工业出版社,2018

[2]马文龙,朱妤晴,蒋德钧等. Key-Value型NoSQL本地存储系统研究[J]. 计算机学报,2018,41(8):1722-1751.

[3]NoSQL. Wikipedia. 2017. https://en.wikipedia.org/wiki/NoSQL

[4]姚经纬,杨福军. Redis分布式缓存技术在Hadoop平台上的应用[J]. 计算机技术与发展,2017,27(6):146-150.

[5]安仲奇,杜昊,李强等.基于高性能I/O技术的Memcached优化研究[J].计算机研究与发展,2018,55(4):864-874.

[6]Decandia G,Hastorun D,Jampani M,et al. Dynamo:amazon's highly available key-value store[J]. ACM SIGOPS Operating Systems Review,2007,41(6):205-220.

[7]Robert Sedgewick.《算法》英文版第4版[M].人民邮电出版社,2012,ISBN:9787115271464.

(作者单位:中興通讯股份有限公司)

猜你喜欢
云计算数据库
数据库
数据库
志愿服务与“互联网+”结合模式探究
云计算与虚拟化
基于云计算的移动学习平台的设计
实验云:理论教学与实验教学深度融合的助推器
云计算中的存储虚拟化技术应用
数据库
数据库
数据库