现在我使用nginx和APC一起用于phpcaching和mysqlcaching的memcache。 我想知道什么清漆caching可以在我现有的环境中做,因为我想实现清漆,任何想法?
清漆通常设置为将caching的数据副本存储在内存中,并直接从那里提供服务。 因此,应该为其分配大量的内存以使其正常运行。 光油可以设置为使用磁盘支持的caching,但是这会失去它提供的一些好处。
与nginx相比,如果使用Varnish,则不会注意到为服务较小的,经常访问的静态文件在性能上的显着差异。 原因是一个好的设置nginx将直接提供静态文件(即不会将请求传递给PHP),并且操作系统caching磁盘请求(意味着它们本质上是从内存中提供的)。
如果你可以caching你的dynamic内容,你可以从Varnish获得显着的好处。 考虑一篇文章或主页,相对于查看的数量(即使每5分钟更改一次,但在此期间收到100个视图,更改的次数最less),它们的变化并不常见。 这里的好处是,Varnish可以cachingdynamic页面的副本,并直接将其提供给用户。 这大大减less了重新生成dynamic页面的必要性,而这往往是一个计算量大的操作。 (这不仅会减lessPHP的负载,而且还会减lessMySQL的负载 – 结果是需要由后端处理的请求可以更快地返回)。
如果设置良好,Varnish将允许您清除caching中的单个文件,因为这些文件的更新可用 – 这会阻止您提供过时的副本。 此外,Varnish允许对caching的存储方式进行相当细致的控制 – 这允许您不caching某些页面(例如特定于login用户的页面等),基于请求者IP地址caching页面,更改标题等。
回顾一下:在您的环境(nginx + php-fpm + APC)中,Varnish可以提供的好处是减less到达后端的dynamic页面的请求。 如果你只是将它用于静态资产,我会build议你坚持使用nginx。
在不同的设置(例如Apache)中,从Varnish提供的静态资源会很有意义。
即使你有足够的内存空间,Varnish为静态资产提供的性能改进,与nginx相比,几乎没有dynamic页面那么明显。
(作为提到的一点,nginx提供了一个fastcgi_cache,但是它并没有提供Varnish所做的选项范围,我觉得它使Varnish更适合cachingdynamic页面)。
编辑:APC
PHP是一种解释型语言,您可以编写脚本,然后通过解释器运行,并转换为底层操作系统可以理解的forms。 APC是一个操作码caching – 它特定于PHP(尽pipe其他语言也可能存在类似的产品)。
本质上,APC存储“编译”过程的中间产品,以便后续对同一代码的调用可以更快地处理。 这意味着如果多次运行相同的代码,第一次调用将经历完整的解释过程,而下一次请求将能够使用预处理的代码 – 这是APC产生的加速的结果。
此外,APC不能在完整的PHP文件上运行 – 而是在文件的一部分 – 所以如果你在两个独立的PHP脚本中使用(例如,通过一个包含)相同的函数,函数的caching副本将对这两个脚本都有好处。
APC使用内存映射 – 这意味着它的caching文件可以由共享/匿名内存或实际文件支持。 支持内存的caching通常提供更好的性能,但不会在重新启动时持续存在。
与Varnish不同,Varnish存储了由脚本生成的最终“静态”输出(即发送给用户的输出),APC存储更加dynamic的版本 – 对每个input产生不同输出的函数将受益于APC ,但不是从清漆。
主要有:
APC和Varnish执行不同的function,您可以将它们一起使用,以获得最佳效果。
考虑另一种方式 – 不涉及PHP / MySQL总是会更快 – 静态页面(本质上是一个caching副本)比dynamic页面更快,但是当你确实需要提供一个dynamic页面时,你想使它成为尽可能快。
(一个谨慎的话 – 清漆可以很难正确设置 – 默认情况下,它不会caching任何有cookie的页面 – 这是为了防止向错误的用户提供受限制的信息。不正确的设置,清漆可以轻松地caching副本页面,应该只显示某些(例如login/pipe理)用户,并将其提供给每个人。)
清漆特别擅长服务“静态”内容。
例如。 图像,JS,CSS
所以如果你的网站上有很多静态内容很less变化,你可以跳过整个服务器堆栈,然后hotcut到Varnish。