CDN加速实现—varnish
CDN介绍:
1 . 对cdn的理解: CDN的全称是(Content Delivery Network),即内容分发网络;加速器,反向代理缓存。CDN系统能够实时的根据网络流量和各节点的连接,负载状况以及到用户的举例和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上,其目的是使用户可以就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。
2. 基本原理: CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
3 . 服务模式: 简单地说,内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理 4个要件,
内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务 。
内容服务基于缓存服务器,也称作代理缓存(Surrogate) ,它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。
varnish介绍:
1 . varnish: 是一款具有高性能的开源http加速器,具有反向代理、缓存功能。
Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存。Squid是从硬盘读取缓存的数据,而Varnish把数据存放在内存中,直接从读取内存,避免了频繁在内存、磁盘中交换文件,所以Varnish要相对更高效,但也有缺点,内存中的缓存在服务器重启后会丢失。
2 . varnish 如何工作: varnish主要存在两个进程,manage进程及child进程,
manage 进程:更新配置,vcl 文件编译,varnish 监控,初始化 varnish 及提供 varnish 管理接口。
child 进程:主要进行请求任务的处理,接受请求等。
child 进程中各线程的处理任务:
accept 线程: 监听端口,接受连接;接受连接后组成 session 结构,查看是否有空闲线程,若有则分配给其处理,若无,则检查等待队列 overflow 的大小,若过大,则抛弃请求,否则加入 overflow 队列。
work 线程: 从 overflow 队列中获取任务, 走 Varnish 状态机流程处理任务,完成后通过 pipe 的线程通信,传递给 epoll 线程,等待下一个事件触发。
epoll 线程:将事件发送时对应的 session , 放入 overflow 队列,以供 work 线程从中取出继续处理。当然,在等待事件发送时,会检查该 session 是否过期。
expire 线程:对以二叉树形式组织的缓存对象,进行过期检查,对过期的对象进行处理(更新或者弃用。
cdn加速的实现:
实验环境:
三台主机:为了实验方便,全部关闭防火墙,selinux设置为disabled
代理服务器(varnish服务器):172.25.5.111
后端资源服务器:172.25.5.112
客户端物理主机:172.25.5.250
1 . 代理服务端安装:
varnish-4.0.5-1.el7.x86_64.rpm
varnish-libs-4.0.5-1.el7.x86_64.rpm
jemalloc-3.6.0-1.el7.x86_64.rpm
rpm -qc 软件包 查看生成的文件
2)查看varnish的服务文件:
vim /usr/lib/systemd/system/varnish.service
Varnish打开的最大文件数限制为131072
Varnish锁定的共享内存大小为82M
3)查看本机系统最大文件访问数量
sysctl -a | grep file
发现满足Varnish打开的最大文件数限制
4)全局临时更改共享内存及最大文件数
ulimit -n 131072 ##临时更改更改最大文件数ulimit -l 82 ##临时更改更改最大共享内存ulimit -a ##查看用户限制
5)编辑varnish用户的限制文件
vim /etc/security/limits.conf ##将最大文件访问数以及锁定的内存大小写入文件最后
6)修改varnish服务端口
vim /etc/varnish/varnish.params 更改端口为80
7)varnish主配置文件中指定后端服务器
vim /etc/varnish/default.vcl 指定后端服务和端口
最后重启vanish服务
2 . 设置后端服务器
yum install httpd -ycd /var/www/html/vim index.htmlsystemctl start httpd
3 . 测试:使用物理主机直接访问代理服务器,可以得到资源服务器中的内容
Varnish缓存命中情况:
作为varnish代理端,在配置文件中添加了后端服务器的ip及端口,在访问代理端的时候实际是在访问后端服务器,则第一次访问会产生缓存,下一次访问的时侯则由缓存服务器直接响应客户端需求,减少延时。
修改配置文件,在缓存数据时发送信息给客户端(查看缓存命中情况),根据数据是来自后端服务器还是来自缓存的内容,返回不同的消息给客户端主机。
vim /etc/varnish/default.vcl
在缓存数据将要发送到客户端时调用的子进程。
在代理服务器上对varnish缓存进行清理:
varnishadm ban req.url "~" / # 清理所有的缓存varnishadm ban req.url "~" /index.html # 对指定文件的缓存进行清理
先对varnish服务器的缓存进行清理:
varnishadm ban req.url "~" /
使用客户主机进行测试缓存命中情况:
第一次访问的时候不存在缓存内容,数据由后端服务器获取
再次访问的时候已经有了缓存数据,命中缓存。
定义不同域名站点的后端服务器:
在使用不同的域名访问同一台代理服务器的时候,可以进行设置,将请求由发送到不同的后端服务器。
需要在代理服务器的varnish配置文件中设置多个后端服务器,并在vcl_recv 子程序中设置对不同的域名请求发送到不同的后端服务器。
vim /etc/varnish/default.vcl 在varnish端添加
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") { ##如果请求的域名为www.westos.org或者 westos.orgset req.http.host = "www.westos.org"; ##当将其赋值为 www.westos.orgset req.backend_hint = web1; ##让后将请求发送给为web1 后端服务器
}elsif (req.http.host ~ "^bbs.westos.org") { ##如果请求域名为bbs.westos.orgset req.backend_hint = web2; ##就将请求发送给web2
}else {return (synth(405)); ##其他的域名返回一个405错误
}
}
写好之后重启varnish服务
在客户端写好解析:
解析好之后进行测试:
轮询机制实现后端服务器负载均衡:
当某台后端服务器的访问压力过大的时候,可以设置多台后端服务器,提供相同的内容服务,将客户请求分配给多台服务器,减缓一台服务器的压力。
可以把多台 backends 聚合成一个组,这些组被叫做 directors。这样可以增强性能和弹力.
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so"; ##导入模块
backend web1 {.host = "172.25.5.112"; 定义第一个后端服务器.port = "80";
}
backend web2 {.host = "172.25.5.113"; 定义第二个后端服务器.port = "80";
}sub vcl_init {new lb = directors.round_robin(); 新建一个组lb.add_backend(web1); 将web1 添加到这个组lb.add_backend(web2); 将web2 添加到这个组
}sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {set req.http.host = "www.westos.org";set req.backend_hint = lb.backend(); 发送请求循环组,让组中的后端服务器轮流处理请求return(pass); 设置直接将请求发送到后端服务器,并且不缓存返回的内容
}elsif (req.http.host ~ "^bbs.westos.org") {set req.backend_hint = web2;
}else {return (synth(405));
}
}
round_robin()这个 director 是一个循环的 director。它的含义就是 director 使用循环的方式把backends 分给请求。
测试:
推送管理平台:
为了更加快捷方便及时对代理服务器中缓存内容进行清理更新。可以在代理服务器上设置网络推送页面,直接在网页上推送平台对代理服务器缓存进行修改。
1 代理服务器上安装php 以及http
由于推送平台使用的是php进行编写,需要安装php插件识别php脚本内容。
yum install php httpd -y
vim /etc/httpd/conf/httpd.conf 更改http端口为8080,80默认端口已经被varnish占用
systemctl restart httpd 重启http服务
2 解压平台安装包到httpd公共目录里
unzip bansys.zip -d /var/www/html (没有unzip的可以先yum install unzip)
cd /var/www/html
mv bansys/* /var/www/html # 将解压出目录中的文件全部放到公共目录中
vim config.php 修改推送平台配置文件如下
3 . 修改varnish配置文件
vim /etc/varnish/default.vcl
重启varnish服务
4 . 客户端进行测试 :http://172.25.5.111:8080
CDN加速实现—varnish相关推荐
- CDN加速之varnish
本篇博客是在前一篇博客的母虚拟机创建的子虚拟机上进行的 在创建新的虚拟机时 需做2个操作: 1.设置网络和IP vim /etc/sysconfig/network-scripts/ifcfg-eth ...
- 高并发大流量专题---5、CDN加速
高并发大流量专题---5.CDN加速 一.总结 一句话总结: CDN就是多整几台节点服务器,选距离用户最近的服务器来给用户服务,实现的话可以用阿里云.腾讯云他们提供的功能,简单方便,妈妈再也不用担心我 ...
- CDN加速与DDOS防御
一. 目的 实现国外节点的访问加速,分区域分线路加速,防御来自竞争对手的DDos恶意攻击,常见的延缓性CC攻击和致命的大流量攻击.针对以上的加速策略和两种攻击方式进行一些防御方案的简单介绍. 二. ...
- 香港服务器CDN加速与DDOS防御方案
一.目的 香港服务器实现国外节点的访问加速,分区域分线路加速,防御来自竞争对手的DDos恶意攻击,常见的延缓性CC攻击和致命的大流量攻击.针对以上的加速策略和两种攻击方式进行一些防御方案的简单介绍. ...
- 企业项目实战----CDN加速的实现
前言 CDN加速对企业非常重要,体现在哪呢?举个例子,A企业的后端服务器在杭州,用户遍布全国,让全国的用户都去访问企业A在杭州的后端服务器你觉得可行吗?肯定不可行呀!第一,后端服务器承受不了全国这么巨 ...
- CloudFlare 免费CDN加速 使用方法
前言 cloudflare 是一家国外的 CDN 加速服务商,还是很有名气的.提供免费和付费的加速和网站保护服务.百度云加速的国外节点就是和 cloudflare 合作使用的 cloudflare 的 ...
- github加速_使用Picgo+GitHub+ jsDelivr搭建CDN加速免费图床
前言 经常写Markdown或者博客的同学,肯定都要用到图床.图床是什么呢?其实相当于一个存储图片的网站,类似百度云这样,不过上传图片到图床后可以直接通过外链进行访问. 比如把本地一张a.jpg上传到 ...
- cdn加速怎么样刷新文件
用户在购买CDN服务之后,在使用过程中会比较关心是否有实际效果,首先大家要先确保是否已经开通成功,然后按照基本步骤添加加速域名.配置CNAME,这些都成功搞定之后,接下来就可以测试CDN是否加速成功了 ...
- CDN加速服务有什么功能和作用?
CDN一词相信很多朋友都不会陌生,网上也经常会看到相关报道.或许大部分人都知道CDN加速可以提升网站的打开速度及用户下载资源的速度,而同时也有不少小白朋友还不清楚CDN是什么?有什么用途?它是如何实现 ...
最新文章
- python编程入门到实践pdf下载-Python编程从入门到实践的PDF教程免费下载
- Winform中实现List<string>赋值给dataGridView与实现多选、全选和获取选择的内容
- mac 推荐一款本机截屏找latex公式软件Mathpix 亲测有效
- c++STL容器的Set和multiset
- 整合springMVC
- ubuntu16.04更改python版本
- leetcood学习笔记-167-两数之和 II - 输入有序数组
- Spring boot Mybatis 整合(完整版)
- 浅析GitLab Flow的十一个规则
- glm 中 数据类型 与 原始数据(c++ 数组)之间的转换
- stack-based buffer overflow basic paper
- Java程序员从笨鸟到菜鸟之(八十七)跟我学jquery(三)jquery动态创建元素和常用函数示例...
- cups 2.4.1编译办法
- word打开文档很久很慢_word打开慢,教您怎么解决word打开慢
- 数据库课设——简单的图书管理系统
- 物联数采网关在电力能效管理系统中的应用
- 机械祭天法力无边:练习3.6:编写一段程序,使用范围for语句将字符串内的所有字符用X代替。
- 科技云报道:安全脱管不如托管
- 前端HTML------负责网页结构
- 天翼云服务器的一些问题及解决方式
热门文章
- html input 上标,javascript – 文本类型的输入字段中的上标
- 时间同步服务器java,Windows 配置时间同步服务器以及配置时间同步间隔
- 机器人 林州重机_林州重机募资11亿布局油气和机器人项目
- kali 切换root权限_Ubuntu 被曝严重漏洞:切换系统语言 + 输入几行命令,就能获取 root 权限...
- MYSQL安装与库的基本操作
- 8.4. su - root
- centos6.5安装python3.6
- [Typecho主题] modernist
- sencha touch调试时Please close other application using ADB: Monitor, DDMS, Eclipse
- 1022词法分析实验总结