Netflix是怎样运行的(极度简化版)— 每次点击播放按钮背后的复杂东西

本文摘译自 How Netflix works: the (hugely simplified) complex stuff that happens every time you hit Play

本文并未讲到任何实现细节,只是概略的描述了一些基础架构。

规模

  • 每日2.5亿小时的视频播放。

  • 来自190个国家的0.98亿付费用户。

微服务

文章举例讲了一下微服务的好处,道理大家都懂。Netflix花了大约10年单服务应用重写成了微服务架构,估计大约又700个微服务分别负责了Netflix的各种功能。

  • 百级的微服务

  • 千级的日常生产变更

  • 万级的实例数

  • 十万级每分钟的用户交互

  • 百万级的用户数量

  • 百亿级的度量标准(采集点?)

  • 千亿级小时的流视频

  • 十级的运维工程师

最后说的数十名的运维工程师,数量可以说是非常少了,应该是得益于DevOPS和云服务。

AWS

尽管和Amazon的Prime Video存在竞争关系,Netflix依然是AWS的重度用户。不再自行维护硬件而是把服务挪到云上。并且拿苹果和三星的合作关系来说明这种君子协定是种巨大的双赢。

版权

对于非Netflix自制剧,都需要去谈判播放权,并且会受到不少限制。同时在分发层面,也可能会签署一些排他协议导致延迟上映或者不能上映。举例来说,纸牌屋的第五季在中东地区相对其他150多个国家,延迟了整整一个月。

转换

为了可以满足不同的设备,不同的网络,不同的屏幕尺寸,不同的音频格式;高质量的原画会被转码成很多的格式。

CDN

为了减少延迟,Netflix使用了CDN。早期的时候使用了多种CDN网络,比如Akamai, Level 3 和 Limelight Networks 去分发他们的内容。后来随着用户的增长,意味着他们必须在更多的位置分发内容,同时成本更低;所以他们构建了自己的被称为Open Connect的CDN网络。

当点击播放按钮的时候,Netflix会定位到10个最近的Open Connect设备,并且判断出其中最快的一个。这也是为什么视频开始的时候模糊,但是突然变得清晰 — Netflix切换服务器直到连接上提供最好视频质量的那个。

Netflix是怎样运行的(极度简化版)— 每次点击播放按钮背后的复杂东西的更多相关文章

  1. <a>每次点击都会让浏览器重新打开一个窗口问题

    <a> 标签的 target 属性规定在何处打开链接文档.如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称与 ...

  2. vue 项目, 通知子组件更新,父组件中每次点击按钮重新加载子组件,(重新生成dom 元素)

    vue是组件化开发的项目,很多情况下会把公共组件提取出来,来减少代码量,提高开发效率,和以后更好的可维护性.很多情况下,父组件中都会引用子组件这种情况.通过给在父组件中引用的子组件标签上添加属性,来渲 ...

  3. 页面上有3个输入框:分别为max,min,num;三个按钮:分别为生成,排序,去重;在输入框输入三个数字后,先点击生成按钮,生成一个数组长度为num,值为max到min之间的随机整数点击排序,对当前数组进行排序,点击去重,对当前数组进行去重。 每次点击之后使结果显示在控制台

    <!DOCTYPE html> <html> <head> <!-- 页面上有3个输入框:分别为max,min,num:三个按钮:分别为生成,排序,去重: 在 ...

  4. jqgrid 不能选中行, 每次点击单元格都自动选中第一行

    最使用jqgrid表格插件写了一个功能.功能完成后显示一切正常,但是经过测试后发现,每次点击数据行时,都会自动选中第一行,无法选中其他数据行.经过一番探索,最终发现是加载进来的字段没有主键导致了这个问 ...

  5. click 事件 arguments.callee 每次点击自动* 2

    今天在测试JQUERY(版本3.0,向下兼容3.0)时发现一个很特别的现象,代码如下: $($('button').get(4)).click(function(){ alert($(this).ht ...

  6. 每次点击按钮后,判断页面是否已经有该行,没有弹出repeater的一行,并给他赋一个这行附值,没有则跳出

    protected void btnAdd_click(object sender, EventArgs e) { try { //记录第几次追加 pressCount++; typeString.A ...

  7. robot framework程序运行过程中,遇到点击事件之后,未出现点击之后的效果(求解)

    1.click Element操作,在实际过程中偶然会出现,日志显示已点击成功,但是实际自动化页面,没有点击成功之后的操作 现象: 现象描述:程序执行到点击侧边栏的[人员信息]之后,日志显示已经点击成 ...

  8. java代码对按钮进行监听---------------打印出每次点击按钮的次数

    其实,我真不会写嗯? package com.a.b; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...

  9. 给页面上所有的a标签增加随机数每次点击保证最新

    $(document).click(function(){ $("a").each(function(){ if($(this).parent().parent().hasClas ...

随机推荐

  1. MySQL视图,函数,触发器,存储过程

    1. 视图 视图是一个虚拟表,它的本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来, ...

  2. docker /var/lib/docker/aufs/mnt 目录满了,全是垃圾数据

    #!/bin/sh echo "==================== start clean docker containers logs ======================= ...

  3. SpringBoot整合Dubbo,并实现dubbo实现动态调用

    在一些业务场景中,CP定单提交过来,需要提交到不同的通道进行业务处理 本文通过Dubbo以定义一个interface,各个通道方来实现这个接口.通过group来区分不同的通道 有需要的同学可以下载 示 ...

  4. scrapy相关:splash安装 A javascript rendering service 渲染

    0. splash: 美人鱼  溅,泼 1.参考 Splash使用初体验 docker在windows下的安装 https://blog.scrapinghub.com/2015/03/02/hand ...

  5. SOUI taobao SVN目录结构说明

  6. 【软件工程】分布式版本控制系统Git的安装与使用

    作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 远端库地址:https://github.com/Richa ...

  7. Microsoft Office Word 中的公式自动编号

    先插入公式,#,插入题注(交叉引用),生成了标号.此时整个公式是题注样式.在公式和标号之间插入一个样式分隔符. ____________________________________________ ...

  8. rem实现移动端自适应页面

    一.把px转换成rem方案 1.cssrem插件 2.css预处理器 3.rem-unit插件 4.px2rem插件 rem就是相对于根元素的font-size来做计算,设置好根结点字体大小,子节点用 ...

  9. CodeForces - 1013C C - Photo of The Sky 贪心

    题目链接: https://vjudge.net/problem/1735276/origin 题目大意与思路: 题目的基本意思就是求一个矩形的最小面积. 这个可以用最大最小值, 将他们分为X和Y组. ...

  10. 2017-2018 ACM-ICPC, Central Europe Regional Contest (CERC 17)

    A. Assignment Algorithm 按题意模拟即可. #include<stdio.h> #include<iostream> #include<string ...