Skip to content
lijingcheng edited this page Sep 30, 2017 · 2 revisions

swapdb 介绍

背景

经过调研发现,当前主流DDR3内存和主流SATA SSD的单位成本价格差距大概在20倍左右,为了优化redis机器综合成本,我们考虑实现基于热度统计 的数据分级存储及数据在RAM/FLASH之间的动态交换,从而大幅度降低成本,达到性能与成本的高平衡。

基本思想

基于key访问次数(LFU)的热度统计算法识别出热点数据,并将热点数据保留在redis中,对于无访问/访问次数少的数据则转存到SSD上,如果SSD上的key再次变热,则重新将其加载到redis内存中。

优点

swapdb的优点如下:

  1. API与redis高度兼容

常见的开源类redis大容量硬盘存储通常号称是redis兼容的,但实际上却有很多API的行为与redis不一致,且通常没有明确说明,就很难做到无缝 切换。

swapdb从一开始就重视与redis的兼容性,通过精心设计的硬盘数据存储格式、严格的API行为测试来最大限度的保持与redis API的兼容。

  1. 高性能

采用了多进程异步非阻塞模型来保证高性能,每个节点运行时都包括两个进程,一个是深度改造过的redis进程,一个是SSD读写进程。 对于存储在redis的热点数据,通过redis进程进行访问,拥有与redis相同的读写性能。

对于存储在SSD的较冷数据,由redis进程将请求转发给SSD进程进行读写,并且通过精心设计的硬盘数据存储格式、多版本key惰性删除、多线程读写 SSD等机制来最大限度的发挥SSD的读写性能。

SSD底层存储引擎采用Rocksdb。

  1. key热度统计

支持基于key访问次数的热度统计(即LFU算法),相比于LRU算法,能够更准确地、更合理地统计key的热度。

  1. 主从同步(全量复制 & 增量同步)

swapdb支持基于redis RDB的内存数据复制和rocksdb SNAPSHOT的SSD数据复制,同时通过支持redis的PSYNC以及部分PSYNC2功能来实现增量 同步功能。

在保证数据一致性的前提下,通过实现增量写请求的提前发送、从节点SSD异步写及结果异步确认等,大大优化了从节点同步的性能。经实 测,主从同步性能及效率远高于SSDB。

  1. 集群管理及单实例

swapdb支持redis cluster方式的集群管理、分片及高可用机制。同时,swapdb也支持类似redis的单实例运行模式。

  1. 冷热数据动态交换

swapdb根据读写访问次数进行key热度统计,并自动将较冷数据转存到SSD,或者自动将变热的数据从SSD加载到redis。

  1. 内存数据占比可控

swapdb提供了数据加载上限值、数据转存下限值这两个配置,通过调整该配置,可以将内存数据占比始终控制在一定范围,使得内存使用可控, 防止发生OOM等情况。