之前在新浪微博工作过。产品上层面的问题我没研究(比如Twitter 早期是否也有类似限制),系统性能肯定是需要考虑的因素之一,我就从这个角度说明一下。
关注关系是用关系型数据库存储的,光从数据的数量级上来讲,如果不设置上限,理论上1亿的用户,最多会产生 1亿 x 1亿 的记录数,而且对活跃用户而言,关注关系没有冷数据,不能根据时间做sharding。(相对而言,一年之前发的微博,就很少会有人去访问。)
最早的时候,feed(用户的timeline)是通过推送的方式聚合的,你每发从一条微博,都会在后台把这个微博推送到你所有粉丝的 feed 队列。于是,苍老师发一条微博,就会让服务器产生大量的计算以及数据读写。这种方式叫做 push (推)。
后来大家认为这样会产生大量不必要的服务器消耗,比如把feed 推给离线用户,是没有太大意义的。然后改,改成用户第一次上线时 pull(拉),随后push(于是不需要push 到离线用户了)。pull 的意思就是,从你关注的所有人中把最新的 500 条 feed 找出来。这种方式下,如果不设置关注人数限制,比如你关注了 10w 人,那你今天早晨起床开微博,肯定会慢得想骂人。