Redis 核心技术与实战
蒋德钧
中科院计算所副研究员
81696 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 53 讲
开篇词 (1讲)
实践篇 (28讲)
Redis 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

28 | Pika:如何基于SSD实现大容量Redis?

读写性能弱于Redis
降低数据的访问性能
主从库重新执行全量同步的风险低
实例重启快
Sorted Set类型
Hash类型
Set类型
List类型
主从库重新执行全量同步的风险低
实例重启快
实例数据扩容
使用机械硬盘作为实例容量扩展的好处或不足
不足
优势
Nemo模块的转换机制
Pika的读取数据流程
Pika的写入数据基本流程
RocksDB的基本数据读写机制
binlog机制
RocksDB
Nemo存储模块
Pika线程模块
网络框架
读写性能弱于Redis
降低数据的访问性能
兼容Redis操作接口
使用SSD保存数据
每课一问
Pika的其他优势与不足
Pika如何实现Redis数据类型兼容?
Pika如何基于SSD保存更多数据?
Pika的架构
Pika的不足
Pika的优势
Pika: 如何基于SSD实现大容量Redis?

该思维导图由 AI 生成,仅供参考

你好,我是蒋德钧。
我们在应用 Redis 时,随着业务数据的增加(比如说电商业务中,随着用户规模和商品数量的增加),就需要 Redis 能保存更多的数据。你可能会想到使用 Redis 切片集群,把数据分散保存到多个实例上。但是这样做的话,会有一个问题,如果要保存的数据总量很大,但是每个实例保存的数据量较小的话,就会导致集群的实例规模增加,这会让集群的运维管理变得复杂,增加开销。
你可能又会说,我们可以通过增加 Redis 单实例的内存容量,形成大内存实例,每个实例可以保存更多的数据,这样一来,在保存相同的数据总量时,所需要的大内存实例的个数就会减少,就可以节省开销。
这是一个好主意,但这也并不是完美的方案:基于大内存的大容量实例在实例恢复、主从同步过程中会引起一系列潜在问题,例如恢复时间增长、主从切换开销大、缓冲区易溢出。
那怎么办呢?我推荐你使用固态硬盘(Solid State Drive,SSD)。它的成本很低(每 GB 的成本约是内存的十分之一),而且容量大,读写速度快,我们可以基于 SSD 来实现大容量的 Redis 实例。360 公司 DBA 和基础架构组联合开发的 Pika键值数据库,正好实现了这一需求。
Pika 在刚开始设计的时候,就有两个目标:一是,单实例可以保存大容量数据,同时避免了实例恢复和主从同步时的潜在问题;二是,和 Redis 数据类型保持兼容,可以支持使用 Redis 的应用平滑地迁移到 Pika 上。所以,如果你一直在使用 Redis,并且想使用 SSD 来扩展单实例容量,Pika 就是一个很好的选择。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Pika: 利用SSD实现大容量Redis Pika是一个基于SSD实现大容量Redis的解决方案,通过使用固态硬盘(SSD)降低成本、提高容量和读写速度。该方案采用RocksDB保存数据、避免内存快照和主从同步问题,并实现了与Redis数据类型兼容。Pika通过RocksDB将大量数据保存到SSD上,并使用binlog机制进行主从同步,避免了内存快照和缓冲区溢出问题。此外,Pika的Nemo模块实现了Redis数据类型的兼容,保留了数据类型的特征。尽管Pika将数据保存到SSD上会降低数据的访问性能,但其多线程模型和高配SSD的配置可以在一定程度上弥补性能损失。Pika提供了测试数据表,显示在不写binlog时,SET/GET、HSET/HGET的性能能达到200K OPS以上,但一旦增加了写binlog操作,性能下降约41%。因此,在使用Pika时,需要权衡单实例扩容的必要性和可能的性能损失。总的来说,Pika是一个很好的选择,特别适用于需要扩展Redis容量的用户。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Redis 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • Roy Liang
    SSD使用寿命和擦写次数相关,我们有的业务数据量和访问量特别大,使用SSD一年就得换了,这样实际成本降不下来。所以,请问有没有可能开发一套混合存储系统,热数据存储而不是缓存在Redis,冷数据存储在Pika,Redis中的热数据淘汰时,自动写入Pika,Pika的冷数据加载时,自动写入Redis,这样业务代码几乎就不用做数据一致性维护相关的内容。不知道这个系统是否存在可行性?其中的技术风险可能在哪里?

    作者回复: 这个方案是可行的,相当于冷热分层存储了,而且Pika和Redis的数据模型兼容,所以数据迁移起来会比较方便直接。 我想到的关键技术问题:1. 数据冷热的区分方法,这有点类似于缓存算法,把经常访问的数据要能够筛选出来;2. 数据的迁移开销,数据迁移时需要避免对Redis前端读写请求的阻塞,开发这个系统时可能要考虑使用额外线程来迁移Redis数据;3. 数据迁移时数据读写正确性的保证,例如数据正在迁移,是否还能正常读写。

    2020-10-26
    4
    30
  • 杨逸林
    Redis 服务器有没有必要上 ECC 内存? 还有如果那个 Memtable 有没有极端情况,Memtable1 还在写入 SSD,Memtable2 已经满了,这怎么办?虽然写入 SSD 很快,我是说如果。 binlog 机制在 MySQL 那已经玩烂了。。。

    作者回复: ECC内存是需要的,Redis数据都在内存中,如果内存出错,会有影响的。 关于Memtable的问题是个好问题。在你说的情况下,Memtable1还在写SSD,Memtable2已经满了,此时相当于有两个Memtable要刷盘,RocksDB会对前端的写进行限速。 RocksDB中有个配置项是max_write_buffer_number,如果需要往盘上刷的memtable大于这个配置项,就会进行写限速了。

    2020-10-25
    4
    5
  • 游弋云端
    可以考虑内存、SSD、HDD做分级存储,当前这对系统要求就更高了,需要识别数据的冷温热,再做不同介质间的动态迁移,甚至可以做一些访问预测来做预加载和调级。

    作者回复: 分级存储时,数据的冷热度识别是一个主要要考虑的问题。通常可以用缓存算法策略来筛选冷热数据,目前也有些尝试是用机器学习的方法来预测数据冷热度,进而再放到不同的介质中。

    2020-10-21
    3
  • Mr.蜜
    只要能区分出冷热数据,启用机械硬盘作为一部分存储介质也是一个可取的方案。

    作者回复: 如果用机械硬盘,考虑到机械硬盘的毫秒级别延迟,数据访问速度会比较慢,会拖慢前端应用的响应。一般还是建议用SSD更好些。

    2020-11-13
  • dfuru
    使用机械硬盘作为实例容量扩展: 1. 在pika的解决方案中,当写满一个memtable时,切换memtable,将写满的memtable中的数据已文件的形式持久化到硬盘上。 硬盘具体是SSD、机械硬盘还是NVME,都可以。 2. 使用机械硬盘,容量更大,价格更便宜,读写性能更低。大量数据访问机械盘时,磁盘IO是主要瓶颈。

    作者回复: 机械硬盘作为容量扩展是可以的,不过机械硬盘的性能慢,会是潜在问题。另外,现在SSD的容量也可以做到很大,当然容量的性价比还是比不上机械硬盘。

    2020-10-31
  • Kaito
    是否可以使用机械硬盘作为Redis的内存容量的扩展? 我觉得也是可以的。机械硬盘相较于固态硬盘的优点是,成本更低、容量更大、寿命更长。 1、成本:机械硬盘是电磁存储,固态硬盘是半导体电容颗粒组成,相同容量下机械硬盘成本是固态硬盘的1/3。 2、容量:相同成本下,机械硬盘可使用的容量更大。 3、寿命:固态硬盘的电容颗粒擦写次数有限,超过一定次数后会不可用。相同ops情况下,机械硬盘的寿命要比固态硬盘的寿命更长。 但机械硬盘相较于固态硬盘的缺点也很明显,就是速度慢。 机械硬盘在读写数据时,需要通过转动磁盘和磁头等机械方式完成,而固态硬盘是直接通过电信号保存和控制数据的读写,速度非常快。 如果对于访问延迟要求不高,对容量和成本比较关注的场景,可以把Pika部署在机械硬盘上使用。 另外,关于Pika的使用场景,它并不能代替Redis,而是作为Redis的补充,在需要大容量存储(50G数据量以上)、访问延迟要求不苛刻的业务场景下使用。在使用之前,最好是根据自己的业务情况,先做好调研和性能测试,评估后决定是否使用。
    2020-10-21
    6
    111
  • neohope
    用机械硬盘阵列来做缓存,其实没有必要,速度太慢了: 1、用redis来做缓存,就是因为mysql慢,所以加了一层 2、redis比mysql快的最根本原因,不是redis技术强悍,而是内存比磁盘快 3、mysql本身就是把热数据放到内存里,冷数据存到磁盘阵列上,并且做了很多数据查找的优化 4、pika利用的是SSD比磁盘快,比内存便宜,才找到了自己的生存空间,其根本原因也不是RocksDB技术先进; 5、Pika的用磁盘做缓存,从磁盘上查找记录,比mysql也快不了太多,解决不了什么问题,而且还引入了新的故障点,没有太多价值
    2021-02-19
    2
    22
  • 孔祥鑫
    有个地方没搞明白,读ssd上的数据文件,和redis读rdb文件相比,两者都是文件,为什么会比redis快呢
    2020-11-16
    4
    8
  • Geek_9a0c9f
    pika从性能上比当然不然redis,但是它你补了redis几个不足,那么pika在真是项目中都应用在什么场景呢?,与ssd的mysql比优势在哪里?除了o(1)的操作。
    2020-10-21
    6
  • Q, Q
    pika实际是使用ssd提高性能,那还不如把redis层去掉,mysql直接上ssd岂不是更加方便?
    2021-08-01
    4
    5
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部