如何更好的利用CDN资源

sidneyu,腾讯专家工程师,资深CDN技术专家。从事CDN研发10年,负责腾讯自建和云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协议的情况下,多个请求可以并发的处理,相比单纯的链路加速,这里还能够进一步提高用户的性能。

后面腾讯云上对于动态加速和全站加速会有对应的产品,感兴趣的同学可以关注一下。

原文链接:

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

棋牌游戏服务器架构: 详细设计(三) 数据库设计

主要有3类Database: ServerInfoDB,UserInfoDB和GameDB。 ServerInfoDB主要存储的是游戏列表的信息,UserIn...

4039
来自专栏杨建荣的学习笔记

MySQL的学习图谱(初版)

周末总结了下关于MySQL学习的一些思路,当然还有很多需要补充的地方。我是侧重从优化的角度来总结的一部分内容,所以数据迁移,数据管理的部分就和很多地方糅合在了一...

3006
来自专栏腾讯云技术沙龙

饶军:Apache Kafka的过去,现在,和未来

大家好,我大概简单的介绍一下,我叫饶军,我是硅谷的初创公司Confluent的联合创始人之一,我们公司的三个创始人都是在最开始在领这个公司做kafka开发出身的。...

1K8
来自专栏云计算D1net

公有云与私有云环境的九大差别对比

公共云存储是专为大规模多租户而设计,能为每个客户提供数据隔离、访问与安全性的服务。公共云存储的内容类型其范围包括,从静态非核心应用数据、需要可用的归档内容到数据...

3456
来自专栏Java架构师学习

阿里,百度,腾讯等一线互联网公司中,Java开发的招聘标准阿里巴巴篇百度篇腾讯篇源码分析:分布式架构微服务架构性能优化Java开发工具实践项目

金三银四的跳槽热潮即将过去,在这两个月的跳槽的旺季中,作为互联网行业的三大巨头,百度、阿里巴巴、腾讯对于互联网人才有很大的吸引力,他们的员工也是众多互联网同行...

3789
来自专栏视频直播

世界杯直播技术揭秘及视频云直播回源系统的应用

近些年,视频直播应用蓬勃发展,带宽也是日渐新高,腾讯云旗下的视频云直播为斗鱼、快手、虎牙、龙珠、CNTV广大的企业客户提供了很大的支持,在行业内起到了引领的作用...

992
来自专栏腾讯技术工程官方号的专栏

如何更好的利用CDN资源

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

2456
来自专栏架构之美

微服务架构在二手交易平台(转转)中的实践

1131
来自专栏非著名程序员

程序员在代码审查时,遇到这样的领导是好是坏?

今天在浏览网站的时候,看到别人发的这么一个帖子,刚刚入职一个新公司,代码审查的时候,leader 对他的代码进行了一些修改,而这个程序员感觉很多地方没有必要,你...

954
来自专栏云计算D1net

当云服务遭遇中断:为什么需要恢复计划

亚马逊S3存储服务最近在美国东海岸的可用区域经历了五个小时的中断。而许多消费者和商业应用程序都依赖云存储服务,因此S3存储服务的中断迅速级联,并且Netflix...

3429

扫码关注云+社区