朋友遇到一个面试题,微信朋友圈怎么设计?

2021-04-23 17:00:48 +08:00
 UserNameisNull
假设微信朋友圈的
读 QPS 100w
写 QPS 10w
每个用户最多 400 个朋友,
发朋友圈和刷朋友圈该怎么设计?
数据怎么存储?
求大佬解答。
8563 次点击
所在节点    程序员
30 条回复
THESDZ
2021-04-23 17:04:23 +08:00
查阅 feed 流
brader
2021-04-23 17:09:47 +08:00
这种面试不就是在空手套白狼?白嫖人家的高并发设计架构
hejw19970413
2021-04-23 17:11:13 +08:00
我感觉 面试想问 数据表和缓存怎么设计,可以参考评论系统。
ch2
2021-04-23 17:13:07 +08:00
这种有时间先后顺序的 timeline,就是用 redis 的 list(双向链表)专门为每个人保存一个缓存
如果关注者数量不多,就采用采用 push 模式,否则采用 pull 模式
push 模式是一个人发了朋友圈往他朋友们的 timeline 里同步,删除了就全删掉
点赞也是先临时修改对应的链表结点,再定期落到关系数据库里
PiersSoCool
2021-04-23 17:45:30 +08:00
空手套白狼倒是也没那么浮夸,这种就算你说了,如果对方没做过,也做不了
mlcq
2021-04-23 17:47:22 +08:00
这个好像之前有个帖子讨论过,读扩散与写扩散
p2pCoder
2021-04-23 17:48:29 +08:00
feed 流系统设计
有很多博客系统性讲这个
zhuzhibin
2021-04-23 20:58:13 +08:00
发发帖子老哥们
binux
2021-04-24 00:12:03 +08:00
读写又不是单机实时的,4000w 怎么了?
nicebird
2021-04-24 00:17:15 +08:00
才 400 好友,写扩散就行了
jinliming2
2021-04-24 00:32:12 +08:00
iseki
2021-04-24 00:38:32 +08:00
写扩散吧,读扩散更吓人,按他这么算,读扩散不得 400*100w = 40000w ? 每秒 4 亿?

感觉还是从优化的方向想办法,不是每个人都有 400 朋友,更不是每个人都每秒不停刷刷刷
securityCoding
2021-04-24 00:55:17 +08:00
https://www.v2ex.com/t/768603

并发写:分库分表+mq 异步没什么扛不住的
并发读:一个集群扛不住那就多集群,做好 uid 分片策略
cassyfar
2021-04-24 05:58:44 +08:00
100w qps 为啥 redis 扛不住了?我们组也是 100w 读 qps 。用的 redis 。至少 3 个 9 uptime 。我怀疑面试官水平不行吧,估计都没接触过百万 qps 服务。
cassyfar
2021-04-24 06:00:13 +08:00
读扩扇( pull )没啥毛病
xuanbg
2021-04-24 08:15:22 +08:00
时间线索引,这量级不单独建一个和内容分离的索引表是不可能的
ifhwhlwpto
2021-04-24 10:05:44 +08:00
发朋友圈的时候给每个朋友发一条消息
刷朋友圈的时候从手机本地读缓存的消息
把用户的手机用来做缓存,并把问题转化为了如何实现一个高并发的 IM
hejw19970413
2021-04-24 10:11:55 +08:00
你就算是 100w 的请求量,其中有好多都是重复拉取相同的数据吧, 那么就是用 redis + memacache 做多级缓存,利用 kafka 来做消息的队列 ,可以利用 kafka 不同的主题概念,将用户的行为做不同的主题投放,如果一台 Kafka 扛不住这些,那么用不同的 kafka 做不同的主题,起个 job 服务来消费这些消息 ,memacache 可以做内容的缓存,redis 可以做内容消息的索引缓存。根据不同的用户的用户量进行轻重隔离,例如朋友多的用户和朋友少的用户做不同的集群处理。如果有用户很频繁的拉取,可以在你的客户端都拉取限制,然后将这种更新频繁的用户做为热点处理,把缓存的级别提升,做到内存缓存。然后如果用户的拉的内容相同,利用单飞让这些相同的内容,全部命中一个点。 然后你这些服务启动链路追踪 ,调优系统调用的性能。
samun
2021-04-24 12:28:46 +08:00
朋友圈内容可以设置查看权限的 这个怎么搞
leimao
2021-04-24 12:37:33 +08:00
完全不知道

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/772767

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX