据称,我正在工作的网站在发布后不久将具有很高的点击率。客户正在谈论一天之内每秒大约2500次点击的可能性。
忽略这个命中率可能是疯狂的客户端乐观的事实,除了获得最大的服务器以外,应该配置Drupal支持最大命中率的最佳方法是什么。
我读过缩放drupal.org基础设施,Drupal的性能博客,最佳实践缩放的Drupal和其他许多网页,但我正在寻找的是这样做的真实经历,是什么在起作用,什么不和什么期望。
据称,我正在工作的网站在发布后不久将具有很高的点击率。客户正在谈论一天之内每秒大约2500次点击的可能性。
忽略这个命中率可能是疯狂的客户端乐观的事实,除了获得最大的服务器以外,应该配置Drupal支持最大命中率的最佳方法是什么。
我读过缩放drupal.org基础设施,Drupal的性能博客,最佳实践缩放的Drupal和其他许多网页,但我正在寻找的是这样做的真实经历,是什么在起作用,什么不和什么期望。
Answers:
Markdorison的答案基本上是解决此问题的公认方法。我将进一步介绍。
当D6的Pressflow或D7的Drupal,Memcached和Varnish都可以很好地协同工作时,您需要自定义代码VCL文件。有一些免费的入门技巧,但是您始终需要与他们一起玩。
为了使Varnish发挥最佳性能,请确保使用-s malloc xG而不是默认的-s文件/ path / to / file来启动它。另外,使用Varnish可以使Varnish尽可能长时间地缓存静态项目。
如果您有多个Web服务器,请从VCL中发送到Varnish的标头中删除ETag。我还删除了Expires,仅依靠标题中的Age和max-age来使浏览器返回该站点。
1.5版(截至2011年3月3日)仍然是Drupal.org最快的Memcached模块版本。我通常使用每台服务器单个容器来部署它,以降低tcp流量,以便大规模连接到多个容器)
将“性能”中的缓存配置为外部,并设置最长期限,该期限将正确的标头发送到诸如Varnish之类的缓存代理。
如果您无法在Varnish中正确缓存某些页面,请查看网络上的博客文章,其中详细介绍了如何检查请求。这是我前阵子写的一个示例帖子:是什么阻止了Varnish和Drupal Pressflow缓存匿名用户的页面视图
您应该为MySQL选择InnoDB(或其他提供商(例如XtraDB)的其他名称之一)并将所有表移入其中。然后查看此博客文章以获取基本的调优建议http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
拥有很大的缓冲池从根本上来说很重要。在站点进行负载测试时,请打开慢速查询日志。您可能首先希望捕获耗时超过50毫秒的查询,然后对查询进行调优,并重复减少慢速日志捕获时间,直到大多数查询都使用索引运行并迅速执行为止。
其他基础知识包括在PHP中使用APC。如果您追求快速CGI而不是mod_php,请花一些时间通过配置一个好的包装器脚本来使APC缓存在php实例之间共享。还要确保APC缓存在内存映射文件中,以将PHP的最后每一位都压缩掉。
我建议从Pressflow(如果使用Drupal 6),Memcache,Varnish和某种形式的内容分发网络(CDN)(例如Akamai)开始。最终结果应该是实际访问原始服务器的用户尽可能少。
如果页面的某些部分无法为非匿名用户缓存(特定于该用户的内容,例如“ Welcome userX”等),则可以探索选项来填充页面的这些部分,例如异步回调或边缘包含。
如果您需要能够查看站点的未缓存版本的内部用户小组(例如,一组编辑者)较小,则建议您将站点的未缓存版本暴露在其他URL(受VPN保护)下或同等的费用(如果可能)。
每天每秒2500次点击-如果您按“点击”表示“已投放页面”,则意味着每天有2.16亿页。让我告诉你:您每天没有2.16亿页。我爱这些客户...
就是说,原始流量数据什么也没说。如果您所拥有的全部都是匿名流量,但是如果已登录流量,那么此线程中的建议听起来很像Varnish / CDN,那么您将面临挑战。但是在花费大量的时间和精力来解决问题之前,请确保您有问题。每秒2500次点击,必应得到的比这还少,您意识到吗?
服务器端
代码面
数据库
虽然很难预测模式,但是如果您对流量水平有一个合理的了解。负载测试您的解决方案。有很多不同的选项,只有在您获得实时流量后,才能进行很多预测,但是如果您尽可能多地进行测试,则至少可以确信您的设置可以处理流量。
如果不先进行测试,世界上所有的调音都将无济于事。
这是DC SF上有关经济学家如何做的演讲。 http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online-using-grinder
对于高流量的网站,您应该使用多个服务器和负载平衡器,或者仅使用CDN。同样重要的是,尽可能多地缓存以最小化Web服务器上的负载。
使用Content Delivery Network(CDN)有助于在多个域上分散资源(域分片),从而减少了Web服务器上的负载。
由于存在多个端点,因此使用CDN有助于分布式缓存和远程加速,还有助于减轻DDoS攻击。它有助于提高安全性,因为缓存的内容更难以利用。
提供程序示例:Fastly,Rackspace,Akamai,Azure,CloudFlare,Amazon,MaxCDN,Verizon。
以下是一些建议:
ab
,TTFB的 JMeter之类的工具,负载和压力测试。因此,从用户角度来看,您的Web体系结构可能类似于:
对于Drupal优化建议,请检查:如何提高Drupal性能?
启用两个扩展:
您的表现会更好。
如果要在Microsoft Azure中使用Zend OPcache和Wincache,请首先在ini
“下” 创建一个文件夹名称“ D:\home\site\
”。另外,创建2个文件“ .user.ini
”和“ settings.ini
”
在每个文件中添加以下配置:
.user.ini
[PHP]
post_max_size = 32M
memory_limit = 512M
zend.enable_gc = On
upload_max_filesize = 32M
opcache.enable=1
设置
wincache.ocenabled = 1
wincache.ocachesize = 255
另外,使用键 PHP_INI_SCAN_DIR
和值将应用程序设置添加到您的Web应用程序 d:\home\site\ini
更改PHP_INI_SYSTEM后,重新启动Web应用程序。如果想进一步了解分支配置,请查阅Microsoft文档。
完成上述设置后,我的Drupal(Drupal 8.3)网站在3秒钟内加载完毕。