CDN的全称是Content Delivery Network,即内容奋发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,cdn系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
市面上有很多CDN供应商,比较著名有
Akamai (全球最大)
chinacache
webluker
cloudflare
chinacache
如果需要自己搭建CDN系统,有3种主流方案可以选择
squid
varnish
Nginx+memcache
二、用varnish实现cdn
在当前主流的Web架构中,Cache担任着越来越重要的作用。常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键。而最近几年由FreeBSD创始人之一Kamp开发的varnish更是一个不可多得的Web Cache Server。严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器。同时,由于其工作在Web Server的前端,有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一。
1.安装包
2.安装
# yum install varnish * -y
3.修改varnish监听的端口
# vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80
4.修改/etc/varnish/default.vcl
如果varnish里面找不到,到哪个主机上面找
4.开启varnish
# /etc/init.d/varnish start
实验1:查看缓存命中情况
在default.vcl里面添加
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
重启varnish,测试缓存命中情况
用varnishadm清一下缓存,下次访问就不会从缓存中读取
varnish实现负载均衡:
如果找不到就到web1,或web2上找,web1上是nginx,web2是apache
varnish服务器上做的:
修改default.vcl
backend web1 {
.host = "172.25.90.1";
.port = "80";
}
backend web2 {
.host = "172.25.90.2";
.port = "80";
}
director lb round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
#return (pass);
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
director lb round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
在web1上要做的:
安装nginx,并开启
在web2上要做的:
装好apache,并开启apache
配好web2上的解析:/etc/hosts
建好发布目录和发布文件,并启动apache
最后在varnish要做的:
重启varnish
# /etc/init.d/varnish reload
在客户端测试要做的:
修改客户端的/etc/hosts
用浏览器访问:如果不出错的话,一只刷新页面会发现一会是web1的发布页,一会儿是web2的发布页
三、varnish的工作原理
Management进程:对子进程进行管理,同时对VCL配置进行编译,并应用到不同的状态引擎。
Child进程:生成线程池,负责对用户请求进行处理,并通过hash查找返回用户结果。
状态引擎
每一个状态引擎处理结束之后,都会将结果return给varnish,由varnish决定下一个状态引擎。由于每个引擎的下一个处理引擎都是特定的,所以return的值基本上也是确定的,可以通过官方文档获取。各引擎的处理流程图如下:
vcl_recv : 接收用户请求,判断是否是可缓存数据。
vcl_pipe :不可缓存数据,直接管道后端处理
vcl_hash :可缓存数据,通过
hash
机制处理,默认url做key;也可以自定义区分客户端是否支持处理压缩数据而判断区分缓存。
vcl_hit : 命中
vcl_miss :未命中 vcl_fetch : 后端取数据
vcl_pass :给命中或者未命中的数据提供一个特殊位置以对请求的数据进行特殊处理
vcl_deliver: 1.hit直接deliver; 2.fetch直接deliver
处理请求流程:
四、CDN推送管理
varnish帮我们缓存很多的web资源,但是当后台的数据有了变化需要更新怎么办,此时就需要用到CDN的推送管理了
1.安装apache,PHP,设置apache在8080端口,并且启动服务
# yum install httpd php -y
# /etc/init.d/httpd start
2.将bansys.zip解包,包里面的内容统统放到apache的发布目录下
3.修改发布目录下的config.php
# vim /etc/varnish/default.vcl
director lb round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
# 重启varnish
推荐阅读:
CDN实现方案如何选择: squid Varnish Nginx:http://www.server110.com/varnish/201404/9972.html
原文链接:https://blog.csdn.net/xayddxjsjxywuhui/article/details/72675295?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165934461816780366579231%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165934461816780366579231&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-14-72675295-null-null.nonecase&utm_term=%E6%90%AD%E5%BB%BAcdn
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/6839