CDN学习笔记

春节在家里看到一篇淘宝实习生写的大型网站核心技术普及博文,里面看到一个词:CDN,当时就百度了一下:content deliver network。最近总是在公司内部交流邮件中看到,心一横,学习一下CDN。

首先,任何一个人造事物的出现都有其出现的社会原因,更不用说这些实用技术了(当然,实验室里那些纯粹满足人类好奇心的除外)。那么为什么会出现CDN呢,自己分析一下:随着大型网络内容服务提供商(新闻、电子商务、搜索。。)的出现,其使用者由于地理分布跨度大,因此如果仍然采用内容服务集中于一个地理节点,必然会给用户体验带来问题(偏远用户访问速度跟不上了)。一句话,就是保证在现有的网络环境下,保证处于各个地理位置用户的网络内容服务访问速度。

然后,我们拿一个典型网站学习一下CDN实现的基本原理,淘宝网-中国最大的电商网站。当我们访问www.taobao.com时,这仅仅是一个域名--其不会映射任何一台web服务器,因为映射web服务器的是ip地址。对,需要DNS的参与,将域名翻译为ip地址,换句话说,CDN从DNS解析就开始工作了。此时用户应该从DNS拿到用户访问速度最快的web服务器IP地址(根据地理因素,ISP提供商,访问拥挤程度得出一个较优选择),但是DNS并没有通过分析用户来得出其地理位置的功能。那么CDN必须完成这项任务:请求路由,也可以理解成,全局的负载均衡(当然,也有局部的负载均衡)。现在问题出来了,请求路由是完成了,那么你随便路由到一台访问速度最快的web服务器上,我就一定能访问到资源吗?回答是,能。为什么,CDN的‘内容分发’功能实现了资源到各节点的分发,即动态实现总部服务器的内容分发到各个节点服务器上。分发具体实现形式为:节点主动PULL与中心主动PUSH。话说到这里,CDN的基本功能就差不多了,下面先看看这张图,咱们接着说:

tb_cdn

 

 淘宝CDN系统总览,来源为网络

图中很可能是一名杭州的淘宝员工访问taobao.com的CDN工作流程。

下面再说说,CDN组成中的每个边缘节点的组成。由于每个节点支撑一个地区的用户需求,因此也不可能是由一台单机来提供,而是机群。那又牵扯到负载均衡,淘宝的节点负载均衡使用LVS+Haproxy组合,看下图:

tb_cdn
LVS:4层负载均衡技术,由通常vip+master+backup三类机器组成,其中vip是控制机器,其接收外界访问。master与backup为工作与热备节点。其可以实现下面Haproxy机器的健康检测与负载均衡,完成ip层的转发后,交给一台健康且相对负载较轻的haproxy机器。

haproxy:7层负载均衡技术,将请求转发到真正的web服务器上。

一个请求,这都转了多少次才转到真正的机器上!

您还真感叹对了,有时为了加快响应时间,需要对热点内容与非热点内容进行区别化处理,比如在Haproxy机器上放置cache(即让Haproxy支持Cache功能),来缓存最近经常访问的资源,这样就减少了一层转发(haproxy可是工作在第七层,它完全可以分析出用户访问的资源是否在本地缓冲中,LVS就不行了)。

其实,还有更加专业的策略,人家taobao充分分析了内存、SSD盘、机械硬盘的访问速度与单位存储价格,分别将最热、次热,冷的内容放置在不同的存储介质上来加快用户访问速度。

除此之外,还有:

  1. Haproxy优化-支持长链接;
  2. Haproxy调度算法优化-一致性哈希,根据访问内容(URL)来得出分配的机器

发表评论