一、CDN的介绍
1.CDN简介
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
2.服务模式
内容分发网络(CDN)是一种新型网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度,CDN代表了一种基于质量与秩序的网络服务模式。
简单地说,内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。
3.关键技术
(1)内容发布:它借助于建立索引、缓存、流分裂、组播(Multicast)等技术,将内容发布或投递到距离用户最近的远程服务点(POP)处;
(2)内容路由:它是整体性的网络负载均衡技术,通过内容路由器中的重定向(DNS)机制,在多个远程POP上均衡用户的请求,以使用户请求得到最近内容源的响应;
(3)内容交换:它根据内容的可用性、服务器的可用性以及用户的背景,在POP的缓存服务器上,利用应用层交换、流分裂、重定向(ICP、WCCP)等技术,智能地平衡负载流量;
(4)性能管理:它通过内部和外部监控系统,获取网络部件的状况信息,测量内容发布的端到端性能(如包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳的运行状态。
4.主要特点
1)、本地Cache加速 提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性
2)、镜像服务 消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量。
3)、远程加速 远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度
4)、带宽优化 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。
5)、集群抗攻击 广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量 。
二、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没有超时,则不用括号内的步骤
三、使用Varnish部署CDN节点集群
物理机环境:selinux 和火墙都关掉
实验主机:varnish 172.25.129.2
172.25.129.3 apache
172.25.129.4 apache
文件最大数:内核sysctl -a > 操作系统 /etc/sysconfig/varnish > 应用 /ect/security/limits.conf
nofile 最大文件数
memlock最大锁定内存地址空间
nproc 进程最大数目
yum localinstall -y varnish-3.0.3-1.el6.x86_64.rpm varnish-libs-3.0.3-1.el6.x86_64.rpm
vim /etc/sysconfig/network #修改hostname为server1
hostname server1
scp varnish3.0.5* root172.25.129.2 ##下载varnish安装包
2.多个不同域名后端服务器的部署在server1中:
yum install * -y
vim /etc/sysconfig/varnish #将端口6381改为80
vim /etc/varnish/default.vcl
/etc/init.d/varnish restart
vim /etc/security/limits.conf
在server2中:
yum install httpd -y
/etc/init.d/httpd start
vim /var/www/html/index.html ##写入www.westos.org --server2
测试:在物理机中curl -I www.westos.org ##前提是/etc/hosts中有解析
当server2的httpd服务关闭后,client可从缓存中获取apache服务,默认缓存时间(可在配置文件中修改)为120s,120s后连接关闭,Age=0
2.多个不同域名后端服务器的部署
配置好server3的ip 安装httpd并开启服务
vim /var/www/html/index.html ##写入内容www.westos.org --server3
在server1中:
测试:curl bbs.westos.org
3.缓存命中测试以及缓存的清除
curl -I www.westos.org
清除缓存
varnishadm ban.url .*$ ##清除所有
varnishadm ban.url /index.html ##清除 index.html 页面缓存
varnishadm ban.url /admin/$ ##清除 admin 目录缓存
清除缓存后再次测试,age=0,首次为未名中
4.负载均衡
负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性
在server3中:注意打开基于域名的虚拟主机选项 NameVirtualHost *:80
vim /etc/httpd/conf/httpd.conf
/etc/init.d/httpd restart
mkdir /www1
vim /www1/index.html ##写入www.westos.com --server3
在server1中:
vim /etc/varnish/default.vcl
/etc/init.d/varnish re
2.多个不同域名后端服务器的部署start
在物理机中测试:
5.varnish cdn的推送平台
在 varnish 实验机上
1)安装httpd,打开httpd并将其端口设置为8080 vim /etc/httpd/conf/httpd.conf
2)/etc/init.d/httpd restart
3)安装php 支持
4)设置php配置文件,只保留以下内容(可注释掉其他内容,也可以删掉)
2.多个不同域名后端服务器的部署
5)vi /etc/varnish/default.vcl
6)/etc/init.d/varnish reload
7)网页测试