如何更好的利用CDN资源

导语

随着互联网规模的爆炸式增长,CDN成长为重要的基础设施。如何更好的利用好CDN在全国丰富的资源点为用户提供更好的服务? 这篇文章介绍了CDN在动态内容和全站加速的应用。

提起CDN,大家一定立即想到图片,下载,视频等静态内容的分发和就近接入等加速应用。今天的互联网应用场景下,通过CDN承载的内容越来越多,CDN已经成为了一项不可或缺的网络基础设施了;腾讯CDN上运营的带宽总量已经超过30Tbps,储备的带宽超过60Tbps,占到业务产生的总体带宽量的八成以上。根据我们在腾讯云和内部业务的运营数据,全国范围内使用CDN可以把用户到机房的“平均光缆长度*”降低到200KM以内;试想,如果没有CDN,全国的用户都到同一个机房来访问,数据平均要经过1000KM+才能够抵达用户手中,除了用户的访问速度会变慢以外,对于运营商的网络负载会增加数倍,以现在的网络基础设施是一定承担不了的。

为了承担海量的数据分发需求,我们建设了超过600个超过百Gb的边缘节点,分布在全国各个地区和运营商,保证用户可以同省访问到CDN的资源。相比集中式的IDC服务,CDN的资源能够为用户提供非常大的网络质量优势。那么站点和应用服务来说,如何更有效的利用这些资源?除了传统的静态类内容分发以外,CDN还能做点些什么?这篇文章从腾讯视频服务的实践经验来说明一下CDN如何更好的支持到业务。

腾讯视频是一个综合型的服务,用户可以通过多种方式来访问,除了视频播放以外还有检索等多个功能。首先来看看传统的服务架构:

这个是一个典型的动静分离的服务架构,其中影片检索,用户登录等动态功能不能够缓存,需要集中的来处理;而网站的影片页面,播放页面和封面图片等可以通过CDN来提供就近的服务。实际上早先的大部分腾讯的服务都是通过类似的方案来提供的。如果需要增加新的独立功能,我们通常会申请一个新的域名,独立部署来进行服务,各个功能点的开发,部署,运营等工作都可以独立来进行,互不干扰。但是也有一个额外的问题,功能点多起来以后,网站的域名数增多,每个功能点都需要做运营商分布,网络优化,负载均衡和灾备等;用户访问每个功能都需要连接一个单独的域名,分别解析和建立连接。到了SSL/HTTP2的时代,这个问题变得更加严重,每个域名都需要分别部署ssl服务,需要投入重复的运营工作,用户的访问代价也更大。

首先的问题是,动态的这一部分工作可否移到CDN来做呢?答案是肯定的。通过CDN来接入动态的内容,可以提供更快,更安全的服务质量,同时提供更方便,更快捷的运营能力。

链路优化

用户通过CDN边缘节点就近接入,获得了第一跳的最佳访问质量;而后CDN服务器通过全国的节点和跨运营商专线资源组成一个数据传输网络,在这个网内,我们可以通过智能路由算法基于实时的网络情况找到一个接入点和源站之间的最佳中转方案;CDN的网络可以保证用户,尤其是接入状况不太好的用户获取到最佳的接入方法,例如小运营商用户和移动客户端的用户。而这部分用户才是对质量抱怨最多的用户。

由于CDN解决了用户接入和路由的问题,源站服务器可以部署在单个运营商,甚至可以仅部署在腾讯云的网内,仅需要关心容量,不需要刻意考虑接入点分布的问题;节省运营精力的同时获取到更好的接入质量。

负载均衡和故障屏蔽

源站采用集群服务的情况下,由于请求全部通过CDN来进行接入,因此可以很方便的对源站进行负载均衡控制。我们在CDN上可以通过简单配置来实现丰富的负载均衡策略,例如轮询,服务器权重,基于用户ID或者地址的会话保持,等等;并且还可以进行方便的进行定制。同时单个服务器发生故障时,CDN还可以支持自动向可用服务器进行重试,从而实现故障屏蔽的同时保持用户无感知。

监控和问题定位

用户接入到CDN以后,请求都是在受控的服务器上中转,通过CDN实时监控和日志分析,我们可以立即掌握到服务的负载,请求书,以及源站的访问延迟等信息。同时当用户访问失败的情况下,可以通过访问链定位到问题节点。我们也可以通过自定义HTTP规则把部分用户定位到单独的服务器进行访问,对于新版本的灰度发布和现网问题排查都很方便。

网络安全

当前互联网上,对于业务站点的安全攻击层出不穷。入侵问题,拒绝服务攻击等对源站的稳定服务造成了巨大的威胁。通过使用CDN服务,可以把源站隐藏起来,因此针对业务的攻击会直接导向CDN的网络上。对于DDoS攻击,最简单的手段最有效:比拼容量。 DDoS攻击的定义是,攻击者通过发送大量的请求超过业务的服务能力,从而使得正常用户无法访问;然而CDN具备海量的服务能力和非常大的节点分布,目前我们遭遇到最大的ddos攻击大约是500Gbps,而我们单个业务的访问量最大已经超过了6Tbps,两者不在一个数量级。通过CDN的海量服务能力,我们可以把恶意请求过滤在门外,把真正的用户请求放进来。

协议栈加速和数据压缩

CDN优化中间非常关键的一个环节是协议栈单边加速。过去一段时间我们对于协议栈单边加速进行了相当多的探索,也取得了相当不错的进展;不过这里单独说一下针对动态内容的部分。首先是可以单独为信令类型的重要数据在协议层面提高传输优先级,保证及时送达;另外,CDN服务器之间的传输两端都是受控的,因此我们可以采用双边加速,进一步提高传输的质量和稳定性。同时服务器之间采取共享字典压缩,节约传输需要的带宽。

现在,站点上的静态内容,动态内容都通过CDN来服务;能不能够结合起来一起看呢?这个就是要提到的全站加速的概念了。仍然以腾讯视频站点作为例子,我们一起来看一下新的主要架构:

在这个架构下,动态的内容和静态的内容域名都采用v.qq.com单个域名来提供服务,CDN对于静态的内容进行缓存,同时对动态内容进行加速。用户只需要访问单一域名,建立一条连接,就可以得到完整的功能,节省了多次解析和建立连接带来的额外开销。尤其是引入了http2协议的情况下,多个请求可以并发的处理,相比单纯的链路加速,这里还能够进一步提高用户的性能。

本文转载自公众号腾讯架构师,作者系架构平台部sidney。

原文发布于微信公众号 - 腾讯技术工程官方号(Tencent_TEG)

原文发表时间:2017-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

2018年Python web五大主流框架

我们都知道风靡一时的Python语言作为人工智能战场上主要使用的枪外,还被广泛应用在Web开发、游戏开发、人工智能、云计算开发、大数据开发、数据分析、科学运算、...

1723
来自专栏技术博文

你应该了解Nginx的7个原因

Nginx ("engine x")是一个高性能的HTTP和反向代理服务器,也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服...

3319
来自专栏极乐技术社区

『教程』来自小程序开发者的实例教程第二期

最近全国各地很多城市都出现了高温天气,极乐蜀黍温馨提醒,高温天气小心热感冒,各位程序猿们这样的天气空调冷饮西瓜和电脑键盘代码更配哟~ 这周继续为大家带来的是来自...

19710
来自专栏Java架构师学习

浅析常用软件架构的三种架构模型

常用的软件架构模型可以归类为三种架构模型:3/N层架构、“框架+插件”架构、地域分布式架构。 一.三种架构模型 1.3/N层架构 这是经典的多层架构模型,对于稍...

4577
来自专栏CSDN技术头条

如何创建一条可靠的实时数据流

数据的生命周期一般包含“生成、传输、消费”三个阶段。在有些场景下,我们需要将数据的变化快速地反馈到在线服务中,因此出现了实时数据流的概念。如何衡量数据流是否“可...

2348
来自专栏大前端开发

从编程小白到全栈开发:理解前后端

上一篇文章中让你安装的软件安装好了没?那些操作都尝试做了一遍没?没有的话,赶紧回头去再看一遍文章,动起手来吧。学编程,如果说有捷径的话,实操就是最好的捷径!

2074
来自专栏zhisheng

大型网站架构演化历程

大型网站的挑战主要来自庞大的用户,高并发的访问和海量数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得棘手。大型网站架构主要就是解...

1.2K36
来自专栏EAWorld

微服务框架落地实践之路

在微服务的浪潮下,如何根据企业自身的业务特点,合理的运用开源技术落地微服务架构成为关键。本文作者认为,在实施微服务架构的过程中,结合企业自身业务特点落地的微服务...

3648
来自专栏余子军的专栏

如何更好的利用CDN资源

随着互联网规模的爆炸式增长,CDN成长为重要的基础设施。如何更好的利用好CDN在全国丰富的资源点为用户提供更好的服务? 这篇文章介绍了CDN在动态内容和全站加速...

1K0
来自专栏张红林的专栏

常见机器学习效果调优思路整理

实际工作中,对模型和算法的效果如果不满意,需要进行调优,但往往不知道该怎么下手,本文是一篇博客的学习笔记,分享给大家。

8200

扫码关注云+社区

领取腾讯云代金券