这是一道真真实实的阿里面试题:“请解释下为什么鹿晗发布恋情的时候, 微博系统会崩溃,如何解决?”
哎,我原本以为认真学技术就可以了。但面试官的这个面试题还得让我关注明显恋情,不知道程序员单身居多吗?
话说一个合格的程序员,每看过一个系统,就应该了解的五脏六腑,内部设计。大型系统的底层设计尤其值得我们思考,现在面试题也开始追热点了,和高考一样,实时关注社会百态。
要回答好这个问题,你首先得知道鹿晗是谁?要不然“业余草”发布一条微博,连个阅读都没几个。
鹿晗首先是一个明星,流量明星。粉丝量众多,所以,他已公布恋情,瞬间的流量很大。但是我们要注意到,这里面有一个问题。就是这个瞬间流量增大,增的不仅是浏览量。如果仅仅是阅读,我们只需把鹿晗的这条微博放入 Redis 缓存,以微博技术,不可能挂得了的吧。
这个之所以微博挂掉,是因为这个时间段,转发 + 评论量非常的大,并不是只有阅读量大。这个要注意,几乎所有的大型网站挂掉,基本上都是并发写造成的。并发读,以大型公司的技术,除了 12306 这样的,基本上很少有故障的。
另外针对明星的微博,会有一个消息推送功能。第一时间热点数据,只要你联的有网,都能够收到推送。所以一个热点事件,普通人转不转发没啥影响。因为大家都收到了同样的推送。
请解释下为什么鹿晗发布恋情的时候, 微博系统会崩溃,如何解决?
所以,总结下来,热点微博。第一个就是 Redis 的大 Key 问题。第二个就是,热点消息你是选择 pull 还是 push。第三个就是分表的处理,不能把转发的,评论等瞬时数据分到同一个库和表中。