-
Notifications
You must be signed in to change notification settings - Fork 71
Home
经过调研发现,当前主流DDR3内存和主流SATA SSD的单位成本价格差距大概在20倍左右,为了优化redis机器综合成本,我们考虑实现基于热度统计 的数据分级存储及数据在RAM/FLASH之间的动态交换,从而大幅度降低成本,达到性能与成本的高平衡。
基于key访问次数(LFU)的热度统计算法识别出热点数据,并将热点数据保留在redis中,对于无访问/访问次数少的数据则转存到SSD上,如果SSD上的key再次变热,则重新将其加载到redis内存中。
swapdb的优点如下:
- API与redis高度兼容
常见的开源类redis大容量硬盘存储通常号称是redis兼容的,但实际上却有很多API的行为与redis不一致,且通常没有明确说明,就很难做到无缝 切换。
swapdb从一开始就重视与redis的兼容性,通过精心设计的硬盘数据存储格式、严格的API行为测试来最大限度的保持与redis API的兼容。
- 高性能
采用了多进程异步非阻塞模型来保证高性能,每个节点运行时都包括两个进程,一个是深度改造过的redis进程,一个是SSD读写进程。 对于存储在redis的热点数据,通过redis进程进行访问,拥有与redis相同的读写性能。
对于存储在SSD的较冷数据,由redis进程将请求转发给SSD进程进行读写,并且通过精心设计的硬盘数据存储格式、多版本key惰性删除、多线程读写 SSD等机制来最大限度的发挥SSD的读写性能。
SSD底层存储引擎采用Rocksdb。
- key热度统计
支持基于key访问次数的热度统计(即LFU算法),相比于LRU算法,能够更准确地、更合理地统计key的热度。
- 主从同步(全量复制 & 增量同步)
swapdb支持基于redis RDB的内存数据复制和rocksdb SNAPSHOT的SSD数据复制,同时通过支持redis的PSYNC以及部分PSYNC2功能来实现增量 同步功能。
在保证数据一致性的前提下,通过实现增量写请求的提前发送、从节点SSD异步写及结果异步确认等,大大优化了从节点同步的性能。经实 测,主从同步性能及效率远高于SSDB。
- 集群管理及单实例
swapdb支持redis cluster方式的集群管理、分片及高可用机制。同时,swapdb也支持类似redis的单实例运行模式。
- 冷热数据动态交换
swapdb根据读写访问次数进行key热度统计,并自动将较冷数据转存到SSD,或者自动将变热的数据从SSD加载到redis。
- 内存数据占比可控
swapdb提供了数据加载上限值、数据转存下限值这两个配置,通过调整该配置,可以将内存数据占比始终控制在一定范围,使得内存使用可控, 防止发生OOM等情况。