CDN总结之一

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

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

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

原文地址:点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,首先,你需要准备一个 Vue 项目,并在其中创建一个用于登录的组件。 在组件的模板中,你可以使用表单元素来创建输入框和按钮,用于输入用户名和密码,以及提交登录表单。例如: ``` <template> <form @submit.prevent="login"> <label for="username">用户名</label> <input v-model="username" type="text" id="username" /> <br /> <label for="password">密码</label> <input v-model="password" type="password" id="password" /> <br /> <button type="submit">登录</button> </form> </template> ``` 在组件的脚本部分中,你需要定义一些数据属性来保存用户输入的用户名和密码,以及一个方法来处理登录表单的提交事件。例如: ``` <script> export default { data() { return { username: '', password: '', }; }, methods: { login() { // 在这里发送登录请求 // 并根据响应结果进行相应的处理 }, }, }; </script> ``` 在发送登录请求时,你可以使用 Vue 的 HTTP 客户端工具(如 Axios)来发送一个 POST 请求,将用户名和密码作为请求体发送到服务器。例如: ``` import axios from 'axios'; export default { data() { // ... }, methods: { async login() { try { const res = await axios.post('/api/login', { username: this.username, password: this.password, ### 回答2: Vue是一种流行的JavaScript框架,用于构建用户界面。要使用Vue编写一个登录页面,我们需要按照以下步骤进行: 1. 在HTML文件中引入Vue库文件和登录页面的样式文件。 ``` <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <link rel="stylesheet" href="login.css"> ``` 2. 创建一个Vue实例,并指定它将控制的HTML元素。 ```html <div id="app"> <form> <input type="text" v-model="username" placeholder="用户名"> <input type="password" v-model="password" placeholder="密码"> <button @click="login">登录</button> </form> </div> ``` 3. 在Vue实例中定义数据和方法。 ```javascript var app = new Vue({ el: '#app', data: { username: '', password: '' }, methods: { login: function() { // 在这里执行登录操作,比如发起Ajax请求验证用户名和密码 // 如果验证通过,跳转到其他页面;否则显示登录失败的提示信息 } } }); ``` 在上述代码中,我们通过`v-model`将输入框中的文本绑定到Vue实例中的`username`和`password`属性上。当用户点击登录按钮时,`login`方法会被调用。 当然,我们还可以添加更多的功能,比如添加表单验证、显示登录状态等。这只是一个简单的示例,希望能帮助你了解如何用Vue编写一个登录页面。 ### 回答3: 登录页面是一个常见的前端开发功能之一,可以使用Vue框架来实现。 首先,在HTML文件中引入Vue和Vue的脚手架。 然后,在Vue实例中定义一个data对象,包含用户名和密码的初始值。 接着,在HTML中使用v-model指令将输入框与data对象中的属性绑定,实现双向数据绑定。 为了增强交互体验,可以给输入框添加验证规则,例如最小长度、必填等。 然后,创建一个方法来处理用户的登录行为。可以通过点击按钮触发该方法,或监听表单提交事件。 在方法中,可以验证用户输入是否符合规则。如果符合规则,可以向后端发送登录请求并等待相应结果。 在登录请求的过程中,可以通过loading状态来展示给用户正在处理中的提示。 根据后端返回的结果,可以给出相应的提示信息,例如登录成功,登录失败等。 最后,可以使用Vue的路由功能进行页面跳转,例如登录成功后,跳转到主页。 总结一下,使用Vue框架可以方便地实现一个登录页面,并且通过Vue的特性可以提供良好的交互体验和数据管理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值