热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CDN总结之一

前言:一直想做一个CDN的全面总结,虽然没有做出什么东西,但是要做到知其所以然。辛苦总结,请尊重作者。PDF版本已经上传ht

前言:一直想做一个CDN的全面总结,虽然没有做出什么东西,但是要做到知其所以然。辛苦总结,请尊重作者。


PDF版本 已经上传http://ishare.iask.sina.com.cn/f/25611471.html

----------------------------------------------------------------------------------------------

1什么是CDN


1.2 背景

互联网已成成为人们生活不可或缺的部分。互联网应用的快速发展,应用转变趋势为:强调互操作性、以用户为中心的设计、在线服务、允许多终端多网络的接入,互联网也相应的从一个基于内容的通信架构(content-based communication)成为了一个基于社会的组织网络(social-based community network)。新的应用不仅仅要求网络的简单性与扩展性,还包括对可用性、可靠性、可扩展性,以及具体服务的其他特性要求,为了克服目前网络的缺点、满足未来应用的使用,CDN是一个重要的手段。[1]


1.2.1 应用转变趋势

Higher Scalability(高可扩展性):最新的数据(June, 2011)显示,互联网用户已经达到了6.9billion,而且这一数字持续增长。[2]同时,不同的电子终端也接入到网络。这些需要网络以低成本、高效率的方式分发和处理内容。

Higher Capability(高能力性):互联网上数据类型的增多以及其大小的大幅增加,要求网络有更高的处理、存储和通信能力。

Higher quality of service(QoS):目前流行的流媒体应用和SNS应用,都需要有较高的QoS保证,例如:快速启动(lower startup delay,即用户从发出请求到被相应的时间间隔)、低时延、高连接性等。

Stronger interactivity(更高的交互性):互联网已成为一个社区性网络,内容的提供不再是单靠以往从单一数据源获得数据,现在人人都可以成为内容的创建者和发送者,即除了以往从client到central server的模式,增加了users-to-users的模式。

Heterogeneity(异构性):重点体现在两个方面:设备与网络,即异构的设备终端和接入网络。

安全性:不同的应用对网络安全要求具有差异性。


1.2.2 IP网络的局限性

自从DARPA网络和Galactic Network概念[3](由J.C.R. Licklider提出,允许用户在世界的任意地方搜集数据、处理程序)在1962年产生以来,互联网改变了计算机和通信世界。其主要目的就是为了资源的共享。

基于包交换(packet-switched)的IP网络采用端到端的原理[4],其设计原理可以概括为:分层、基于包交换、合作网络、端到端。[5]


基于TCP/IP协议簇的网络分层

从上图可以看到基于TCP/IP协议的网络分层结构,主要特点:

①一个漏斗状的模型,用最简单的中间网络层支持复杂多样的传输层和链路层,漏斗的中间是整个网络的关键,极小的限制上层和下层。

②端到端。将网络功能尽量精简,可以变相的认为是将应用特定的功能移出了网络核心中,只是提供通用的服务,这样的好处有:减少核心网络的复杂性、网络通用性、应用不依赖于网络的操作,增加了可靠性。[4]

③尽最大努力的传输、无状态,保证了效率。

其主要的缺点:

a.               可用性。网络上应用的数据种类丰富、数据量巨大,导致带宽消耗迅速,需要保证数据和相关应用服务的可用性。

b.               安全性。只能提供端到端的保证,不能满足各异的应用安全要求,例如:内容私密性、完整性、攻击时的服务可用性等。

c.                其他:目前的应用与服务在功能、速率、效率、成本方面要求多样化,对网络也有相应的能力要求。


1.2.3 解决的思路

虽然IP网络简单、可扩展,但是缺少QoS保证、通信控制和监控管理机制。为了克服上述缺点,有两个思路:

a.     增加新的设计:即在现有的网络结构基础上,增加新的组件或功能。

b.     采用全新的设计:摒弃原有设计,针对新出现的要求进行设计。

(CDN思路)在通用IP网络之上建立虚拟的覆盖网,从而在IP中添加额外的功能,包括安全性、弹性、资源的控制性,此外还有对异构网络的兼容性。


1.3 概念

CDN通过利用内容副本达到最大化网络带宽、改进访问性和内容正确性的效果。[6]

CDN是由分散的主机组成,通过维护数据副本使得在用户从网络获得数据时达到带宽最大化。[1]

CDN通过提供服务来改进网络性能,包括带宽最大化(maximizing bandwidth)、改进可用性(improving accessibility)、通过副本保证数据正确性。通过将内容发送到靠近用户的缓存或边缘服务器,提供快速可靠的应用和服务。[7]


1.3.1 典型组成

一系列代理服务器(surrogate servers):分布式的、存储源服务器内容;

路由器和网络设备:发送内容请求到最合适的地方和代理服务器;

统计机制:源服务的日志和信息


1.3.2 两个信息流

    客户端和代理服务器之间;代理服务器和源服务器之间


1.3.3 逻辑组件

CDN逻辑上有内容交付(content-delivery)、请求重路由、内容分布(distribution)和计费组件构成。

内容交付组件包含了一系列的服务器用来向用户分发数据副本。

请求重路由组件负责将用户的请求转发到合适的边缘服务器。同时请求路由组件还和内容分发组件进行通信,从而保证CDN缓存内容的有效性。

