【计网 CDN】计算机网络 CDN(Content Delivery Network)分布式网络架构详解:中科大郑烇老师笔记 (八)

本文主要是介绍【计网 CDN】计算机网络 CDN(Content Delivery Network)分布式网络架构详解:中科大郑烇老师笔记 (八),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 0 引言
  • 1 为什么需要分布式的网络架构?
  • 2 视频流化服务
    • 2.1 多媒体:视频
    • 2.2 存储视频的流化(Streaming)服务
    • 2.3 流媒体传输协议:DASH
    • 2.4 面临挑战:服务器如何向上百万用户同时提供视频流化内容?CDN
    • 2.5 CDN的一个简单应用案例
    • 2.6 真实CDN应用场景 Netflix(网飞)

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:计算机四大基础专栏
  • 📜 其他章节:网络快速入门系列、计网概述、计网应用层详解、计网Web和HTTP、计网FTP、计网EMail、计网DNS、计网P2P
  • 💥 标题:【计网 CDN】计算机网络 CDN(Content Delivery Network)分布式网络架构详解:中科大郑烇老师笔记 (八)
  • ❣️ 寄语:人生的意义或许是可以发挥自己全部的潜力,所以加油吧!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

CDN是一种分布式的网络架构,上一章节讲的P2P也是一种网络架构,接下来总结一下其他的网络架构有哪些:

  • P2P(Peer-to-Peer)网络:P2P网络是一种分布式网络架构,其中每个节点都可以充当客户端和服务器。在P2P网络中,节点之间可以直接通信和共享资源,而不需要传统的客户端-服务器模式。P2P网络常用于文件共享和流媒体传输等场景。
  • 客户端-服务器(Client-Server)模式:这是最常见的网络架构之一。在客户端-服务器模式中,客户端发送请求,并从服务器接收响应。服务器提供服务、资源或数据,并等待客户端的请求。这种模式适用于许多互联网应用,如网站、电子邮件和数据库。
  • 对等网格(Grid):对等网格是一种分布式计算架构,将许多计算资源组合在一起,形成一个大规模的虚拟计算机。这些计算资源可以是计算机、存储设备或其他设备。对等网格允许任务在多个节点上并行执行,从而提高计算效率和性能。
  • SOA(Service-Oriented Architecture):SOA是一种基于服务的软件架构,其中应用程序通过服务的组合来实现特定的功能。服务是可独立访问和使用的软件组件,可以通过网络进行通信。SOA可以提高系统的灵活性、可扩展性和重用性,使不同的应用程序可以相互协作。
  • 边缘计算(Edge Computing):边缘计算是一种将计算和数据处理推向网络边缘的架构。在边缘计算中,计算任务和数据处理可以在靠近数据源和终端设备的边缘节点上进行,减少了数据传输的延迟和网络拥塞。边缘计算常用于物联网(IoT)应用和对实时性要求较高的场景。

在这里插入图片描述

1 为什么需要分布式的网络架构?

目前视频流量占据着互联网大部分的带宽(例如YouTube,占据16%的ISP下行流量,同时有~1B YouTube用户),这就面临新的挑战:

  • 挑战一(规模性):如何服务 ~1B级别的用户。假如是单个超级服务器是无法给这么多用户提供并发的服务的(可以思考一下为什么)。
  • 挑战二(异构性):不同用户拥有不同的能力(例如:有线接入和移动用户:带宽丰富和带宽受限用户)
  • 解决方案:分布式,应用层面的基础设施CDN。

CDN就是分布式的网络架构,来看看CDN是如何解决互联网杀手级应用高并发视频服务的。

2 视频流化服务

首先介绍一下互联网中视频是如何进行传输的

2.1 多媒体:视频

在这里插入图片描述

在这里插入图片描述

2.2 存储视频的流化(Streaming)服务

  • 假如要将视频先全部下载完再观看的话,那样效率低、用户体验也很差。所以就需要一个新的方案解决视频内容传输服务(视频流化服务)。
  • 视频流化服务是将视频内容实时传输给用户的服务,用户可以在不需要下载整个视频的情况下即时播放。下载一部分放入缓冲区中,然后用户在缓冲区中读取数据播放视频。下载和读取是并行的。

在这里插入图片描述

2.3 流媒体传输协议:DASH

  • DASHDynamic Streaming over HTTP)是一种流媒体传输协议,用于在 HTTP协议 上实现动态自适应的视频流传输。DASH可以根据用户的网络条件和设备能力,在不同的比特率和分辨率之间进行自动切换,以提供流畅的视频播放体验。

