Redis作为高性能缓存被广泛应用到各个业务,比如游戏的排行榜,分布式锁等场景。
经过在IEG的长期运营,我们也遇到Redis一些痛点问题,比如内存占用高,数据可靠性差,业务维护缓存和存储的一致性繁琐。
由腾讯互娱CROSDBA团队腾讯云数据库团队联合研发的Tendis推出了:缓存版、混合存储版和存储版三种不同产品形态,针对不同的业务需求,本文主要介绍混合存储版的整体架构,并且详细揭秘内部的原理。
导语本文首先介绍腾讯IEG运营Redis遇到的一些痛点问题,然后介绍由腾讯互娱CROSDBA团队腾讯云数据库团队联合研发的Tendis的三种不同的产品形态。最后重点介绍冷热混合存储版的架构,并且重点介绍各个组件的功能特性。
背景介绍Redis有哪些痛点?在使用的过程中,主要遇到以下一些痛点问题:
内存成本高
业务不同阶段对QPS要求不同比如游戏业务,刚上线的新游戏特别火爆,为了支持上千万同时在线,需要不断的进行扩容增加机器。运营一段时间后,游戏玩家可能变少,访问频率(QPS)没那么高,依然占用大量机器,维护成本很高。需要为Fork预留内存Redis保存全量数据时,需要Fork一个进程。Linux的fork系统调用基于CopyOnWrite机制,如果在此期间Redis有大量的写操作,父子进程就需要各自维护一份内存。因此部署Redis的机器往往需要预留一半的内存。缓存一致性的问题对于Redis+MySQL的架构需要业务方花费大量的精力来维护缓存和数据库的一致性。
数据可靠性Redis本质上是一个内存数据库,用户虽然可以使用AOF的Always来落盘保证数据可靠性,但是会带来性能的大幅下降,因此生产环境很少有使用。另外不支持回档,Master故障后,异步复制会造成数据的丢失。
异步复制Redis主备使用异步复制,这个是异步复制固有的问题。主备使用异步复制,响应延迟低,性能高,但是Master故障后,会造成数据丢失。
Tendis是什么?Tendis是集腾讯众多海量KV存储优势于一身的Redis存储解决方案,并%兼容Redis协议和Redis4.0所有数据模型。作为一个高可用、高性能的分布式KV存储数据库,从访问时延、持久化需求、整体成本等不同维度的考量,Tendis推出了缓存版、混合存储版和存储版三种不同产品形态,并将存储版开源。感兴趣的小伙伴可以去Github