高并发下,获取最新评论

加入直播行业四个半月之后,终于接到一个有挑战活。

我司评论系统设计要求观众打开页面时,获取若干条最新历史评论。但是获取评论的地方有bug,获取评论会重复。

在解决这一Bug之后,我发现我们原有的评论逻辑会每隔5s缓存一次最新评论。这样做能减少服务器压力,但是在高并发的情况下,会造成大量丢失。请示大佬之后,大佬表示要达到数据一条不丢失的标准。

在简单研究之后,先将缓存逻辑改为:只要有新发评论,那么就让最新缓存失效,并让第一个请求数据的用户生成缓存。这样的话,用户取到的缓存永远都是最新的。

But!Naive!测试、分析之后发现,在我们现有前后端交互逻辑(下基本做不到数据不丢失(也可能是我太渣了)。下面是我画的我们现有逻辑的时序图(图1),图为高并发情况下,缓存失效时观众获取最新评论过程,图中省略的cache。在3~4步中,如果新插入数据超出了本页范围,那么新的数据将不会被取到。在5~7步消耗的时间中,用户有可能丢失上百条评论。

图1

分析上述交互逻辑,发现主要冲突在于获取最新数据和不断插入新数据之间的矛盾。那么调整下评论加载顺序,问题不就引刃而解了么!下图(图2)是调整后的交互逻辑:

图2

这里也有一点尴尬的地方:万一mqtt并没有收到消息,那么就需要使用上图1中 1~6的逻辑来获取评论了。。。

而更尴尬的是:咨询产品的大佬之后,产品表示这么高并发情况下,用户根本感受不到评论丢失,完全不用管,所以上面都是我在YY... T_T

标签: none
返回文章列表 文章二维码
本页链接的二维码
打赏二维码
添加新评论