[Netfix] 关于视频系统, CDN和分段

  1. CDN上的视频存在replica吗?我觉得可能不存在,因为可能成本比较高,而且服务器有备份;但是这样如果热门剧看一半这个CDN挂了,所有request都去上一级的CDN取,可能会承受不住吧
  2. CDN(包括OCA)应该没办法autoscale吧 如果挂了就只能人手动加机器或者排查问题?
  3. 所有视频格式都是能随便分割然后合起来又可以用吗?是不是需要拷贝一些metadata到每个小segement
  4. 在视频分成小段部署到CDN上,如果用户点了进度条上的一个新位置,那dataflow是说,先去web server查这个分片的位置,然后服务器返回client一个URL然后用户去CDN取;还是CDN或者视频协议直接支持这个?
  5. 一开始有同学问老师怎么判断哪个CDN离用户最近,老师说这个是什么network routing(这一部分其实没太听懂), 但是后来在netflix那个数据流的图里又有一个steering service,也是告诉用户用哪个CDN的,就搞不懂到底需不需要单独一个service来做这件事。

谢谢!

  1. 一个 CDN 内部可以存多份的视频数据方便 serve traffic。如果一个 CDN 完全挂了,那么 client 会把 traffic 会 redirect 到其他 CDN 甚至 Origin Server.
  2. Autoscale 是针对机群而言,一台单机(比如一台在ISP机房里的 OCA)没有 Scale 的能力,更不要说 Autoscale 了。
  3. 切割完了,一个大视频就变成很多小视频,可以独立播放,所以肯定要有 metadata 的。
  4. 视频协议会把一个实际由一堆分段视频组成的视频集合抽象成一个视频。视频协议会去分段取实际的视频文件。
  5. 这是指的是两种不同的做法,可以参考这个帖子。一种是 Anycast,就是上课说的使用 ISP Routing 来找到最近的。第二种是使用 CDN 的 DNS Resolver 根据它的数据库来找,在 Netflix 的情况下就是用 Netflix 自己服务中 host 的 DNS resolver 来做。

谢谢老师回答!

关于5,那一般的跨大洲的service是怎么找到服务器的呢 比如微信
我登微信的时候自动就可以连到北美的server,我妈登的时候连国内,这个寻找最近的server是DNS完成的还是微信有个全世界级别的proxy把我的request转给北美?

应该是你连北美的 你妈连国内的 你发消息 应该是存北美数据中心 然后还有一个request 发到Queue等待被pull 这样做到跨数据中心的数据同步

这个问题已经不是在问 CDN 了,因为微信发文本消息不需要 CDN。你的账号如果是北美的账号,数据会存在北美,如果是国内账号,数据会存在国内(这是应对监管部门的要求)。消息可以跨数据中心做 Push 和 Pull。你的 DNS 只要找到本地的数据中心就可以了,DNS 只解析域名,没有产品逻辑。

是的,我后面补充的问题跟CDN无关。所以过程就是
我发一个消息到北美的websocket service,
消息存在北美的数据中心,同时有一个全球级别的proxy把我的消息转到国内的messaging service
再通过websocket service发给我妈?

谢谢回答
为啥要用queue发然后等待pull啊

国内 Messaging Service 知道数据库在哪里,所以当发现需要读取的信息来自北美的时候,直接读取北美数据中心的数据就可以了。

主要考虑实时性和retry吧 我感觉 你也可以向老师说的 “所以当发现需要读取的信息来自北美的时候,直接读取北美数据中心的数据就可以了”, 这样设计更简洁 但是可能会慢一些, 本质还是pull.

如果你用push, 我个人感觉也行, 可能系统会更复杂(主要是跨洋的这种情况应该是微信的流量的一个小部分), 如果没有Queue的话你, 你也是没办法解决失败的问题.