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

加餐(七) | 从微博的Redis实践中,我们可以学到哪些经验?

代码实践在成长为Redis高手过程中的重要作用
业务纵切、平台横切
配置中心管理整个集群的元数据
集群代理层实现丰富的服务化功能支持
采用类似Codis的方案
资源池能轻松扩容
使用Redis集群来服务不同的业务场景需求
冷数据通过RocksDB写入底层的硬盘
定制化设计LongSet数据类型
使用独立的复制线程进行主从库同步
增加aofnumber配置项
使用额外的BIO线程负责AOF日志写入刷盘
使用全量RDB加增量AOF复制结合的机制
两个感受
为了满足这些需求,微博也在自研扩展系统
微博对Redis的技术需求
服务化改造(RedisService)
利用RocksDB辅助Redis实现扩容
冷热数据分离
节省内存
避免阻塞
灵活扩展
大容量存储
高性能、高并发的读写访问
小结
面向多业务线,微博如何将Redis服务化
微博如何应对大容量数据存储需求
微博对Redis的基本改进
微博对Redis的技术需求
微博对Redis的优化经验

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

你好,我是蒋德钧。
我们知道,微博内部的业务场景中广泛使用了 Redis,积累了大量的应用和优化经验。微博有位专家曾有过一个分享,介绍了 Redis 在微博的优化之路,其中有很多的优秀经验。
俗话说“他山之石,可以攻玉”,学习掌握这些经验,可以帮助我们在自己的业务场景中更好地应用 Redis。今天这节课,我就结合微博技术专家的分享,以及我和他们内部专家的交流,和你聊聊微博对 Redis 的优化以及我总结的经验。
首先,我们来看下微博业务场景对 Redis 的需求。这些业务需求也就是微博优化和改进 Redis 的出发点。
微博的业务有很多,例如让红包飞活动,粉丝数、用户数、阅读数统计,信息流聚合,音乐榜单等,同时,这些业务面临的用户体量非常大,业务使用 Redis 存取的数据量经常会达到 TB 级别。
作为直接面向终端用户的应用,微博用户的业务体验至关重要,这些都需要技术的支持。我们来总结下微博对 Redis 的技术需求:
能够提供高性能、高并发的读写访问,保证读写延迟低;
能够支持大容量存储;
可以灵活扩展,对于不同业务能进行快速扩容。
为了满足这些需求,微博对 Redis 做了大量的改进优化,概括来说,既有对 Redis 本身数据结构、工作机制的改进,也基于 Redis 自行研发了新功能组件,包括支持大容量存储的 RedRock 和实现服务化的 RedisService。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

微博在Redis的实践中积累了丰富的优化经验,主要包括对Redis基本改进和应对大容量数据存储需求两方面。微博避免了阻塞和节省了内存,采用全量RDB加增量AOF复制结合的机制、额外的BIO线程刷盘、aofnumber配置项等方式。此外,微博还定制化设计了LongSet数据类型,以节省内存空间并实现快速存取。针对大容量数据存储需求,微博将冷数据通过RocksDB写入底层的硬盘,实现了大容量的单实例存储。这些经验表明,高性能和省内存一直是应用Redis要关注的重点,而借助SSD和RocksDB实现大容量存储是一个不错的方案。微博对Redis的技术需求可以概括为高性能、大容量和易扩展。为了满足这些需求,微博除了对Redis进行优化,还在自研扩展系统,包括基于RocksDB的容量扩展机制,以及服务化的RedisService集群。微博的Redis服务化改造(RedisService)使得不同业务线在使用Redis时非常方便,不用业务部门再去独立部署和运维,只要让业务应用客户端访问Redis服务集群就可以。微博采用了类似Codis的方案,通过集群代理层来连接客户端和服务器端,实现了丰富的服务化功能支持。微博的Redis服务化集群架构为读者提供了重要指导意义,当多个业务线有共同的Redis使用需求时,提供平台级服务是一种通用做法,也就是服务化。微博的实践经验对于读者在自己的业务场景中更好地应用Redis具有重要指导意义。

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

