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