字节三面:微博大V发博客场景,使用推模式还是拉模式?

这是一个典型的“消息分发模型”设计问题,微博/社交平台在设计大V发博分发时,推模式(push)拉模式(pull) 各有利弊。下面结合你提到的“大V发博客”场景详细分析:

一、两种模式简介

推模式(push)

大V一发微博,系统立即将内容推送到每一个粉丝的时间线中(如写入粉丝的消息队列或Feed中)

拉模式(pull)

粉丝查看时间线时,实时去拉取他关注的人(如大V)最新发布的内容,再合并排序显示

二、微博类应用场景选型

✅ 小V/普通用户:使用 推模式

  • 粉丝数少,推送量小;
  • 内容分发量级低;
  • 直接推送到粉丝的 Feed 表中,读取快,体验好。

⚠️ 大V用户(如百万粉丝):不能用纯推模式,会有严重问题

顺便吆喝一句→机会_技术大厂,前端-后端-测试,待遇和稳定性都还不错,感兴趣试试~

三、大V使用推模式的问题

1. 写放大严重

  • 发一条微博,需写入百万个粉丝的 Feed 表;
  • 带来巨大的写压力,尤其是瞬时写入;
  • 数据库/缓存易成为瓶颈。

2. 分布式系统压力大

  • 粉丝分布在不同机器/分区上,分发过程涉及大量跨节点通信;
  • 容易出现分发失败、延迟、系统雪崩。

3. 存储空间浪费

  • 一条大V微博需要复制到每个粉丝的 Feed;
  • 热点内容被冗余存储百万次,浪费存储资源。

4. 数据一致性难以保证

  • 如果推送中断,部分粉丝可能接收不到;
  • 需要补偿机制、消息重试等逻辑,复杂度上升。

四、最佳实践:冷热分离 + 推拉结合

微博、抖音等大厂采用如下优化:

普通用户

采用

推模式

,直接写入粉丝Feed

大V用户

采用

拉模式

,粉丝访问时间线时实时拉取大V内容

热点内容

引入

热点缓存

统一推荐池

,避免每人复制一份

典型实现架构:

  • 粉丝 Feed 表:存普通用户发的内容;
  • 热点 Feed 池:存大V发的内容,所有粉丝访问时拉取;
  • 拉取时合并两者并排序展示;
  • 可加个性化推荐排序、兴趣匹配。

五、总结对比表

优点

读取快,体验好

节省写入压力和存储

缺点

写放大,易崩溃

拉取慢,需合并排序

适用场景

普通用户

大V/热点用户

大V适用?

❌ 存储压力+写放大

✅ 粉丝访问时再拉取

性能可控?

❌ 易爆写

✅ 拉取延迟可控

✅ 结论

微博大V发博客的场景应该使用拉模式,或者采用冷热用户分离 + 推拉结合策略:

  • 普通用户用推模式;
  • 大V使用拉模式,避免写放大和系统崩溃;
  • 用户访问时实时拉取大V内容,并做合并+排序处理。

——转载自:程序员飞鱼

#牛客解忧铺#
全部评论
你字多,你说的有道理
点赞 回复 分享
发布于 10-09 18:05 江西
很好的文章
点赞 回复 分享
发布于 10-09 18:04 安徽

相关推荐

12-03 09:24
复旦大学 Java
性格问题,面试之前非常紧张,没有录音,说一下记得的内容8.28一面(95min)1.子类与父类的加载过程,静态方法重写,静态代码块2.Java中sync阻塞与可重入是怎么实现的,轻量级锁这么可重入,重量级锁维护了wait set3.sync锁升级,AQS4.用户态,内核态5.wait与sleep,调用后操作系统发生了什么,sleep是怎样唤醒的6.concurrenthashmap介绍,size()怎么个流程7.单例模式,双重校验锁,volatile机制,可见性原理(MESI),直接将sync加方法上的锁粒度问题,类加载机制的懒汉8.MySQL中select语句执行流程9.事务与并发MVCC10.rr隔离级别下的间隙锁导致的死锁问题11.索引的注意事项12.uuid与自增id,顺序写与随机写,空间占用,可能导致极端情况varchar数据存不下导致的行溢出问题,同时网络消耗(其实这都不重要,能消耗多少)11.mysql能否保证数据不丢失12.事务注解失效的情况,你是怎么避免的,主要说了代理类,吃异常的一些问题13.spring循环依赖解决,两级缓存能否解决,可以,只是需要实例化后都暴露且暴露代理类,三级缓存提供了一个延迟以及按需加载的思想(不知道理解的对不对),判断是否需要加载代理类,以及需要时才提前暴露14.mybatis执行流程,缓存有了解吗,说一下优缺点15.实习问题手撕:链表加法9.3二面(65min)1.聊一下hashmap,负载因子与len = 8锁涉及到的概率问题,树化的优缺点2.介绍concurrenthashmap -> CAS + sync + volatile,主要说一下尽量使用用户态的CAS去尝试,这点再AQS中也有体现(不知道我的理解有没有问题)3.你说了concurrenthashmap 这么多优点,那有没有缺点 -> 主要提了一下并发机制,常见的缓存,MVCC中rc,rr允许读旧数据,尽管volatile无需加锁,但cpu缓存一致性时也存在消耗,可能在读写并发量较高时性能有所缺陷4.MySQLselect语句流程(我真绷不住了,一面问了我没复习)5.MySQL如何解析到select语法错误的,客户端连接时,用户名密码存在错误时MySQL如何解决的6.介绍B+树,主要从多叉有序平衡,树高来说7.你说了B+树有这么多优点,那有没有缺点,这边主要讲了并发量高的insert/delete场景下页分裂时锁整棵树,讲了B-link树的一些优化点,谈到了跳表设计机制8.说一下常用的jdk,1.8的新特性,lambda实现原理,功能性接口9.实习拷打手撕:山峰数组二分找变化点下标补充:简历上的实习内容有些不清楚,还好找同事咨询了,不然也是难绷有保底心态确实会不一样9.6 oc
点赞 评论 收藏
分享
评论
4
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务