最佳实践8:架构典型CDN系统

CDN系统是一个复杂的系统,从核心组件进行简化抽象,可以用图2-1进行说明。

下面分别以上海电信用户、山东联通用户访问同一个网站www.xufeng.info为例,说明数据访问流程。以下是具体步骤。

1)上海电信用户请求其配置的上海电信DNS服务器,要求解析www.xufeng.info

2)如果上海电信DNS服务器上没有该域名的缓存,则该服务器会请求xufeng.info的权威域名服务器。如果有该域名的缓存,则直接返回缓存的DNS解析结果。

图2-1 CDN系统组成部分架构简图

3)xufeng.info的权威域名服务器会根据DNS视图技术,依据上海电信DNS服务器的来源IP,把www.xufeng.info解析到上海电信CDN节点。

4)上海电信用户访问到上海电信CDN节点。

5)上海电信CDN节点使用缓存+代理的方式访问到源站。

和以上的5个步骤类似,山东联通用户解析到山东联通CDN节点,通过山东联通CDN节点访问到源站资源。

通过以上的5个简要的步骤,可以分析出CDN系统的2个关键技术分别如下。

·DNS的视图技术:通过该技术,使得来自不同区域、运营商的用户被调度到距离用户最近的不同的CDN节点。它的作用总结起来就是“调度”。该技术在第1章中有详细阐述,在此不再赘述。

·CDN节点的缓存和代理技术:缓存是指,如果在该节点上有对应的未过期资源,如图片、HTML、CSS等,则它直接返回给用户而缩小用户的资源等待时间;代理是指,如果在该节点上没有对应的资源,或者资源已经过期无效,则它会请求源站获取内容后再返回给用户。缓存和代理技术优化了已缓存文件的传输效率。同时对于未被缓存的文件,在某些情况下,在一定程度上可以优化用户到源站之间的网络链路。比如用户是接入的运营商A宽带网络,而源站是部署在运营商B,那么通过优化的CDN网络,可以减少用户直接跨运营商访问导致的高延时甚至丢包率带来的影响。

从宏观上,在研究了CDN的组成部分后,再来看看聚焦到某个CDN节点后的技术细节。

某个CDN节点的典型架构图,如图2-2所示。

图2-2 CDN节点的典型架构图

在图2-2中,各组件的功能和设计要点如下。

·负载均衡服务器组:使用LVS的DR模式实现4层的网络负载均衡。使用DR模式的网络负载均衡,主要优点是实现高吞吐量及屏蔽后端Nginx代理服务器组中单台服务器故障导致的对业务的影响。关于负载均衡的详细技术方案和对比,请参阅第3章的相关内容。

·Nginx代理服务器组:使用Nginx的反向代理技术(Upstream),配置为url_hash的方式,提高对后端Squid缓存服务器组的缓存命中率。同时,也能达到屏蔽后端Squid缓存服务器组中单台服务器故障导致的对业务的影响。

·Squid缓存服务器组:根据HTTP协议中有关缓存设置的规定,实现对页面和资源进行缓存的关键功能业务。通过该组服务器,可以实现缓存文件的快速响应和对源站的代理。

理解HTTP协议中的缓存控制指令和原理,是构建Squid缓存的必要步骤。下一个最佳实践将对缓存控制指令和原理进行探讨。