在本节中,我们将回答以下问题:
- 这个名为 "Varnish "的软件包里有什么?
- 所有不同的部件名称是什么?
- 组装时需要什么?
Varnish 的两个主要部分是 varnishd 程序中的两个进程。第一个进程叫做 “管理器”,它的工作是与管理员对话,实现您的要求。
第二个进程被称为 "工作进程 "或 “子进程”,它负责处理您的 HTTP 流量。
启动 varnishd 时,会启动管理器进程,一旦它处理完所有命令行标志,就会为你启动子进程。如果子进程死亡,管理器会立即自动为你重新启动它。
这种分工的主要原因是安全:管理器进程通常以 "root "权限运行,以便打开 TCP 80 端口,但作为一种防御措施,它会以最小权限启动子进程。
管理器进程是交互式的,它提供一个 CLI(命令行界面),可以通过脚本或程序手动使用。CLI几乎可以完全控制Varnish对HTTP流量的实际操作,而且我们已经尽了最大努力确保您无需重启Varnish进程,除非您需要更改一些非常基本的内容。
CLI可以通过简单灵活的PSK(预共享密钥)访问控制方案进行安全的远程访问,因此很容易将Varnish集成到您的运营和管理基础设施中,或将其与您的CMS绑定。
所有这些都将在启动和运行 Varnish 中介绍。
子进程应如何处理 HTTP 请求、缓存什么内容、删除哪些头文件等,都是通过一种名为 VCL(Varnish 配置语言)的小型编程语言来指定的。管理器进程将编译 VCL 程序并检查是否有错误、
但运行VCL程序的是子进程,它负责处理每一个HTTP请求。
由于 VCL 是编译成 C 代码的,而 C 代码又是编译成机器指令的,因此即使是非常复杂的 VCL 程序,也能在几微秒内执行,完全不会影响性能。
如果你不是一个真正的程序员,也不用担心,VCL 的操作非常简单:
sub vcl_recv {
# Remove the cookie header to enable caching
unset req.http.cookie;
}
CLI 界面允许你随时编译和加载新的 VCL 程序,你可以在加载的 VCL 程序之间即时切换,无需重启子进程,也不会错过任何一个 HTTP 请求。
VCL 代码可以使用外部模块(称为 VMOD)进行扩展,如果您有胆量的话,甚至可以使用内联 C 代码进行扩展。
VCL - Varnish 配置语言 详细介绍了 VCL 及其功能。
Varnish 使用一段共享内存来报告和记录其活动和状态。对于每个 HTTP 请求,都会有一些非常详细的记录附加到日志内存段。其他进程可以订阅日志记录,对其进行过滤和格式化,例如将其格式化为 Apache/NCSA 风格的日志记录。
共享内存中的另一部分用于统计计数器,可对缓存命中率、资源使用情况和特定性能指标进行实时监控,分辨率可达微秒级。
Varnish 自带了许多工具,可以从共享内存、varnishlog、varnishstats、varnishncsa 等中获取报告,还提供了一个 API 库,如果需要,你可以编写自己的工具。
报告和统计数据 解释了所有这些工具的工作原理。
您之所以对 Varnish 感兴趣,大概是希望您的网站运行得更好。网站性能调优涉及很多方面,从相对简单的缓存策略决策,到使用 ESI 和自动故障转移设计地理位置多样化的多级 CDN。
Varnish 和网站性能 将带您了解 Varnish 提供的各种可能性和设施。
最后,这里必须提到墨菲定律:事情总会出错,而且更有可能是在零点零几分出错。最有可能发生在飓风期间,当你的手机没电时,当你的妻子为庆祝你们的结婚纪念日准备了一个温馨的夜晚时。
是的,我们都经历过,不是吗?
希望 Varnish 故障排除 能帮到您。