热门标签 | 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


推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
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社区 版权所有