湖州腾讯云Redis混合存储版如何解决缓存的三座大山?

2020-07-07 18:42:09

  在互联网和移动互联网两波浪潮的推动下,存储技术有了飞速发展。移动互联网用户在过去十年增长了10倍,用户的增长带动了数据量的指数级增长,因为激烈的市场竞争,企业和用户对应用程序的响应性能要求越来越高,在完美应对庞大的用户规模和海量数据集的同时保证优秀的产品体验,是数据库面临的挑战。

  在机械硬盘普及的时代,企业需要通过缓存技术加速数据的访问,在SSD存储介质普及后,企业需要缓存技术支撑高并发和大吞吐,通过引入分布式缓存方案,提升应用程序性能,消除数据库热点。

  但是缓存技术的引入增加了业务架构的复杂度,降低了开发效率,同时还面临着缓存一致性、缓存击穿、缓存雪崩等挑战。腾讯云数据库团队推出的Redis混合存储产品,融合缓存和存储的统一架构,彻底解决了缓存难题,帮助企业的研发人员聚焦业务逻辑,提升生产效率。

  二、缓存的三座大山

  1. 缓存一致性

  缓存一致性是指业务在引入分布式缓存系统后,业务对数据的更新除了要更新存储以外还需要同时更新缓存,对两个系统进行数据更新就要先解决分布式系统中的隔离性和原子性难题。

  目前大多数业务在引入分布式缓存后都是通过牺牲小概率的一致性来保障业务性能,因为要在业务层严格保障数据的一致性,代价非常高,业务引入分布式缓存主要是为了解决性能问题,所以在性能和一致性面前,通常选择牺牲小概率的一致性来保障业务性能。

u=3634340218,2505771942&fm=26&gp=0.jpg

  2. 缓存击穿

  缓存击穿是指查询请求没有在缓存层命中而将查询透传到存储DB的问题,当大量的请求发生缓存击穿时,将给存储DB带来极大的访问压力,甚至导致DB过载拒绝服务。空数据查询(黑客攻击)和缓存污染(网络爬虫)是常见的引发缓存击穿的原因。

  什么是空数据查询?空数据查询通常指攻击者伪造大量不存在的数据进行访问(比如不存在的商品信息、用户信息)。

  缓存污染通常指在遍历数据等情况下冷数据把热数据驱逐出内存,导致缓存了大量冷数据而热数据被驱逐。缓存污染的场景我们目前还没有发现较好的解决方案,但是在空数据查询问题上我们可以改造业务,通过以下方式防止缓存击穿:

  通过bloomfilter记录key是否存在,从而避免无效Key的查询;

  在Redis缓存不存在的Key,从而避免无效Key的查询。

  3. 缓存雪崩

  缓存雪崩是指由于大量的热数据设置了相同或接近的过期时间,导致缓存在某一时刻密集失效,大量请求全部转发到DB,或者是某个冷数据瞬间涌入大量访问,这些查询在缓存MISS后,并发的将请求透传到DB,DB瞬时压力过载从而拒绝服务。

  目前常见的预防缓存雪崩的解决方案,主要是通过对key的TTL时间加随机数,打散key的淘汰时间来尽量规避,但是不能彻底规避。

  腾讯云Redis混合产品介绍

  1. 产品简介

  腾讯云Redis混合存储版基于腾讯游戏线上运营多年的Tendis引擎打造。数据自动降冷,落盘压缩,最大可降低成本85%,100% 兼容Redis协议,可助力企业大幅提升生产效率,降低运营成本。

  2. 产品特性

  (1)研发效率+++

  a. 混合存储解决方案

  同样的三层架构,业务仅需要访问统一的Redis接口,让企业重新聚焦业务逻辑;

  一套系统支撑,避免维护多套系统。

  b. 解决缓存三大难题

  一致性:通过内聚的设计,保障缓存和存储一致性

  缓存击穿:All Keys In Memory设计,避免缓存击穿;

  缓存持久:动态TTL设计,热数据即持久缓存。

  c. 100%兼容Redis协议

  100%兼容Redis协议,业务可顺畅接入。

  d. 超高读写性能

  高写入:为Redis定制的Rocksdb存储引擎,支持100万并发写入;

  高读取:只能热数据缓存方案,提供1000万并发读取。

  (2)运营成本-85%

  a. 数据自动降冷

  全量数据落盘,热数据缓存内存,相对全内存方案成本-85%;

  数据自动降冷,成本可控。

  b. 精准缓存

  动态TTL淘汰方案,精准缓存热数据,有效避免缓存雪崩;

  可控的冷数据缓存策略,快速解决缓存污染问题。

  c. 数据压缩

  Rocksdb独有的数据结构,保障性能和压缩效果平衡;

  提供高达3~N倍(统计值)的数据压缩率 。

  (3)突破内存限制

  a. PB级KV存储解决方案

  全量数据存储在磁盘,突破内存的容量限制;

  计算&存储分离的存储架构,突破单机磁盘限制。

  b. 高扩展性

  水平扩展:支持水平扩展分片;

  垂直扩展:秒级的垂直扩展存储;

  读写分离:缓存层热点数据读写分离。

  1. 一致性解决方案

  (1)并行更新(隔离性)

  串行更新:单Key串行更新,保证时序;

  并行更新:Slot维度并行更新,提升性能。

  (2)部分成功(原子性)

  系统联动:缓存&存储实时同步更新状态,通过revision同步状态;

  部分成功:缓存更新成功,存储更新失败,触发HA,保障写入成功(日志幂等)。

  (3)读一致性

  revision:每个Key都带有一个revision,通过revision识别数据新旧;

  淘汰控制:Redis不淘汰存储未更新的数据(Redis不淘汰revision <4的 数据),保证Redis不缓存旧版本数据。

u=3634340218,2505771942&fm=26&gp=0.jpg

  2. 缓存击穿解决方案

  (1)空数据查询

  缓存所有Key 和 热数据Value,在缓存层拦截空数据查询,避免无效查询透传;

  (2)缓存污染

  可控的冷数据缓存策略,提供可配置的了冷数据缓存配置,例如业务可以配置在5分钟内访问次数超过3次才缓存在内存,可以有效防御缓存污染。

  value-cache-policy-period(缓存策略时间窗);

  value-cache-policy-threhold(value-cache-policy-period 时间窗内触发缓存的访问频率)。

  3. 缓存雪崩解决方案

  前面介绍到,缓存雪崩主要在两种情况会触发:

  第一:大量热Key同时被淘汰,其中到原因是TTL设置时间接近。Redis混合存储版支持动态TTL,每次对Key的访问都会触发TTL更新,保障热数据持久缓存,有效规避缓存密集淘汰,我们通过两个参数配置来实现动态TTL:

  value-eviction-policy:设置为time-to-eviction,启用全局动态TTL;

  value-time-to-eviction:设施动态TTL的时长,取值范围[1h-180d]。

  第二:一个冷Key瞬间产生大量的访问,由于缓存MISS导致大量请求透传到存储层,Redis混合存储版通过合并冷数据缓存的请求,同一个key的请求只访问一次存储层(Ten第三),可以将对存储层的访问降到最低,从而避免存储层过载。


联系人:罗先生

582059487 15026612550
立即咨询

QQ

QQ:582059487 点击复制添加QQ好友

电话

15026612550
7*24小时服务热线

微信

二维码扫一扫添加微信
TOP
微信咨询 获取代理价(更低折扣)
更低报价 更低折扣 代金券申请
咨询热线:15026612550