帖子更新后给所有关注帖子的用户发提醒,怎么实现最优雅,最简单,性能最高?
以论坛举例,有人发了一个帖子,当帖子有新回复时,默认要给楼主和所有回帖人发提醒,告诉他们这个帖子有更新,但是用户可以在消息设置里关闭回帖通知。
假设现在某个帖子有100层楼,现在有了第101个回复,就要读取前面100个回帖的用户配置,判断他们是否接收提醒,再发送通知。
如果是知乎这样,关注问题的人都做提醒的话,一个问题轻轻松松达到数万人关注,要读取上万人的消息接收配置。
即使现在异步化、分组化、用户配置缓存化,消耗也还是不小,如果帖子数本身又多,整站消耗依然是巨大的。
我能想到的最优方案就是,定时拉取或发送。
方案1:
按帖子为单位,如果帖子回帖数达到某个阈值Y,就不再直接发送新新帖提醒,而是添加一个异步任务每N分钟扫描一次,如果帖子有新回复,就给用户发送提醒,这样即使N分钟内有100个新回帖也只通知一次,如果C分钟内没有新回帖,就失活不再扫描;回复时判断如果在阈值Y下直接通知,如果达到Y,判断上一个最新回帖是否在C分钟内,如果在就是每失活不管,让扫描器通知,如果超过C分钟没有回复,说明帖子已经失活,扫描器已经放弃本帖,直接添加异步发送提醒任务,并且再次重启扫描器,防止挖坟帖又热起来。
方案2:
按用户为单位,定时轮询扫描每个用户关注的帖子有没有新回帖,有就生成提醒,只管活跃用户,非活跃用户上线时拉取一次。
方案1感觉还行,但还是不简单,有没有更简单可行可靠的方案。
推荐文章: