随着互联网规模的爆炸式增长,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协议的情况下,多个请求可以并发的处理,相比单纯的链路加速,这里还能够进一步提高用户的性能。
责任编辑:王刚