Linux学习之Varnish
来源:互联网 发布:mac 移动硬盘 ntfs 编辑:程序博客网 时间:2024/06/11 06:32
Varnish可以有效降低web服务器的负载,提升访问速度。Varnish是一个cache型的HTTP反向代理。
当把Varnish部署上之后,客户端的请求将首先被Varnish接受。Varnish将分析接收的请求,并将其转发到后端的web服务器上。后端的web服务器对请求进行常规的处理,并将依次将处理结果返回给Varnish。
Varnish的核心功能是能能将后端web服务器返回的结果缓存起来,如果发现后续有相同的请求,Varnish将不会将这个请求转发到web服务器,而是返回缓存中的结果。这将有效的降低web服务器的负载,提升响应速度,并且每秒可以响应更多的请求。Varnish速度很快的另一个主要原因是其缓存全部都是放在内存里的,这比放在磁盘上要快的多。
二、Varnish 特点
基于内存进行缓存,重启后数据将消失。
利用虚拟内存方式,I/O性能好。
支持设置0~60秒内的精确缓存时间。
VCL配置管理比较灵活。
32位机器上缓存文件大小为最大2GB。
具有强大的管理功能,例如top,stat,admin,list等。
状态机设计巧妙,结构清晰。
利用二叉堆管理缓存文件,达到积极删除目的。
三、Varnish 与 Squid 对比
相同点
都是开源反向代理服务器。
不同点
Varnish的稳定性很高。因为Squid需要经常重启
Varnish缓存数据都直接从内存读取,而Squid是从硬盘读取缓存数据,因此Varnish在访问速度方面会更快。
Varnish的TCP连接释放要比Squid快,所以在高并发连接情况下可以支持更多TCP连接。
Varnish可以通过管理端口,使用正则表达式批量清除部分缓存,而Squid做不到。
当然,与传统的Squid相比,Varnish也有缺点。
Varnish在高并发状态下CPU、I/O和内存等资源开销都高于Squid。
Varnish进程一旦挂起、崩溃或者重启,缓存数据都会从内存中完全释放,此时所有请求都会被发送到后端服务器,在高并发情况下,这会给后端服务器造成很大压力。
LB 负载均衡器
结构化数据放在关系型数据库中 非结构化数据放在文件系统上
PCI-E I/O能力强
反向代理能实现访问控制功能
两个组件间之间衔接不流畅 加中间层 速度不匹配 加缓存
缓存都是键值存储 键是哈希编码后存储的
缓存对象,有生命周期,需定期清理
缓存空间耗尽:LRU(最近最少使用缓存对象从缓存空间清理出去)
分布式缓存 CDN 内容分发网络
GSLB 全局负载均衡。作用:实现在广域网(包括互联网)上不同地域的服务器间的流量调配,保证使用最佳的服务器服务离自己最近的客户,从而确保访问质量。 在CDN系统中作为核心的流量调度系统
常见的缓存服务开源解决方案
varnish squid (类似 nginx–> apache)
nginx apache 也有缓存功能
nginx 和 haproxy 在性能上不分伯仲
execstart 定义如何启动守护进程
#node1环境:[root@node1 ~]# iptables -F[root@node1 ~]# setenforce 0[root@node1 ~]# yum install varnish -y[root@node1 ~]# vim /etc/varnish/test.vcl[root@node1 ~]# systemctl start varnish.service[root@node1 ~]# ss -tnl----------#node2,node3环境:[root@node2/3 ~]# iptables -F[root@node2/3 ~]# setenforce 0[root@node2/3 ~]# yum install -y httpd [root@node2/3 ~]# for i in {1..10}; do echo "page $i on web1" > /var/www/html/test$i,html; done[root@node2/3 ~]# systemctl start httpd.service----------#node4 测试
varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 # 登录管理命令行varnish> vcl.list # 列出所有的配置varnish> vcl.load test1 test.vcl # 加载编译新配置,test1是配置名,test.vcl是配置文件varnish> vcl.use test1 # 使用配置,需指定配置名,当前使用的配置以最后一次vcl.use为准varnish> vcl.show test1 # 显示配置内容,需指定配置名
配置后端的web服务器
#编辑配置文件[root@node1 ~]# vim /etc/varnish/test.vcl backend default { .host = "192.168.2.139"; .port = "80"; }
为响应添加X-Cache首部,显示缓存是否命中
#编辑配置文件[root@node1 ~]# vim /etc/varnish/test.vcl vcl_deliver { if (obj.hits>0) { set resp.http.X-cache="hit from"+server.ip; }else{ set resp.http.x-cache="miss from"+server.ip; } }#测试[root@node4 ~]# curl -I http://192.168.2.138:6081/test2.html
强制对某资源请求不检查缓存
#编辑配置文件[root@node1 ~]# vim /etc/varnish/test.vcl vcl_recv { if (req.url ~ "^/test3.html$" || req.url ~ "(?i)^/admin" || req.url ~ "(?i)^/login") { return(pass); } }#测试[root@node4 ~]# curl -I http://192.168.2.138:6081/test3.html[root@node4 ~]# curl -I http://192.168.2.138:6081/login/index.html[root@node4 ~]# curl -I http://192.168.2.138:6081/admin/index.html
对特定资源取消其私有Cookie标识,并强行设定其可以由varnish缓存的时长 即TTL值
#编辑配置文件[root@node1 ~]# vim /etc/varnish/test.vcl sub vcl_backend_response { if (beresp.http.cache-control !~ "s-maxage") { if (bereq.url ~ "(?i)\.jpg$") { set beresp.ttl=3600s; unset beresp.http.Set-Cookie; } if (bereq.url ~ "(?i)\.css$") { set beresp.ttl=600s; unset beresp.http.Set-Cookie; } } }#测试[root@node4 ~]# curl -I http://192.168.2.138:6081/1.jpg
设定使用多个后端主机响应资源
[root@node1 ~]# vim /etc/varnish/test.vcl backend websrv1 { .host = "192.168.2.139"; .port = "80"; .probe = { .url = "/test1.html"; } } backend websrv2 { .host = "192.168.2.137"; .port = "80"; .probe = { .url = "/test1.html"; } } sub vcl_recv { if (req.url ~ "(?i)\.(jpg|png|gif)$") { set req.backend_hint = websrv1; } else { set req.backend_hint = websrv2; }
负载均衡
[root@node1 ~]# vim /etc/varnish/test.vcl backend websrv1 { .host = "192.168.2.139"; .port = "80"; .probe = { .url = "/test1.html"; } } backend websrv2 { .host = "192.168.2.137"; .port = "80"; .probe = { .url = "/test1.html"; } } import directors; sub vcl_init { new mycluster = directors.round_robin(); mycluster.add_backend(websrv1); mycluster.add_backend(websrv2); } vcl_recv { set req.backend_hint = mycluster.backend(); }
小命令
[root@node1 ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 ping status vcl.load test1 default.vcl vcl.use test1 vcl.use boot vcl.discard test1 vcl.list vcl.show boot storage.list panic.show param.show param.set thread_pools 4 param.show thread_pools backend.list ban.list[root@node1 ~]# varnishlog[root@node1 ~]# varnishncsa[root@node1 ~]# varnishtop[root@node1 ~]# varnishstat
1. Ehcache
在Java项目中应用非常广泛, 主要面向通用缓存,J2EE和轻量级容器。一级缓存在内存,二级缓存在磁盘。
优点:
1. 直接在jvm虚拟机中缓存,速度快,效率高;
2. 小巧,使用简单;
缺点:
缓存共享麻烦,不易维护;集群分布式应用不方便。
应用场景:
单个应用或者对缓存访问要求很高的应用。
2. Varnish
高性能、开源的反向代理服务器和内存缓存服务器。
优点:
1. 高性能;
2. 多核支持;
3. 支持0-60秒的精确缓存时间。
缺点:
1. 不具备自动容错和恢复功能,重启后数据丢失;
2. 在线扩容比较难。
3. 32位机器上缓存文件大小为最大2GB;
4. 不支持集群。
应用场景:
并发要求不是很大的小型系统和应用。
3. Memcache
一个高性能的分布式内存对象缓存系统。通过key-value形式缓存。
优点:
1. 高性能;
2. 多线程支持,安装简单;
3. 部分容灾;
4. 均衡请求。
缺点:
1. 不能持久化存储;
2. 存储数据有限;
3. 集群数据没有复制和同步机制;
4. 内存回收不能及时。
应用场景:
大型系统,缓存共享、分布式部署和集群应用。
4. Redis
基于内存的键-值存储数据库。
优点:
1. 高性能;
2. 丰富的数据类型;
3. 支持持久化;
4. 支持主从复制。
缺点:
1. 不具备自动容错和恢复功能;
2. 在线扩容比较难;
3.不支持多核多线程处理。
应用场景:
大型系统,缓存共享、分布式部署和集群应用。
- Linux学习之Varnish
- linux进阶之旅(一)& varnish
- linux varnish
- linux学习之rhel6.5 varnish服务简介及基础配置 应用
- nginx学习,varnish学习
- varnish linux 内核优化
- Linux+varnish安装配置
- Linux+varnish安装配置
- linux企业部分 varnish
- Varnish学习手札
- 学习了一下varnish
- varnish学习笔记
- varnish 学习笔记
- varnish学习笔记
- 缓存服务器之varnish
- 手动 4- linux配置varnish
- Linux搭建squid varnish 代理服务器
- Linux---CDN高速缓存器 Varnish
- java 线程
- 一.Redis的介绍和安装(Linux环境)
- Python 写入MySQL乱码
- leetcode[Intersection of Two Arrays]
- 用nodejs创建一个http2服务器
- Linux学习之Varnish
- setTimeout()延时器
- 8 Three.js使用轨迹球插件(trackball)增加对模型的交互功能
- CSUOJ:1226: ACM小组的内战
- R中如何用ifelse进行数据分组
- 线程中断
- Largest prime factor 素数筛(素数打表,打表不优美会爆)
- Unity游戏开发网络基础(1)
- MyBatis在SSM中的用法