01.关注用户消息推送
# 01.关注用户消息推送
# 1.1 正文
- 某浪微博平台有很多用户时常的会发布微博,当某个用户发布一条微博的时候,TA的所有关注者都可以接收到这条信息。
- 那么怎么样设计一个合理的解决方案来让用户快速将他所发布的微博信息推送给所有的关注者呢?
# 1.2 第一种方案
- 每个用户所发送的微博都存储起来(时间上有序)。
- 当用户要刷新微博的时候就可以直接拉取TA所关注的人在这个时间内的微博,然后按照时间排序之后再推送过来。
- 机智的小伙伴可能也发现了这种方案的问题,对于某浪微博这种级别的平台
- 他所支撑的用户都是数以亿计的,这样的方案对于读的压力将会是巨大的。
# 1.3 方案二
具体操作说起来也比较简单,对每个用户都维护一块缓存。
当用户发布微博的时候,相应的后台程序可以先查询一下他的关注者,然后将这条微博插入到所有关注着的缓存中。
当然这个缓存会按时间线排序,也会有一定的容量大小限制等,这些细节也不多做赘述。
这样当用户上线逛微博的时候,那么TA就可以直接从缓存中读取,读取的性能有了质的飞升。
如此就OK了吗?显然不是,这种方案的问题在于么有考虑到大V的存在,大V具有很庞大的流量扇出。
比如微博女王谢娜的粉丝将近1.25亿,那么她发一条微博(假设为1KB)所要占用的缓存大小为1KB * 1.25 * 10^8 = 125GB。
对于这个量我们思考一下几个点:
- 对于1.25亿人中有多少人会在这个合适的时间在线,有多少人会刷到这条微博
- 很多像皮皮这种的半僵尸用户也不会太少,这块里面的很多容量都是浪费。
- 1.25亿次的缓存写入,虽然不需要瞬时写入,但好歹也要在几秒内完成的吧。
- 这个流量的剧增带来的影响也不容忽视。
- 微博上虽然上亿粉丝的大V不多,但是上千万、上百万的大V也是一个不小的群体。
- 某个大V发1条微博就占用了这么大的缓存,这个机器成本也太庞大了,得不偿失。
- 那么又应该怎么处理呢?这里也可以先停顿思考一下。
# 1.4 最终方案
- 将方案一和二合并,以粉丝数来做区分。
- 也就是说,对于大V发布的微博我们用方案一处理,而对于普通用户而言我们就用方案二来处理。
- 当某个用户逛微博的时候,后台程序可以拉取部分缓存中的信息
- 与此同时可以如方案一中的方式读取大V的微博信息,最后将此二者做一个时间排序合并后再推送给用户。
编辑 (opens new window)
上次更新: 2024/3/13 15:35:10