CDN(Content Delivery Network)是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
搭建CDN系统可以选择3种主流方案:
1. squid 2. varnish 3. Nginx+memcache
Varnish是一款高性能的开源HTTP加速器,Varnish的功能与Squid服务器相似,雅思7分有多难都可以用来做HTTP缓存。 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能优越于Squid
处理过程大致分为如下几个步骤:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。
工作流程大致如下:
当varnish上没有缓存时:
当varnish上有缓存数据的时候:
三台虚拟机+一台真实主机
主机名 | IP | 服务 |
---|---|---|
server1 | 172.25.7.1 | Varnish |
server2 | 172.25.7.2 | Apache |
server3 | 172.25.7.3 | Apache |
foundation7 | 172.25.7.250 | Client |
server1
1.下载安装varnish软件包
http://varnish-cache.org/releases/
2.修改varnish的监听端口
3.修改配置文件
修改安全限制文件,保证流量大时,服务正常运行
打开文件的最大数,有如下关系:
内核操作> 操作系统> 软件
内核允许的打开文件最大数
varnish软件的打开文件最大数
默认数量大于内核操作的文件数目.故做如下修改:
操作系统允许的最大数目:
根据此文件的参数修改内存空间和线程数,文件数应该介于上述两者之间
作出如下修改:
4.开启服务
server2网络服务器
下载apache并开启服务
编辑发布页面内容
server1
修改varnish监听网络服务器的ip
Client客户端测试:
server1:
添加代码如下:
重新加载varnish
Client客户端测试:
添加本地解析:
开始访问测试:
varnish默认缓存时间120s,超过120s自动清除缓存
server1进行清除缓存:
Client进行测试:
server1:
修改为如下代码:
server2:配置网络服务器
开启httpd服务,编写测试页并重启服务
server3:配置网络服务器
安装并开启服务
编辑默认发布界面:
Client进行测试:
添加本地解析:
开始访问测试:
server1:
server2:
server3:设定虚拟主机
测试虚拟主机,做域名解析
在server3上测试:
Client客户端测试
<1>在网页进行测试:
<2>在shell中测试:
当server2的网络服务器挂掉之后:
自动去连接server3的服务器
不会有缓存产生
一般在使用中不会在中加入
在注释掉之后:
开始进行缓存,在120s之后连接另一台服务器
每此手动清一次缓存,客户端测试轮叫一次
server1:推送平台
1.安装apache php,并修改端口号
因为varnish占用的80端口,所以修改httpd的端口为8080
2.下载bansys安装包:
http://code.google.com/p/varnish-php-bansys/
3.把解压后的文件放入apache默认发布目录
4.修改配置文件
5.开启服务
6.浏览器访问
bansys 有两种工作模式,分别是:telnet 和 http 模式
【1】telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S $
{VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。
【2】 如果是 http 模式需要对 varnish 做以下设置:
客户端Client测试:
在未推送之前
开始推送:
点击页面刷新: