字节三面:微博大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 安徽

相关推荐

11-16 22:02
同济大学 C++
今天linux学习的内容,太枯燥了- vim的多种模式- Normal:长命令,短命令,- Insert: 编辑文本- Visiual: 选择文本- ...- Normal模式下的命令:移动光标(h:左,k:下,j:上,l:右)- 短命令,向上走几行,向下走几行:[n]+, [n]- 没有中括号- 移动到文本首行:gg,末行:G- 行内移动:wb,WB- 长命令 :[n] | [n]G- 行首:^- 行尾:  $- 到达某个字符前面: t字符 ???- 文本对象:- i(,i), a(,a)- i[,i], a[,a]- ...- Ip, ap   段落 --边界空行- 动作-  d, y ,c-  p-  u-  [ctrl] + r- :/pattern(向下搜索):?pattern(向上搜索)  :[范围]s/pattern/replace/[选项] g=global- gcc 注释一行或者取消注释一行- 代码对其: gg=G- 对文件的操作- :write- :quite- :wq- :q!- 多窗口- 水平 :split :new- 竖直: vsplit :vnew- 切换窗口 [ctrl] + ww- 退出窗口 :q :qa :only- shell命令- linux结构- Kernel 管理计算机硬件资源,为上层应用提供运行环境- 系统调用:api- 库函数: 系统调用的封装- shell:命令解释器- 具体的shell: sh, csh, bash, ksh, zsh- 查看帮助手册: man [手册编号] 词条- 关机-  shutdown -poweroff-  shutdown -reboot-  shutdown -halt-  shutdown -c- 用户子系统相关命令- 查看cat/etc/passwd- 添加useradd -m  或者 useradd -s /bin/bash- 删除 userdel -r- 修改 passwd- 切换用户 su- 退除切换 exit
移动求职进展汇总
点赞 评论 收藏
分享
评论
3
11
分享

创作者周榜

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