全部留言(11)

  • 最新
  • 精选
  • Kaito
    在实际应用 Redis 时,你有哪些优化和二次开发的经验? 分享一下我们对 Redis 的二次开发经验。 由于我们采用的 Redis 集群方案是 Codis,我们主要对 Codis 下的 Redis Server 进行了二次开发。 我们在做服务跨机房容灾和多活时,需要在两个机房各自部署 Codis/Redis 实例,并且两个机房的实例数据需要实时同步,以支持任意机房故障时,可随时切换应用流量到另一个机房继续提供服务。 但由于两个机房之间的网络是通过专线连通的,而专线的质量和稳定性是不如同机房内的,如果使用原生 的 Redis 主从复制方案,当专线长时间故障再恢复时,原生 Redis 主从复制会进行全量的数据同步。全量同步不仅对 master 节点有阻塞风险,同时也会对机房之间的专线的带宽产生巨大的压力,还会影响应用的机房流量切换。 所以我们对 Codis 下的 Redis 做了二次开发,对其增加了类似于 MySQL 的 binlog 模块,把实时的写命令通过异步线程写入到 binlog 文件中,然后开发了数据同步中间件去读取 Redis 的 binlog,向另一个机房实时同步数据,并且支持增量同步、断点续传,这样就可以兼容专线任意时间的故障,故障恢复后我们的同步中间件会从断点处继续增量同步 Redis 数据到另一个机房,避免了全量复制的风险。 同时,我们还对 Codis 进行了二次开发,在集成数据同步中间件时,兼容了 Codis 的日常运维和故障容错,例如集群内节点主从切换、故障转移、数据迁移等操作,保证了机房之间数据同步的最终一致性。 最后,我想说的是,对 Redis 进行改造,优点是可以更加适配自己的业务场景,但缺点是维护和升级成本较高,改造 Redis 相当于自己开辟了一个新的分支,公司内部需要投入人力去持续维护,需要平衡投入产出比。如果没有特别复杂的需求,一般使用官方版本即可,好处是可以第一时间使用最新版本的特性。

    作者回复: 很赞的分享! 自研或二次开发一定要考虑投入产出比,如果定制化需求很高,二次开发还是值得的,但是技术储备也要准备好。 如果能开源出来,那会是对社区一个很好的贡献 :)

    2020-11-30
    6
    101
  • yyl
    问题:微博采用的集群部署方案,不是Redis cluster?是自研的吗?

    作者回复: 微博的集群部署方案,类似于Codis的架构,通过proxy进行请求路由,有配置中心,但是自己自研的。

    2020-11-30
    2
  • escray
    顺着专栏给的链接,先去看了《万亿级日访问量下,Redis在微博的9年优化历程 》,虽然没有机会面对类似微博这样的体量(2019年 100T+ 存储、1000+ 台物理机、10000+ Redis实例、万亿级读写、响应时间 20 毫秒),但是也算是大开眼界。 其实原文中的那个缓存、存储、队列技术选型流程图,就很有价值。 分享的很多内容不明觉厉,结合专栏的解析来看,可以感觉到微博团队在 Redis 运维方面做的比较深入。有一点疑问就是,基于 Redis 的早期版本做了很多二次开发,那么是否能够和 Redis 的新版本兼容?或者说是否反馈回了开源社区? 老师最后总结的业务纵切、平台横切很有高屋建瓴的味道,当然,最终还是要靠代码实践。 有一点好奇,一般分享都是大厂如何在高性能、大容量和可扩展方面应用 Redis,有没有人分享过“小厂”是如何使用 Redis,直接拿开源版本上生产环境么?可能也够用。 希望以后有机会能回答课后题中关于 Redis 的优化和二次开发的问题。
    2021-03-23
    5
    8
  • 那时刻
    请问老师,在冷热数据处理的图例中,异步读取冷数据,是直接从IO队列读取,这是异步处理线程发送读取命令后,然后从IO队列读取么? 另外,如果需要读冷数据,是把冷数据再放回redis变成热数据么?
    2020-11-30
    4
  • 悟空聊架构
    微博的 Redis 分享很棒,一直都觉得微博是个很厉害的平台。 另外老师总结得也很到位,更容易理解。
    2021-05-30
    1
    2
  • yyl
    问题:冷热数据的迁移,是怎么操作的?由后台根据访问量自行迁移吗?
    2020-11-30
    2
  • cloud
    老师能展开说下longset是如何实现的吗? 用数组的话,hash冲突后是怎么解决的
    2023-12-28归属地:广东
  • 学习
    用户关注列表定制了longest这块,为什么不直接使用set结构?
    2023-03-29归属地:北京
  • 飞龙
    对redis还没有二次开发过,感觉官方提供的能够完全使用都可以满足一般公司的业务需求
    2022-08-24归属地:广东
  • silentyears
    请问,“在 AOF 日志写入刷盘时,用额外的 BIO 线程负责实际的刷盘工作”这句话,额外的BIO线程是什么意思?
    2021-02-16
    1
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部