前段时间面试时,面试官问,如何设计一个系统实现百万级千万级的消息实时推送,例如微博中的你特别关注的明星发布了新的微博,需要在短时间内将该消息推送给几百万个人,如何做到的呢?
我当时没有什么想法,只是想到将其粉丝塞到消息队列中慢慢推,但是面试官说这种做法太蠢了,我就直接懵逼了,请问在座的各位大佬能否给点想法意见?
我觉得你的面试官故意卖弄,实际上就是打压你而已。这种问题没有上下文根本不知道他想问什么。
不过我可以猜测这么几个方向,你可以参考下,希望你的关注点是技术,而不是一个面试官胡诌一通以后自己瞎琢磨。
(1)首先要明白,在线的用户需要实时推送,不在线的用户不需要(你推送和不推送,没有任何人感知到,除了你的服务器)。微博这种系统,看似用户上亿,但是实际上并发在线的用户并不多。特别是低峰时段。所以你需要优先推送给在线的,以及刚刚上线的用户,别的可以放在队列里面慢慢跑。
(2)这种级别的负载,需要考虑的是分布式的架构,还有网络,而不是单机,单机肯定扛不住,你需要足够多的服务器并发。微博那样的网站,有上百服务器,每个服务器发上万,你还觉得多么。
估计就是想问你多线程处理吧,结合楼上的回答,把用户先分大类,然后在分小类,使用多个线程去处理。
我也同意楼上说的面试官卖弄嫌疑,不知道面试官想表达啥,因为这里面涉及的问题太多了,不知道他到底想问啥。短时间内完成,首先就是资源够不够,系统架构是啥样的,消息到达率达到多少满足要求(不要说100%到达)。
emq 不就是百万级别消息系统吗