`
阅读更多
[b]什么是varnish

Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。
   
Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了CPU内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。
varnish项目是2006年发布的第一个版本0.9.距今已经四年多了,此文档之前也提过varnish还不稳定,那是2007年时候编写的,经过varnish开发团队和网友们的辛苦耕耘,现在的varnish已经很健壮。很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源占用更少。相信在反向代理,web加速方面,varnish已经有足够能力代替squid。


varnish比squid的优势
1、Varnish采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。
2、Varnish的稳定性还不错,ryvius管理的一台图片服务器运行Varnish已经有一个月,没有发生过故障,而进行相同工作的Squid服务器就倒过几次。
3、通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存,这一点是Squid不能具备的。


varnish 中的对象
http://www.varnish-cache.org/docs/2.1/reference/vcl.html
server ,client
req == request ,bereq == backend request
resp == response,beresp == backend response
obj == cache object

varnish状态转移图




Work线程处理请求的过程是根据VCL的配置而定制的状态机,典型的处理流程如下
1.Receive,请求处理的入口状态,根据VCL判断该请求是Pass(跳过)还是进行Lookup(本地查询)
2.Lookup,在hash表中查找数据,若找到则进入hit状态,否则进入fetch状态。
3.Pass, 选择后台,进入fetch状态
4.Fetch,对请求进行后端的获取,发送请求,获得数据,并进行本地的存储
5.Deliver,,将数据发送给客户端,然后进入done
6.Done,处理结束事宜,对于一些请求需要做重新处理则可能重新进行状态转换或交给epoll

varnish 中的默认config

# This is a basic VCL configuration file for varnish.  See the vcl(7)
# man page for details on VCL syntax and semantics.
# 
# Default backend definition.  Set this to point to your content server.
# 服务侦听地址和端口
backend default {
     .host = "127.0.0.1";
     .port = "8080";
}

# 
# Below is a commented-out copy of the default VCL logic.  If you
# redefine any of these subroutines, the built-in logic will be
# appended to your code.

sub vcl_recv {

     if (req.restarts == 0) {
 	if (req.http.x-forwarded-for) {
 	    set req.http.X-Forwarded-For =
 		req.http.X-Forwarded-For ", " client.ip;
 	} else {
 	    set req.http.X-Forwarded-For = client.ip;
 	}
     }

     #这里如果不是基本http操作就跳过
     if (req.request != "GET" &&
       req.request != "HEAD" &&
       req.request != "PUT" &&
       req.request != "POST" &&
       req.request != "TRACE" &&
       req.request != "OPTIONS" &&
       req.request != "DELETE") {
         /* Non-RFC2616 or CONNECT which is weird. */
         return (pipe);
     }

     #这里默认只cache GET 和 HEAD Method
     if (req.request != "GET" && req.request != "HEAD") {
         /* We only deal with GET and HEAD by default */
         return (pass);
     }
     #是否需要认证
     if (req.http.Authorization || req.http.Cookie) {
         /* Not cacheable by default */
         return (pass);
     }
     #检查cache中有没有,相当于 cache.get(uri)
     return (lookup);
 }
 
 sub vcl_pipe {
     # 直接做管道通过,不做任何处理
     # Note that only the first request to the backend will have
     # X-Forwarded-For set.  If you use X-Forwarded-For and want to
     # have it set for all requests, make      sure to have:
     # set bereq.http.connection = "close";
     # here.  It is not set by default as it might break some broken web
     # applications, like IIS with NTLM authentication.
     return (pipe);
 }

 
 sub vcl_pass {
     #去后台取数据,用于未命中的情况
     return (pass);
 }

 
 sub vcl_hash {
     #生成hash key,对应一个缓存页面 url + ip
     set req.hash += req.url;
     if (req.http.host) {
         set req.hash += req.http.host;
     } else { 
         set req.hash += server.ip;
     }
     return (hash);
 }
 
 sub vcl_hit {
     #cache.get 命中
     if (!obj.cacheable) {
         return (pass);
     }
     #发送命中数据
     return (deliver);
 }
 
 sub vcl_miss {
     #未命中,去服务器去取数据
     return (fetch);
 }
 
 sub vcl_fetch {
     if (!beresp.cacheable) {
         return (pass);
     }
     if (beresp.http.Set-Cookie) {
         return (pass);
     }
     return (deliver);
 }
 
 sub vcl_deliver {
     return (deliver);
 }

 #varnish 错误情况
 sub vcl_error {
     set obj.http.Content-Type = "text/html; charset=utf-8";
     synthetic {"
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html>
   <head>
     <title>"} obj.status " " obj.response {"</title>
   </head>
   <body>
     <h1>Error "} obj.status " " obj.response {"</h1>
     <p>"} obj.response {"</p>
     <h3>Guru Meditation:</h3>
     <p>XID: "} req.xid {"</p>
     <hr>
     <p>Varnish cache server</p>
   </body>
 </html>
 "};
     return (deliver);
 }


Varnish缓存的后端健康监测
backend fileserver{ 
     .host = "127.0.0.1"; 
     .port = "8080";
     .probe = { .url = "/test.html"; 
                      .timeout = 3000 ms; 
                      .interval = 5 s;
                      .window = 3; 
                      .threshold = 2;  #3次检查里2次失败,就算不健康 
                    }
     }



优化Linux内核参数 

#主要是开大tcp 缓冲区和链接数量
vi /etc/sysctl.conf 
net.ipv4.ip_local_port_range = 1024 65536 
net.core.rmem_max=16777216 
net.core.wmem_max=16777216 
net.ipv4.tcp_rmem=4096 87380 16777216 
net.ipv4.tcp_wmem=4096 65536 16777216 
net.ipv4.tcp_fin_timeout = 30 
net.ipv4.tcp_keepalive_time = 300 
net.ipv4.tcp_tw_recycle = 1 
net.core.netdev_max_backlog = 30000 
net.ipv4.tcp_no_metrics_save=1 
net.core.somaxconn = 262144 
net.ipv4.tcp_syncookies = 0 
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144 
net.ipv4.tcp_synack_retries = 2 
net.ipv4.tcp_syn_retries = 2


sysctl  -p 


2
5
分享到:
评论

相关推荐

    6.5: Tomcat服务器 、 Tomcat应用案例 、 Varnish代理服务器 、 总结和.docx

    【总结】 Tomcat服务器是部署Java Web应用的关键组件,其与JDK的配合使得开发和部署过程更为便捷。通过配置虚拟主机,可以高效地在同一台服务器上托管多个独立的Web应用程序。同时,结合Varnish这样的代理服务器,...

    varnish测试报告

    根据提供的文件信息,以下是关于“Varnish测试报告”的详细知识点总结: ### Varnish缓存系统概述 Varnish是一款高性能的HTTP反向代理服务器和缓存服务器,常用于Web应用的加速。它能够将静态内容缓存在内存中,并...

    varnish的VCL的详细解析

    Varnish Cache是一款高性能的Web应用加速器,主要用于缓存网页内容以减少服务器负载并提高网站响应速度。其核心配置语言称为VCL(Varnish Configuration Language),用于定义缓存行为、负载均衡策略以及各种复杂的...

    proxyServer squid / varnish / apache traffic server / ATS

    总结来说,代理服务器在现代网络环境中扮演着重要的角色,而Squid、Varnish和ATS作为代理缓存服务器的代表,各有其优缺点。选择合适的代理缓存服务器软件应考虑实际应用场景的需求,以及服务器的性能和稳定性。对于...

    Day02 varnish cdn推送平台

    #### 总结 通过以上步骤,我们可以成功搭建一个基于Varnish的CDN推送平台。此平台不仅可以显著提升网站的访问速度,还能有效减轻源服务器的压力,提高系统的稳定性和可用性。此外,还可以根据业务需求进行更多的...

    Laravel开发-laravel-varnishable

    总结来说,“laravel-varnishable”是Laravel开发者提升应用性能的一个有力工具,通过简化Varnish的集成过程,使得即使是对Varnish不熟悉的开发者也能轻松利用其优势。了解并掌握这个扩展包的使用,将有助于在项目中...

    varnish安装配置[参照].pdf

    Varnish是一款高性能的HTTP缓存加速器,常用于网站前端,提高静态内容的加载速度。它通过在服务器和客户端之间缓存中间响应,减少了网络延迟,降低了服务器负载...正确安装和配置Varnish是提升Web应用性能的关键步骤。

    varnish安装配置[归类].pdf

    Varnish是一个高性能的HTTP缓存和代理服务器,主要用于加速网站的前端性能。它通过将频繁访问的内容存储在内存中,减少对后端服务器的请求,从而...实际应用中,Varnish配置可以根据具体需求进行更复杂和细致的定制。

    高命中率的varnish缓存配置分享

    总结来说,实现高命中率的Varnish缓存配置需要考虑以下几个关键点: 1. 合理设置后端服务器的连接超时时间,以确保服务的稳定性。 2. 控制缓存的过期时间和grace时间,平衡响应速度和数据新鲜度。 3. 精心设计缓存...

    hitch:Varnish Software的可扩展TLS代理

    总结来说,Hitch是一个强大的工具,专为处理高负载场景下的SSL/TLS连接而设计。它的多核优化、高性能特性和丰富的配置选项,使得它成为企业级Web服务的理想选择,特别是与Varnish Cache配合使用时,能够提供卓越的...

    高性能Linux服务器构建实战:运维监控、性能调优与集群应用

    Web应用篇详细介绍了Nginx、Varnish和Memcached这三款Linux服务器上极为常用的Web应用软件的安装、配置、管理、使用方法、工作原理和性能调优技巧。数据备份与恢复篇首先讲述了开源备份软件bacula的使用与管理技巧,...

    Linux 企业应用案例

    - **缓存加速**:利用Varnish或Memcached提升站点访问速度。 - **安全性加固**:防火墙配置、安全策略设定、DDoS防护措施。 #### 二、LDAP目录服务配置 **知识点:** - **OpenLDAP安装与配置**:包括LDAP服务器...

    大型高并发web应用系统架构分析与设计

    **1.3 Web内网加速技术总结** 内网加速技术主要包括负载均衡、缓存服务器、高性能Web/应用服务器以及分布式文件系统和数据库等。这些技术相互配合,能够显著提高Web应用的响应速度和处理能力。 **1.4 现有Web加速...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    2.7 Varnish的常见应用实例 2.7.1 利用Varnish实现图片防盗链 2.7.2 利用Varnish实现静态文件压缩处理 2.8 本章小结 第3章 Memcached应用实战 3.1 Memcached基础 3.1.1 什么是Memcached 3.1.2 ...

    ganglia系统监控扩展

    总结来说,"ganglia系统监控扩展"提供了一种使用Python扩展Ganglia监控能力的方法,包括对Nginx和Varnish等特定服务的深入监控。通过这样的扩展,我们可以更细致地观察和管理我们的IT基础设施,及时发现并解决性能...

    web前端试用期工作总结.doc

    3. **监控系统优化**:自学并应用Nagios监控服务器搭建,提高了监控效率和清晰度,通过Nagvis实现了3D效果,便于直观了解服务器负载情况。 4. **论坛建设和发布**:独立创建了部门BBS论坛,促进内部交流和学习,...

    精品专题(2021-2022年收藏)php试用期工作总结.doc

    例如,学习和应用Nagios、Nagvis等监控工具,提高对服务器负载的可视化管理。 6. **网站发布与服务器管理**:熟悉各种Web服务器的部署,如Apache、Varnish、Lighttpd等,是PHP程序员的基础技能,这包括网站的发布和...

    运维工程师转正工作总结.docx

    本文将基于一名运维工程师的转正工作总结,详细探讨其在试用期间的工作成果和成长经历。 试用期间,我作为运维工程师的首要任务是深入理解公司的网络架构,确保公司的重要系统服务能够稳定运行。我不仅学习了公司的...

Global site tag (gtag.js) - Google Analytics