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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3dmax如何拆分模型_3dmax制作装饰柜1

大家好,今天我来为大家讲解一下如何利用3dmax制作装饰柜。我们需要制作装饰柜模型,当我们为它添加一个材质后,它就是这样的效果。单击创建,选择图形,对象为样条线,选择矩形在场景中进行创建。单击修改&…

TODO:macOS上ThinkPHP5和Semantic-UI集成

TODO:macOS上ThinkPHP5和Semantic-UI集成1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分2. 把Xcode升级到8.1后继续安装Composer3. 使用composer创建TP5项目MWL-Dispatchcomposer create-project topthink/think MWL-Dispatch4. 配置apac…

距离传感器控制灯泡代码_生迪全彩智能 LED 灯泡体验评测

市面上大多数智能灯具无外乎智能控制,冷暖标准区间的简单调光,仅仅满足我们日常照明之外,似乎用处不多。如果有一款能在自己房间制造多彩氛围的灯泡就好了。这次有幸体验到了华为智能家居生态链产品生迪全彩智能 LED 灯泡,才发现彩…

mysql启动与关闭(手动与自动)

手动管理mysql的启动与关闭 [rootmysql ~]# service mysql start --手动启动mysqlStarting MySQL. SUCCESS![rootmysql ~]# service mysql stop --手动关闭mysql Shutting down MySQL.. SUCCESS! [rootmysql ~]# mysqld --verbose --help --查看MySQL的默认参数的具体值 如果每…

内部导线拉力测试_珠海后环回收试验机现金支付拉力试验机回收和谐温馨的环境...

珠海后环回收试验机现金支付拉力试验机回收和谐温馨的环境深圳富兴二手设备回收,拉力试验机回收,恒温恒湿箱回收,恒温恒湿试验箱回收,恒温恒湿培养箱回收,高低温试验箱回收,高低温冲击试验机回收&#xff0…

lvs负载均衡—ldirectord(DR模式的健康检查)

作用: 健康检查对企业而言也是由为重要,在生活中,有时候访问网页访问不到,就会跳出来一些图形告诉你访问失败,这就是健康检查的作用,当服务器都挂掉的时候,告诉你暂时访问不了。 ldirectord是后…

Reactor by Example--转

原文地址:https://www.infoq.com/articles/reactor-by-example Key takeaways Reactor is a reactive streams library targeting Java 8 and providing an Rx-conforming APIIt uses the same approach and philosophy as RxJava despite some API differencesIt i…

springboot项目后台运行关闭_springboot项目在服务器上部署过程(新手教程)

环境:服务器系统:ubuntu16jdkmysql工具 xshell6下载地址:https://www.netsarang.com/download/down_form.html?code622&downloadType0&licenseType1xftp6下载地址:https://www.netsarang.com/download/down_form.html?c…

如何在React Native中使用文本输入组件?

You know, an app becomes more authentic and professional when there is the interaction between the app and the user. 您知道,当应用程序与用户之间存在交互时,该应用程序将变得更加真实和专业。 The text input component in react-native brin…

lvs负载均衡—NAT模式

NAT模式原理图 Virtual Server via NAT : 用地址翻译实现虚拟服务器,地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址,外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。 优点是节省IP …

Django1.9开发博客06- 模板继承

模板继承就是网站的多个页面可以共享同一个页面布局或者是页面的某几个部分的内容。通过这种方式你就需要在每个页面复制粘贴同样的代码了。 如果你想改变页面某个公共部分,你不需要每个页面的去修改,只需要修改一个模板就行了,这样最大化复用…

lvs负载均衡—高可用集群(keepalived)

基本概念: 什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发…

定期定量采购_企业常见的六种采购策略

注册职业采购经理CPPM考试网​www.apscppm.com对不起,我是采购合同生效的条件是什么?怎样制定谈判方案?如何在采购时让供应商听你的指挥!没做预算不能采购,应该作为企业采购管理的基本原则。编制现金预算就是要解决收入…

pacemaker+corosync实现集群管理

前言: 高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术。简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点。 …

更换mysql_这些被你忽视的MySQL细节,可能会让你丢饭碗!

我们在 MySQL 入门篇主要介绍了基本的 SQL 命令、数据类型和函数,在具备以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我们就来探讨一下 MySQL 都需…

rhcs集群套件—红帽6的高可用

含义及理解: RHCS是Red Hat Cluster Suite的缩写,也就是红帽子集群套件,RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合,,它将集群系统中三大集群架构(高可用性集群、…

MapReduce二次排序

2019独角兽企业重金招聘Python工程师标准>>> 默认情况下,Map输出的结果会对Key进行默认的排序,但是有时候需要对Key排序的同时还需要对Value进行排序,这时候就要用到二次排序了。下面我们来说说二次排序 1、二次排序原理 我们把二…

数据有序_详解数据库插入性能优化:合并+事务+有序数据进行INSERT操作

概述对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。其实最有效的…

容器内应用日志收集方案

容器化应用日志收集挑战 应用日志的收集、分析和监控是日常运维工作重要的部分,妥善地处理应用日志收集往往是应用容器化重要的一个课题。 Docker处理日志的方法是通过docker engine捕捉每一个容器进程的STDOUT和STDERR,通过为contrainer制定不同log dri…

python统计行号_利用Python进行数据分析(第三篇上)

上一篇文章我记录了自己在入门 Python 学习的一些基础内容以及实际操作代码时所碰到的一些问题。这篇我将会记录我在学习和运用 Python 进行数据分析的过程:介绍 Numpy 和 Pandas 两个包运用 Numpy 和 Pandas 分析一维、二维数据数据分析的基本过程实战项目【用 Pyt…