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. Composer更新慢的解决方案

    有两种方式启用镜像服务: 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中. 单个项目配置: 将配置信息添加到某个项目的 composer.json 文 ...

  2. 如何破解Excel VBA密码

    首先,如果文件格式是(.xslm),需要先打开Excel文件,另存为2003版格式(.xls). 然后用普通的文本编辑器(我用的是NotePad++)打开这个文件,注意文件类型选“所有文件”. 然后在 ...

  3. 20175312 2018-2019-2 《Java程序设计》结对编程练习_四则运算(第二周:整体性总结)

    20175312 2018-2019-2 <Java程序设计>结对编程练习_四则运算(第二周:整体性总结) 结对对象与其博客链接 20175309 刘雨恒:https://www.cnbl ...

  4. rpm 安装、卸载软件命令 ——以nginx为例

    1.安装 命令:rpm    -ivh    nginx-1.14.0-1.el7_4.ngx.x86_64.rpm 2.查看安装结果 命令:rpm   -qa  | grep  nginx 3.升级 ...

  5. linux下安装部署ansible

    linux下安装部署ansible 介绍 Ansible是一种批量部署工具,现在运维人员用的最多的三种开源集中化管理工具有:puppet,saltstack,ansible,各有各的优缺点,其中sal ...

  6. Python介绍RabbitMQ使用篇二WorkQueue

    1. RabbitMQ WorkQueue基本工作模式介绍 上一篇我们使用C#语言讲解了单个消费者从消息队列中处理消息的模型,这一篇我们使用Python语言来讲解多个消费者同时工作从一个Queue处理 ...

  7. 动态规划——Burst Ballons

    题意:给定n个气球.每次你可以打破一个,打破第i个,那么你会获得nums[left] * nums[i] * nums[right]个积分. (nums[-1] = nums[n] = 1)求你可以获 ...

  8. 转UI么?不想

    最近一直在弄UI   对于UI实在是不想弄了    很痛苦...我一开始都比较热衷后台开发  但是前端UI 我只是有点兴趣而已,但是还一直要做...太累了    或许要学的东西还是有很多的!一直不知道 ...

  9. (97)Wangdao.com_第三十天_触摸事件

    触摸事件 只有触摸屏才会引发这一类事件 触摸事件 和 鼠标事件 同时触发,即使这个时候并没有用到鼠标. 这是为了让那些只定义鼠标事件.没有定义触摸事件的代码,在触摸屏的情况下仍然能用. 如果想避免这种 ...

  10. python中的包与模块

    '''模块与模块之间的调用''' import first #调用整个变量 print(first.Index) # #调用函数 print(first.hello()) # per = first. ...