找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 24088|回复: 6
收起左侧

系统设计题: 设计 Netflix/Spotify

[复制链接]

7

主题

6

精华

105

积分

资深会员

Rank: 2

积分
105
发表于 9-8-2016 11:26 AM | 显示全部楼层 |阅读模式

亲!马上注册或者登录会查看更多内容!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 Sophia 于 9-22-2016 09:38 AM 编辑

下面是某人列的具体的面经,可以参考

让我设计一个 Netflix/Spotify,follow up 很多 比如如何限制同一个用户多处登录不能同时看一个资源,如何实现根据用户的网速调整清晰度,怎么热门推荐等等。
对于设计登录系统,首先我们先要设计基本的login系统,首先支持Register/login,就需要一个基本的用户表,如果要支持更复杂一点的登录系统,包括verification,ban,inactive,removed,就需要一个status来记录每个user的状态。
如果还要支持用户可以从多个设备登录,不同的设备会有不同的sessionid,但是却有相同的user——id,如果不想要同一个用户可以在多个设备上播放同样的资源,我们就要记录每个用户每个session正在play的资源,然后保证每个session不能play相同的song_ID或者video_id。如果要根据网络速度调整清晰度,我们就需要先测量网络的情况,让client端ping一下服务器,根据收到的ping再向服务器请求不同清晰度的资源。资源本身不应该存在服务器上,可以存在离客户端很近的CDN上。
然后要看播放器的类型,如果是app的话,这个app会需要向DNSserver请求我们服务器的地址,然后我们服务器向clientload网页(如果是从浏览器的话,如果是app的话,就不需要load网页,直接去请求源地址就可以了)。然后网页再加载播放器(flash或者HTML5的),最后再请求源地址,源地址应该是放在附近的CDN上面的,所以很快。
接下来是推荐系统,假设问怎么样设计一个推荐系统,推荐给用户Top10most frequentplayed。最简单的用MinHeap,把所有的play过的video或者audio都记录一个frequency,这个记录可以放在内存里(可以是cluster的这种比如redis)这样便于快速的更新和存取。我们希望这个工作放在worker里做,这样可以不影响整个系统的throughput。当worker完成了工作以后,就可以Update所有的client,这个工作也可以由一个worker来做,这里我们可以用push也可以用pull,也可以两者相结合,push的话只需要push给在线用户,pull的话对于刚上线的用户来更新最新结果。
外排序就是假设内存不够用,那么我们就将所有的数据分成小块,然后每个小块都可以放进内存里排序,排好了序的这些小块再进行mergesort。就得到了所有数据的排序结果。
还有一个followup就是因为有很多用户在同时播放视频文件,有可能同时有很多人在看同一个视频,那么这个视频的freq就会有很多+1,怎么样保证所有的+1都记录下来呢?我们可以用一个aggregator,专门记录这种update,等update到了一定的数量或者一定时间做一次batch的update。






评分

参与人数 1金钱 +2 收起 理由
Sophia + 2 很给力!祝您面试工作学习顺利~

查看全部评分

0

主题

0

精华

4

积分

新米人

Rank: 1

积分
4
发表于 9-9-2016 08:05 AM 来自美国米群网手机版 | 显示全部楼层
感谢mobilict分享~~~
回复 支持 反对

使用道具 举报

发表于 9-9-2016 08:06 AM | 显示全部楼层
感谢您的认真和用心的分享!大米满满送上!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表