13 | 微博系统设计:怎么应对热点事件的突发访问压力?
该思维导图由 AI 生成,仅供参考
需求分析
- 深入了解
- 翻译
- 解释
- 总结
微博系统设计面临热点事件的突发访问压力,本文提出了针对10亿级用户体量的微博系统“Weitter”架构设计。文章首先分析了Weitter的核心功能和性能指标估算,包括存储空间需求和访问并发量。在概要设计中,系统架构主要解决高并发问题,包括Get请求和Post请求的处理流程,利用CDN缓存、反向代理服务器、分布式文件存储集群、Redis缓存服务器和MySQL分片数据库等组件来处理读写请求。详细设计则重点讨论了如何快速响应用户请求和避免数据库负载压力。整体设计思路清晰,针对性强,为应对微博系统的高并发访问压力提供了有力的技术支持。 文章还介绍了微博的发表/订阅问题,提出了推模式和拉模式的解决方案,并探讨了缓存使用策略和数据库分片策略。通过时间淘汰算法和本地缓存策略,Weitter有效地提高了系统性能和吞吐能力。最终,文章指出微博系统的架构设计思路对信息流应用产品具有普适性,为读者提供了对信息流产品架构的深入了解。 总体而言,本文深入剖析了Weitter微博系统的架构设计,为读者呈现了高并发访问压力下的系统优化方案,对于从事信息流应用产品开发和架构设计的技术人员具有重要参考价值。
《李智慧 · 高并发架构实战课》,新⼈⾸单¥59
全部留言(19)
- 最新
- 精选
- ABC在gitee上有一个jd-hotkey的项目,实现了热点数据推送至集群本地的功能,性能强悍。微博也可以用这种方式实现本地缓存。
作者回复: 赞。这个方案应该可以解决前面同学 @猿人谷 提到的缓存一致性问题。
2022-04-0112 - neohope优化方面: 1、通过AI自动识别热点话题,识别地域性热点话题,热点话题加入服务端缓存 2、通过热点话题趋势预测,架构自动扩缩容 3、扛不住的时候,服务自动降级或熔断 4、跨区域多数据中心,就近访问 5、硬件方面,可以使用SSD,缓存新的非热点数据,替代内存,降低成本 功能方面: 1、热点话题管理 2、评论及转发管理 3、微博检索功能 4、微博合规性管理,包括屏蔽、删除功能 5、微博机器人识别
作者回复: 赞
2022-05-034 - 贯通用户 ID 分片带来的热点问题,可以通过优化缓存来改善;--老师可以再详细些么
作者回复: 给带来热点的大V们更多的缓存,比如百万以上粉丝的大V缓存所有历史微博数据,这样就根本不会访问数据库,也就没有热点压力。
2022-03-2024 - killer1.推拉模式纬度是针对粉丝查询好友发布微博构造的列表,用户如果在线采用推方式构建一个列表,用户不在线,上线后分别拉好友消息构造列表,这里有一个疑问,上线后不是用推方式吗?如果是好友发表微博再用推的方式,那么怎么保证拉的方式和推的方式平滑过度呢?2.后面有一个缓存七天微博数据是按照用户id和发表微博的id进行缓存的,纬度是针对发表者来做的缓存。所以对粉丝刷新列表并没有命中缓存呢?这两个纬度不同解决的应该是不同的问题呢?3.最后一问题是回复Geek的问题,七天内数据缓存起来不需要每个用户拉20条,如果要实现这个不是应该按照用户id缓存所有好友的微博吗?如果是这样,大v发表一篇微博要进行所有粉丝id和微博id的缓存吗?不知道我有没有理解错误
作者回复: 1 用户上线后,先建立一个空的初始列表,如果这个时候好友发微博,就推到这个空的初始列表。然后用拉的方式构建一个拉列表,把拉列表内容接在前面的初始列表上。接的时候检查初始列表的内容是否在拉列表里,在的话,删除重复内容。 2 刷新微博就是按时间维度构建列表内容的,所以按照时间维度缓存,缓存不命中,说明关注的好友最近7天都不发微博,不活跃,大概率说明该用户自身也不活跃,符合缓存的设计目标。
2022-03-194 - 猿人谷对于特别热门的微博内容,启用本地缓存模式后,保证一致性(本地缓存、分布式缓存、数据库),大佬是用的哪种方案?
作者回复: 微博不能修改,只需要处理删除的情况就可以。 分布式缓存在用户删微博的时候直接删除即可,本地缓存采用过期失效,过期失效时间2分钟。过期失效会导致明星删除微博后,失效到期前还能刷出微博内容,但这是运营方可以接受的,甚至是期望的。
2022-03-2222 - peter请教老师几个问题啊: Q1:反向代理和负载均衡都用Nginx吗? 文中有反向代理和负载均衡两个功能实体,它们是分别用一个组件来实现吗?比如用A来完成反向代理,用B来实现负载均衡。 Nginx既可以做反向代理,又可以做负载均衡,所以,会采用Nginx来完成这两项功能吗? Q2:用什么实现分布式文件系统?FastDFS?HDFS? Q3:用什么表示“最新微博”?时间吗?还是设置一个标记? Q4:新浪微博用了AI吗? Q5:微博的信息会一直存吗? 比如新浪微博,每一年都会有大量的消息需要存储。二十年后数据会积累很多。这些数据会一直保存吗?会根据一定策略删除老数据吗?
作者回复: 1 不是,我们这个设计里,反向代理用nginx,负载均衡用lvs。也有反向代理和负载均衡都用nginx的,这种一般系统规模比较小,反向代理同时承担负载均衡的职责,画在架构图里,只画一个组件。 2 这里存储的是图片小文件,HDFS不合适,FastDFS或者Ceph都可以。 3 用,所有有广告推荐的都有AI。 4 Witter会存储,存储的成本是逐年下降的,数据很重要。新浪微博会不会存储看用户协议。
2022-03-182 - 👽我觉得这篇专栏,高并发的设计已经相对比较全了:消息队列,缓存。 如果问我还有什么地方可以进一步优化的话,我觉得可以考虑的点: 1. 多地部署,就近访问。就近地区的用户请求,尽可能就近处理。同时,用户的相关信息是否可以就近访问,优先访问同一个数据中心的数据,然后再进行跨地域访问。个人理解,微博有一定地域性。比如,南方地区的人,是不是关注南方地区的博主就会多一些。东北,西北,以及国外,同理。(当然,这一点的可行性还没有深入分析,只是初步想法)。 2. 进一步深度定制。据我查询资料的结果来看的话呢,新浪微博的Redis组件和硬件搭配是经过定制的。Redis对于热点信息的存取做了优化,硬件方面使用SSD对于高频读写的数据做存储。 3. 就是通用类型的高可用保障,多地多可用区多副本的集群部署,个人认为,这个也可以结合数据优先就近访问。
作者回复: 赞,新浪微博在很早的时候就部署了北京、上海、广州三个数据中心。
2022-03-181 - 阿棠“缓存的 key 为用户 ID,value 为用户最近 7 天发表的微博 ID 列表。” 这应该怎么实现? 如果定时任务为每个用户更新最近7天发表的微博ID,更新时的读写压力又太大了。
作者回复: 缓存更新是用户在发布微博的时候触发的,不需要定时任务。
2023-12-07归属地:广东 - 冷杉请问一下李老师,您文稿中的图片用的是什么软件画的呀?
作者回复: 亿图
2022-08-29归属地:北京 - Li Yao如果一个大V有1000万粉丝,其中有100万粉丝在线,当大V发微博时,会触发给100万人的缓存中新增数据吗?
作者回复: 是的
2022-07-01