所以使用DASH协议实现动态自适应的视频流传输服务,客户端和服务器需要如何工作:

  • 服务器使用DASH协议需要做的工作:
    • 将视频文件分割成多个块
    • 每个块读取存储,编码与不同码率(8-10种)
    • 告示文件(manifest file):提供不同块的URL,以及块的编码、描述信息等等信息
  • 客户端使用DASH协议需要做的工作:
    • 先获取告示文件
    • 周期性地测量服务器到客户端的带宽
    • 查询告示文件,在下一个时刻请求一个块,HTTP头部指定字节范围
      • 如果带宽足够,选择最大码率的视频块
      • 会话中的不同时刻,可以切换请求不同的编码块(取决于当时的可用带宽)
  • “智能”客户端:客户端自适应决定:
    • 什么时候 去请求块(不至于缓冲挨饿,或者溢出)
    • 请求 什么编码速率 的视频块(当带宽够用时,请求高质量的视频块)
    • 哪里 去请求块(可以向离自己近的服务器发送URL,或者向高可用带宽的服务器请求)

2.4 面临挑战:服务器如何向上百万用户同时提供视频流化内容?CDN

  • 方法一:单个的、大的超级服务中心“mega-server”,该方法存在下面几点问题
    • 服务器到客户端路径上跳数较多,瓶颈链路的带宽小导致停顿
    • “二八定律”决定了网络同时充斥着同一个视频的多个拷贝,效率低(付费高、带宽浪费、效果差)
    • 单点故障,性能瓶颈
    • 周边网络的拥塞
  • 总结:该方法简单,但是这个不可扩展
  • 方法二:通过CDN全网部署缓存节点,存储服务内容,就近为用户提供服务,提高用户体验。CDN运营商有下面两种部署策略,分别是enter deep、bring home。
    • enter deep将CDN服务器深入到许多接入网
      • 更接近用户,数量多,离用户近,管理困难
      • Akamai,1700个位置
    • bring home部署在少数(10个左右)关键位置,如将服务器簇安装于POP附近(离若干1st ISP POP较近)
      • 采用租用线路将服务器簇连接起来
      • Limelight

网络应用商购买CDN运营商(例如,中国蓝汛)购买内容加速服务,CDN将其内容缓存到其他服务器上,用户通过域名解析,寻找跳数最少或者带宽相对较大的链路的中间服务器。
在这里插入图片描述

2.5 CDN的一个简单应用案例

下图中的一些名词解释:

  • netcinema.com:是一种ICP(互联网内容提供商)提供的服务的原始服务器
  • netcimem’s authoritive DNS:ICP的权威名字服务器
  • KingCDN.com:CDN网络运营商加速服务的开始节点
  • KingCDN authoritive DNS:CDN的权威名字服务器

在这里插入图片描述

步骤:

  1. Bob用户浏览netcinema.com网页,页面中有个视频链接,点击进去了。
  2. 浏览器解析视频链接,向Local Name Server 本地名字服务器解析IP地址,返回了netcimem’s authoritive DNS域名地址(没有直接返回IP地址,而是进行了重定向)
  3. 解析重定向URL后,重定向到KingCDN authoritive DNS服务器,然后该服务器返回了离用户最近的CDN服务器IP地址。由这个节点给用户提供视频流化服务。

在这里插入图片描述

2.6 真实CDN应用场景 Netflix(网飞)

在这里插入图片描述

这篇关于【计网 CDN】计算机网络 CDN(Content Delivery Network)分布式网络架构详解:中科大郑烇老师笔记 (八)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/287780

相关文章

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

一文详解如何在Python中使用Requests库

《一文详解如何在Python中使用Requests库》:本文主要介绍如何在Python中使用Requests库的相关资料,Requests库是Python中常用的第三方库,用于简化HTTP请求的发... 目录前言1. 安装Requests库2. 发起GET请求3. 发送带有查询参数的GET请求4. 发起PO

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

Java中的Cursor使用详解

《Java中的Cursor使用详解》本文介绍了Java中的Cursor接口及其在大数据集处理中的优势,包括逐行读取、分页处理、流控制、动态改变查询、并发控制和减少网络流量等,感兴趣的朋友一起看看吧... 最近看代码,有一段代码涉及到Cursor,感觉写法挺有意思的。注意是Cursor,而不是Consumer

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

Java 8 Stream filter流式过滤器详解

《Java8Streamfilter流式过滤器详解》本文介绍了Java8的StreamAPI中的filter方法,展示了如何使用lambda表达式根据条件过滤流式数据,通过实际代码示例,展示了f... 目录引言 一.Java 8 Stream 的过滤器(filter)二.Java 8 的 filter、fi

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring