【Redis】基于Redis微博缓存服务实践与优化(Redis专栏实战启动)

📫作者简介:小明java问道之路2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。

        

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

        

🏆 2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人

🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家

        

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~ 


🍅 文末获取联系 🍅  👇🏻 精彩专栏推荐订阅收藏 👇🏻

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与企业级MySQL实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心七IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

本文目录

本文目录

本文导读

一、基于Redis的微博业务规模分析

二、微博数据库的技术选型

三、基于微博业务场景的Redis改进方案

四、Redis在微博的优化实践

1、Cache Service服务化

2、如何解决Redis容量过大?

3、集群管理的优化实践

总结


本文导读

本文基于微博业务规模,分析Redis在微博内部分布在各个应用场景的使用与优化,主要有微博数据库的技术选型,基于微博业务场景的Redis改进方案,Redis在微博的优化实践(Cache Service服务化、解决Redis容量过大问题、集群管理的实践)。

一、基于Redis的微博业务规模分析

Redis被广泛应用于微博的商业场景中,微博对Redis的基本改进可以分为两类:避免阻塞和节省内存。

业务需求是微博优化和改进Redis的出发点。微博中有很多业务,比如红包活动、粉丝数、用户数、读者数统计、信息流聚合、热榜等。同时,这些业务面临着非常大的用户数量,使用Redis的业务访问的数据量往往达到TB级别。作为一款直接面向终端用户的应用,微博用户的商业体验至关重要,这需要Redis的支持。

设计一个基于Redis的系统,可以提供高性能、高并发的读写访问,确保低读写延迟;能够支持大容量存储;灵活的展览保护对于不同业务的快速扩张至关重要。微博对Redis做了很多改进和优化。综上所述,它不仅改进了Redis本身的数据结构和工作机制,还基于Redis独立开发了新的功能组件,包括支持大容量存储的RedRock和实现面向服务服务的RedisService。

二、微博数据库的技术选型

微博数据库的技术选型,不仅仅包含Redis等NoSQL,还有队列、存储。

三、基于微博业务场景的Redis改进方案

在持久化方面,首先全量 RDB + 增量 AOF相结合的机制用于持久性需求,从而避免了数据可靠性或性能下降的问题。在Redis的官方4.0版本之后,还增加了RDB和AOF混合的机制。当AOF日志被写入和刷新时,使用额外的BIO线程来负责实际的刷新工作,这可以避免AOF日志刷新缓慢和阻塞主线程的问题。aofnumber配置项也已添加。此配置项可用于设置AOF文件的数量,控制AOF写入磁盘时的总文件大小,避免写入过多AOF日志文件导致的磁盘填充问题。

在主从数据库复制机制中,使用独立的复制线程来同步主从数据库,以避免阻塞主线程。

在节省内存方面,微博有一个典型的优化,那就是自定义数据结构。当使用Redis缓存用户的关注列表时,LongSet数据类型是为关注列表的存储而定制的。此数据类型是存储Long类型元素的集合,其底层数据结构是Hash数组。在设计LongSet类型之前,微博使用Hash集合类型来存储用户关注列表。然而,当保存大量数据时,Hash集合类型会消耗大量的内存空间。当缓存的注意力列表从Redis中删除时,缓存实例需要从后台数据库中读取用户注意力列表,然后使用HMSET将其写入Hash集。在并发请求压力较大的场景中,此进程可能会降低缓存性能,与Hash集相比,LongSet类型的底层使用Hash数组来存储数据,这不仅避免了Hash表的过度指针开销,节省了内存空间,还实现了快速访问。

可以看出,微博优化Redis的出发点与官方一再强调的Redis优化目标是一致的。

四、Redis在微博的优化实践

1、Cache Service服务化

微博海量的业务线对Redis的容量有不同的要求,随着业务的变化可能会有扩张和收缩的要求。为了灵活支持这些业务需求,微博对Redis进行了面向服务的转型(RedisService,即使用Redis集群来服务不同的业务场景需求,每个业务都有独立的资源,互不干扰)。这是一种多级缓存服务,可以解决高访问问题,高并发性和高可用性。基于该系统可以自动监控微博的流量,并支持自动伸缩,可以快速度过高峰并在高峰后回收机器,实现资源的充分利用。ConfigService意味着我们将配置放在配置中心,客户端从配置中心提取配置。有两种访问方法,第一种是SDK,第二种是多语言,通过代理将请求路由到后端缓存,DBA可以通过管理平台快速扩展和缩减资源。

如果想扩展Redis,我们可以使用Codis或Redis Cluster方法来实现这一点。多租户支持和业务隔离的要求是一致的,需要通过资源隔离来实现,这意味着分别部署来自不同租户或业务的数据,以避免资源混合。对于路由规则和监控功能,目前微博的方案是好的,即在 Redis proxy 代理中完成这两个功能。只有这些功能得到很好的实现,平台服务才能有效地支持不同业务线的需求。多级缓存中有四个角色:master、master-l1、slave和slave-l1。主设备master和从设备slave没有同步关系,但根据角色命名。master-l1有多组数据来承载热点,主设备是存储完整数据的基准数据。从设备通常用于多个机房的灾难恢复,slave-l1用于多个计算机机房的数据同步。这种同步会保证数据的最终一致性。

服务化的好处很多,所有Redis实例都形成了一个资源池,资源池本身可以很容易地扩展。如果新业务上线或旧业务下线,您可以从资源池中申请资源,也可以将未使用的资源返回资源池。Redis服务形成后,不同业务线使用Redis非常方便。您可以简单地允许业务应用客户端访问Redis服务集群,而不是由业务部门进行独立部署和运维。即使业务应用程序的数据量增加,也无需担心实例容量问题。服务集群本身可以自动在线扩展,以支持业务开发。

2、如何解决Redis容量过大?

为了解决容量过大的问题,可以将内存中的容量放入磁盘,例如微博区分热数据和冷数据(例如一些微博话题在首次出现时非常受欢迎,并且会有大量用户访问这些话题就要使用Redis服务。然而,在话题过去后,访问人数将急剧下降,这些数据将成为冷数据),将热数据保存在Redis中,并通过RocksDB将冷数据写入底层硬盘。此时,冷数据可以从Redis迁移到RocksDB并存储在硬盘上。这样就可以节省Redis实例的内存来保存热数据。同时,单个实例可以保存的数据量由整个硬盘的大小决定。

从图中可以看出,Redis使用异步线程在RocksDB中读写数据。毕竟,读写RocksDB的延迟无法与Redis的内存访问延迟相匹配。这也是为了避免在读写冷数据时阻塞Redis主线程。硬盘上冷数据的布局和管理委托给RocksDB。

3、集群管理的优化实践

关于集群管理方面,无论是Redis也好,MySQL也好,对资源的任何管理都可以用这个来总结,包括五个部分:资源申请,资源分配,业务上线,资源查询,资源变更。对于业务申请这一方面需要有一个业务唯一的标识,QPS、数据类型是怎样的,基于这些考察再对它进行分配、配置、部署。

总结

本文基于微博业务规模,分析Redis在微博内部分布在各个应用场景的使用与优化,主要有微博数据库的技术选型,基于微博业务场景的Redis改进方案,Redis在微博的优化实践(Cache Service服务化、解决Redis容量过大问题、集群管理的实践)。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小 明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值