上QQ阅读APP看书,第一时间看更新
5.5 Varnish缓存
5.5.1 Varnish缓存状态
通过浏览器访问对应的网页可查看Varnish缓存的状态。如果Varnish缓存成功,第二次打开网页的速度会明显比第一次快,但是这种方式并不能充分说明缓存状态。下面以命令行的方式,通过查看网页头部来查看命中情况,如代码清单5-10所示。
代码清单5-10 查看Varnish缓存状态
[root@varnish ~]# curl -I http:// 127.0.0.1:2222/zachary/demo/showtime HTTP/1.1 200 OK Server: Tomcat/8.0 Last-Modified: Sat, 10 Jul 2019 11:25:15 GMT ETag: "5e850b-616d-48b06c6031cc0" Content-Type: application/json Content-Length: 24941 Date: Fri, 09 Jul 2019 08:29:16 GMT X-Varnish: 1364285597 Age: 0 Via: 1.1 varnish Connection: keep-alive X-Cache: MISS from 127.0.0.1
在代码清单5-10中,X-Cache:MISS表示此次访问未从缓存中读取,当我们第二次访问后,查看Varnish缓存状态,如代码清单5-11所示。
代码清单5-11 查看Varnish缓存状态
[root@varnish ~]# curl -I http:// 127.0.0.1:2222/zachary/demo/showtime HTTP/1.1 200 OK Server: Tomcat/8.0 Last-Modified: Sat, 10 Jul 2019 11:25:15 GMT ETag: "5e850b-616d-48b06c6031cc0" Content-Type: application/json Content-Length: 24941 Date: Fri, 09 Jul 2019 08:29:16 GMT X-Varnish: 1364285597 Age: 0 Via: 1.1 varnish Connection: keep-alive X-Cache: HIT from 127.0.0.1
在代码清单5-11中,X-Cache:HIT表示此次访问从缓存中读取。通过查看请求的头部和响应能看出数据是否已经被Varnish缓存,但只有通过缓存命中率的高低才能说明Varnish运行的效果。较高的缓存命中率说明Varnish运行良好,反之,说明Varnish的配置策略存在问题,需要调整。因此,从整体的命中率上可以直接反馈出Varnish的效果。Varnish提供了varnishstat命令,可以监控命中的过程。下面介绍varnishstat命令使用方法,如代码清单5-12所示。
代码清单5-12 varnishstat命令使用
[root@varnish ~]#/usr/local/varnish/bin/varnishstat -n /cache Hitrate ratio: 10 90 120 Hitrate avg: 0.9999 0.9964 0.9964 19960 98.92 1229.70 Client connections accepted 225820 660.84 8701.07 Client requests received 336802 530.78 6891.20 Cache hits 68 0.00 691.34 Cache misses 5688 33.96 220.37 Backend conn. success 6336 1.00 191.52 Backend conn. reuses 2642 33.96 47.14 Backend conn. was closed 8978 29.96 29.67 Backend conn. recycles 6389 1.00 70.79 Fetch with Length 2630 32.96 69.08 Fetch chunked 444 . . N struct sess_mem 23 . . N struct sess 64 . . N struct object 78 . . N struct objectcore 78 . . N struct objecthead 132 . . N struct smf 2 . . N small free smf 3 . . N large free smf 6 . . N struct vbe_conn 14 . . N worker threads 68 1.00 0.34 N worker threads created 0 0.00 0.00 N queued work requests 1201 11.99 5.98 N overflowed work requests 1 . . N backends 4 . . N expired objects 3701 . . N LRU moved objects 118109 942.85 587.61 Objects sent with write 9985 71.91 49.68 Total Sessions 121820 953.84 606.07 Total Requests
其中的参数详解如下。
- Client connections accepted:表示客户端向反向代理服务器成功发送HTTP请求的总数量。
- Client requests received:表示到现在为止,浏览器向反向代理服务器发送HTTP请求的累计次数。由于可能会使用长连接,因此这个值一般会大于Client connections accepted的值。
- Cache hits:表示反向代理服务器在缓存区中查找并且命中缓存的次数。
- Cache misses:表示直接访问后端主机的请求数量,也就是非命中数。
- N struct object:表示当前被缓存的数量。
- N expired objects:表示过期的缓存内容数量。
- N LRU moved objects:表示被淘汰的缓存内容数量。
5.5.2 Varnish缓存管理
Varnish缓存管理的主要工作是迅速有效地控制和清除指定的缓存内容。Varnish清除缓存的操作相对比较复杂,可以通过Varnish的管理端口发送purge指令来清除不需要的缓存。清除缓存的命令如代码清单5-13所示。
代码清单5-13 Varnish清除缓存命令
#清除指定URL的缓存 /usr/local/varnish/bin/varnishadm -T 192.168.10.101:2000 purge.url /xxx相对路径 #例如清除缓存(http:// 192.168.10.101:2222/zachary/demo/showtime) /usr/local/varnish/bin/varnishadm -T 192.168.10.101:2000 purge.url /zachary/demo/showtime #如/demo/下面有很多访问连接,需要批量清除 /usr/local/varnish/bin/varnishadm -T 192.168.10.101:2000 purge.url^/zachary/demo/*$ #清除所有的缓存 /usr/local/varnish/bin/varnishadm -T 192.168.10.101:2000 purge.url^.*$ #查看最近清除的缓存 /usr/local/varnish/bin/varnishadm -T 192.168.10.101:2000 purge.list
有时不想通过Linux命令清除缓存,此时可以通过telnet到管理端口来清除缓存,如代码清单5-14所示。
代码清单5-14 后台管理清除缓存
[root@varnish ~]#telnet 192.168.10.101 2000 Trying 192.168.10.101... Connected to localhost.localdomain (192.168.10.101). Escape character is '^]'. 200 154 ----------------------------- Varnish HTTP accelerator CLI. ----------------------------- Type 'help' for command list. Type 'quit' to close CLI session. purge.url /zachary/demo/query #清除这个连接的缓存数据 200 0 purge.url ^/nodes/data/*$ #清除/nodes/data/目录下缓存数据 200 0