内容分布组件将源服务器的内容存储到边缘服务器并保证缓存一致性。

计费组件记录用户访问信息和服务器使用信息。该信息被用来进行通信监控和用户付费。


1.4 历史

在过去几十年的发展中,随着因特网的成长和成熟,网络通信量剧增,主要是访问量的增加、系统复杂性的提高和内容的丰富。[8]

在CDN尚未出现的十年中,互联网上的内容主要是小规模的文本和图片。为了更加高效的传输这些内容,早期的CDN提供者通常采用高度分布式的CDN。这种CDN被描述为深入到ISP中(deep into ISPs)[9],主要部署在接入网中(Point of Presence)。其重要思想就是把内容放到离用户更近的地方,来提升用户访问的性能和吞吐量。具体实施的主要方式有:增加或者改进硬件(高快的处理器、更大的内存和硬盘、更高的带宽)、缓存代理(靠近用户)。使用缓存代理时,用户可以通过设置浏览器,将其请求发送到缓存服务器而不是源服务器;同时缓存的级别也有所不同,例如有本地缓存、区域缓存、全球性缓存。

随着应用的增长和访问速度的加快,多媒体数据分发成为用户的宠儿。基于CDN建立大规模数据中心成为保证大规模多媒体数据分发高效性的有力工具。这个方法可以定义为将ISPs带到了家庭[9],即在有限的地点,部署用高速网络连接的内容存储服务器,从而建立大型数据中心。采用这种方式的CDN,实际中包含了一系列服务器,每个服务器承担了一部分对同一站点请求访问的负载。[10]具备一定的可扩展性和容错性,如何减少配置开销和加快部署速度成为主要问题。

将P2P技术融入到CDN中。P2P技术是利用最终用户的资源来解决大规模用户下对大容量数据请求的情况。P2P有效解决了扩展性的问题,能够有效的降低对服务器的要求。将P2P技术融入到CDN中,就是为了达到CDN中的可靠性和可管,与P2P的可扩展性结合的效果。

现在也有很多云服务提供商结合CDN推出了一系列的服务。在云CDN中进行内容分发,其主要目的是为了在已存在的云之间建立高速的连接,允许用户将内容的智能定位和存储。


1.5 市场

2009年CDN的增长达到两位数,利润上升了16.4%,达到了$1.37billion。[11]





市场分布图

    如上图所示,这是07年Frost&Sullivan报告中的CDN市场分布图。截止到08年,Akamai拥有40000多台服务器,部署在超过67个国家,其分发的网络流量占全球网络流量的15-20%。[12]

1998,出现第一个CDN。几家公司一事到应该建设CDN在不增加硬件成本的前提下增加可靠性和可扩展性。

1999:出现了利用提供高速、可靠web内容分发服务的几家专业盈利公司(例如Akamai和Mirror Image)。

2000:在美国,CDN成为了一个巨大市场,达到了$905million,预计在2007会达到$12billion。

2001:由于发生因大量用户同时访问网站导致的网站崩溃情况,其实就是911事件导致的访问问题,很多企业开始关注建设CDN。

2002:一些大型ISP开始建设自己的CDN。

2004:超过3000家公司使用CDN,每个月花费将近$20million。

2005:CDN依靠流媒体视频和音频的利润增长达到了40%。

 

 

 

 

 

参考文献:

[1]Y.Hao,L.Xuening, M.Geyong and L.Chuang. “Content Delivery Networks: A Bridge betweenEmerging Applications and Future IP Networks”, IEEE Network, July/August 2010.

[2] http://www.internetworldstats.com/top20.htm

[3]Licklider, J.C.R.,and Clark, W. “On-Line-Man-Computer Communication”, Aug, 1962.

[4]M.S.Blumenthaland D.D.Clark, “Rethinking the Design of the Internet: The End-to-End argumentsvs. the Brave New World”, ACM Trans. Internet Tech, vol.1, no.1, Aug.2001,pp.70-109.

[5]A. Feldmann, “InternetClean-Slate Design: What and why?” ACM SIGCOMM Comp. Commun. Rev., vol.37,no.3, July 2007, pp.59-64.

[6]Vakali, A. and Pallis, G. “Content delivery networks: Status andtrends”. IEEE Internet Computing 7,6(Nov./Dec.2003), 68-74.

[7]G. Pallis, and A. Vakali, “Insight and Perspectives for ContentDelivery Networks”, Communications of the ACM, Vol.49, No.1, ACM Press, NY,USA, pp.101-106. Jan, 2006.

[8]M. Hofmann, and L.R.Beaumont, Content Networking: Architecture,Protocols and Practice, Morgan Kaufmann Publishers, San Fransico, CA, USA,pp.129-134, 2005.

[9]C. Huang et al. “Understanding Hybrid CDDNP2P: Why Limelight Needsits Own Red Swoosh”, Proc. NOSSDAV, May 2008, pp.75-80.

[10] M. Hofmann, and L. R. Beaumont, Content Networking: Architecture,Protocols, and Practice, Morgan Kaufmann Publishers, San Francisco, CA, USA,pp. 129-134, 2005.

[11] http://www.accustreamresearch.com/cdn.html

[12] http://www.akamai.cn/enzs/html/perspectives/index.html


推荐阅读
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
author-avatar
yishengyishi2004929_621_834
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有