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

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

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

全部留言(10)

  • 最新
  • 精选
  • 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 相当于自己开辟了一个新的分支,公司内部需要投入人力去持续维护,需要平衡投入产出比。如果没有特别复杂的需求,一般使用官方版本即可,好处是可以第一时间使用最新版本的特性。

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

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

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

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