1.CDN概述
CDN(Content Delivery Network),即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。
控制时延无疑是现代信息科技的重要指标,CDN的意图就是尽可能的减少资源在转发、传输、链路抖动等情况下顺利保障信息的连贯性。
CDN就是扮演者护航者和加速者的角色,更快准狠的触发信息和触达每一个用户,带来更为极致的使用体验。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
2.varnish概述
1.简介
Varnish是一款高性能、开源的反向代理服务器 和缓存服务器。Varnish使用内存缓 存文件来减少响应时间和网络带宽消耗。这个项目是由挪威的一家报纸Verdens Gang的网络分支起始的,其架构设计和开发总监Poul-Henning Kamp是FreeBSD核心的开发人员之一,最初项目的管理与基础设施及额外开发由挪威一家Linux咨询公司Linpro提供。
说到varnish,squid就不得不提及。squid算得上是古老的缓存服务器。由于 varnish先进的设计理念,性能要比squid高上许多,varnish还可以通过端口进行管理,使用正则语句做到清除指定缓存的功能,这些 squid都做不到。但是varnish在高并发的情况下,资源消耗较高,而且varnish服务进程一旦崩溃,重启,内存中的缓存数据将全部丢失。
缓存服务器的类型常用的有: memched、squid、varnish
2.工作原理
Management进程:
Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。 Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回 应,Management将会重启此Child进程。
Child进程:
Child进程包含多种类型的线程,常见的如:Acceptor线程:接收新的连接请求并响应;Worker线程:child进程会为每个会话启动一个worker线程,因此,在高并发的场景中可能会出现数百个worker线程甚至更多;
Expiry线程:
从缓存中清理过期内容;
Varnish依赖“工作区(workspace)”以降低线程在申请或修改内存时出现竞争的可能性。在varnish内部有多种不同的工作区,其中最关键的当属用于管理会话数据的session工作区。
日志:
为了与系统的其它部分进行交互,Child进程使用了可以通过文件系统接口进行访问的共享内存日志(shared memory log),因此,如果某线程需要记录信息,其仅需要持有一个锁,而后向共享内存中的某内存区域写入数据,再释放持有的锁即可。而为了减少竞争,每个 worker线程都使用了日志数据缓存。
共享内存日志大小一般为90M,其分为两部分,前一部分为计数器,后半部分为客户端请求的数据。varnish提供了多个不同的工具如varnishlog、varnishncsa或varnishstat等来分析共享内存日志中的信息并能够以指定的方式进行显示。
执行过程:
client--->dns--->cdn(--->server--->cdn--->)cache--->client ##如果cache中的age没有超时,则不用括号内的步骤
3.使用varnish部署CDN节点集群
实验主机:
server10 172.25.30.148 #varnish
server20 172.25.30.150 #apache
server30 172.25.30.160 #apache
实验环境:
火墙关闭 iptables off
selinux 安全上下文 disabled
1.varnish部署
varnish安装:
server10:
可以在官网下载安装包后安装,也可以在已知地址的地方cp
安装下载的安装包
vim /etc/sysconfig/varnish ##将端口6381改为80
vim /etc/varnish/default.vcl
server20:
yum install httpd -y
/etc/init.d/httpd start
vim /var/www/html/index.html ##写入 I am server20
在物理机中访问westos.com ##前提是/etc/hosts中有解析
测试:在物理机中curl -I westos.org
2.多个不同域名后端服务器的部署
配置好server3的ip 安装httpd并开启服务
vim /var/www/html/index.html ##写入内容 I am server30
#定义web1
backend web1 {
.host = "172.25.30.150";
.port = "80";
}
#定义web2
backend web2 {
.host = "172.25.30.160";
.port = "80";
}
#访问 www.westos.org 域名时从 web1 上取数据,
#访问 bbs.linux.org 域名时到 web2 取数据,
#访问其他页面报错
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.linux.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
#查看缓存命中情况
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);
}
测试:在物理机上写好域名解析地址
3.负载均衡
负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性
在server3中:注意打开基于域名的虚拟主机选项 NameVirtualHost *:80
vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
DocumentRoot /www1
ServerName www.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName bbs.linux.org
</VirtualHost>
/etc/init.d/httpd restart
mkdir /www1
vim /www1/index.html ##写入www.westos.org --server3
测试效果,两台apache服务器依次轮换
4.varnish cdn 推送平台
yum install httpd
vim /etc/httpd/conf/httpd.conf
#更改端口为8080
/etc/init.d/httpd restart
unzip bansys.zip -d /var/www/html
# vi /var/www/html/bansys/config.php
#只保留如下设置,其余注释掉
vim /etc/varnish/default.vcl
真机测试: