1. CDN架构
CDN(Content Delivery Network),内容分发网络,是构筑在Internet上的一种先进的流量分配网络。通过在现有的Internet中增加一层新的网络架构,使用户可以就近取得所需内容,提高用户访问网站的响应速度。
目前CDN都以缓存网站中的静态数据为主,如 CSS、JS、图片和静态页面等数据。通常来说CDN要达到以下几个目标:
a. 可扩展(Scalability):性能可扩展性:应对新增的大量数据、用户和事务的扩展能力。成本可扩展性:用低廉的运营成本提供动态的服务能力和高质量的内容分发。
b. 安全性(Security):强调提供物理设备、网络、软件、数据和服务过程的安全性,减少因为DDoS攻击或者其他恶意行为造成商业网站的业务中断。
c. 可靠性、相应和执行(Reliability、Responsiveness、Performance):服务可用性指能够处理可能的故障和用户体验下降的问题,通过负载均衡急事提供网络的容错机制。
通常的CDN架构如下图:
用户访问某个网站的静态文件,首先要向Local DNS服务器发起请求,经过解析后返回到 这个网站域名的注册服务器去解析(一般每个公司都会有一个DNS解析服务器)。这个 DNS 解析服务器通常会把请求重新CNAME 解析到另外一个域名,而这个域名最终会被指向 CDN 全局中的 DNS负载均衡服务器,再由这个GTM 最终分配是哪个地方的用户,返回给离这个用户最近的CDN节点。
用户拿到DNS解析结果,直接去解析结果给到的CDN节点访问这个静态文件,如果节点中文件不存在,节点会回到源站去获取文件并返回给用户。
2. 负载均衡(Load Balance)
就是对工作任务进行平衡、分摊到多个操作单元上执行,可以提高服务器响应速度及利用效率,避免软件或者硬件模块出现单点失效,解决网络拥塞问题。
通常有三种负载均衡架构,分别是 链路负载均衡、集群负载均衡和操作系统负载均衡。
A. 链路负载均衡:通过DNS解析成不同的IP,用户根据这个IP来访问不同的目标服务器。优点:用户直接访问目标服务器,不需要经过代理,访问速度更快;缺点:由于DNS在本地和LDNS 都有缓存,一单某台web server挂掉,很难及时更新用户的域名解析结构,用户将无法访问这个域名,后果严重。
B. 集群负载均衡:
集群负载均衡分为:硬件负载均衡 和 软件负载均衡。
a. 硬件负载均衡:一般使用一台专门的硬件设备(F5)来转发请求。优点:性能非常好;缺点:设备价格昂贵,当访问量陡然增大超出服务极限时,不能进行动态扩容。
b. 软件负载均衡:成本非常低,直接使用廉价的PC搭建,这是优点;缺点是 一般一次访问请求要经过多次代理服务器,会增加网络延时。开源软件有Nginx、LVS、Haproxy (ngnix 和 HAProxy是七层负载均衡,LVS是四层负载均衡)。关于这些以后再深入讨论。
C. 操作系统负载均衡:利用操作系统级别的软中断或者硬件中断来达到负载均衡,如可以设置多队列网卡 等来实现。
3. CDN动态加速:当前比较流行的一种优化技术,原理是 在CDN的 DNS解析中通过动态的链路探测来寻找回源最好的一条路径,然后通过DNS的调度将所有请求调度到选定的这条路径上回源,从而加速用户访问的效率。
由于CDN节点遍布全国,用户接入一个CDN节点后,可以选择一条从离用户最近的CDN节点到源站链路最好的路径让用户走。一条简单的原则就是 在每个CDN节点上从源站下载一个一定大小的文件,看哪个链路耗时最短,这样构成一个链路列表,然后绑定到 DNS解析上,更新 CDN的 Local DNS。 当然不仅考虑耗时,也会考虑到网络成本(网络带宽成本、安全因素等)