高并发实时排行榜如何设计

面试题简述

我们有一个玩家战力排行榜,战力实时变化,访问量巨大。

我们想知道两件事:

1、当前的 Top 100的战力是多少?

2、某玩家的战力大概排在第几?

在高并发、高波动情况下,你会怎样设计这个系统?怎么保证高可用和高QPS?

面试官想听到的

1、明白排行榜查询 = 有序结构查询;

2、能讲 Redis Sorted Set 的方案;

3、能讲高QPS场景下的分片、缓存、异步等。

4、能讲清 Top 100 和个人排名两类查询的差异。

面试回答举例

排行榜本质上是一个有序集合问题,最合适的结构是Redis Sorted Set。

Redis Zset天然支持:

1、ZRANGE 0 99:拿 Top 100;

2、ZREVRANK player_id:拿个人排名

3、ZSCORE player_id:拿玩家战力。

QPS大、变化快的痛点是两个:

1、战力变化频繁 -> 写入频繁

2、排行计算复杂 -> 读 QPS 巨大

所以我会这样设计:

第一层:Redis Sorted Set缓存排行榜

第二层:主从 Redis 或 Redis Cluster 分担高 QPS

第三层:写入异步化,避免 Redis 过于频繁

第四层:Top 100 做本地缓存 + 异步刷新

第五层:高可用层设计

详细内容可跳转该链接查看详情:http://xhslink.com/o/34N3Fry5EuB

由浅入深分析

1、排行榜天然适合 Redis ZSet;

2、Top 100 是极致高频且变化较小 -> 天然缓存。

3、排行查询依赖 ZSET 的rank特性。

4、真正的压力是写战力变化。

5、实时性与成本成反比,需要控制刷新频率。

面试加分点

1、提到滑动窗口稀疏更新。

2、提到冷热榜切分。

3、提到 Redis ZSet 基于跳表。

4、提到排行榜分页难点。

#面试##实习##春招##面经#
技术必备题库 文章被收录于专栏

带你复盘大厂后端和算法面试,拆解面试官到底想听啥

全部评论

相关推荐

02-25 16:55
已编辑
北京工业大学 Java
211本,找日常实习的话,如果面向中厂的话,需要刷hot100么?因为之前从来没刷过,算法仅限于学校课程水平,准备3月投递简历,现在还需要背八股文,时间有些紧张,还需要刷算法题么?同时什么样的公司可以算是中厂呢?
程序员小白条:中大厂说的上名字的,必定要算法,hot100只是最基础的了,题库远不止100题捏,一般在300-400题量之间,算法=学校课程=简单题也做不出,多准备八股文和算法吧,其他项目可以放放,精刷算法就行了,花时间成长很快的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务