2020-08-05:请解释下为什么鹿晗发布恋情的时候, 微博系统会崩溃,如何解决?

举报
福大大架构师每日一题 发表于 2020/08/19 11:16:28 2020/08/19
【摘要】 福哥答案2020-08-05:A.获取微博通过 pull 方式还是push 方式。B.发布微博的频率要远小于阅读微博。C.流量明星的发微博,和普通博主要区分对待,比如在 sharding的时候,也要考虑这个因素。访问流量超过了系统阈值,导致一大堆请求在内存里面排队;并且前端可能已经超时,用户不断刷新重新发送请求,从而队列里面的请求越来越多,导致更大的雪崩。假设这些请求有三种,一种是在鹿晗这条...

福哥答案2020-08-05:

A.获取微博通过 pull 方式还是push 方式。
B.发布微博的频率要远小于阅读微博。
C.流量明星的发微博,和普通博主要区分对待,比如在 sharding的时候,也要考虑这个因素。

访问流量超过了系统阈值,导致一大堆请求在内存里面排队;并且前端可能已经超时,用户不断刷新重新发送请求,从而队列里面的请求越来越多,导致更大的雪崩。假设这些请求有三种,一种是在鹿晗这条微博下评论,一种是请求这条微博的评论的某一页,一种是用户转发这条微博。
这个问题可以从以下几个方面考虑:
1.明星微博流量倾斜严重,系统如果对每个用户同样对待,则系统流量不好掌控。应该考虑将大V,明星等等,特殊分区对待。并且,发送的微博越新,越应该分配更多资源。例如,根据用户对缓存和数据库进行分库分表,同时大V进入特定的资源更好的数据库和缓存。
2.考虑加入主动推送的机制,例如关注的大V发微博,评论更新等等,可以通过长连接推送控制,减少用户的主动请求。
3.热点微博评论,并不是需要每个用户每次刷新都必须看到最新的,可以存在一定的不一致性,所以缓存可以分层,同时为了用户的体验,可以根据用户id分配到某个实例,如果这个实例运转正常,就一直用这个实例,缓存分层:应用实例内缓存(例如请求之后,缓存本地,过10秒刷新) -> 公共缓存集群(例如redis集群,一主多从)同步 -> 数据库
4.用户转发微博数量也比较多,但是不一定需要所有人可见。流量高峰时,可以减缓或者暂停用户转发微博的同步,会有一段转发后只有自己可见的情况。


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。