确保 Magento 免受高流量影响

确保 Magento 免受高流量影响

你好,我有一个带有 php(magento)脚本的 apache 服务器 2.2。

正常情况下,php 页面渲染需要 1-2 秒,这是可以的。

有时,在流量较大或蜘蛛机器人较粗暴的情况下,所有 Apache-Slots 都会被阻塞。

单个请求运行非常慢,并且使用越来越多的内存,直到 mysql 调用 oom-killer,从而杀死我需要的 tomcat。

首先我尝试了 mod_evasive。但如果我将其配置得太严格,我就无法快速浏览;如果我将其配置得太宽松,请求就会来得更快,然后才能被处理。

问题出在 php 文件上。其他资源(如图像等)不会阻碍插槽。

其次,我尝试通过降低 MaxClients 来限制它。但现在一个客户端可能会阻塞所有插槽。

您知道如何限制每个客户端的最大连接数或每个 IP 的最大同时 PHP 脚本数吗?

如何配置其他 Apache 客户端以避免在不偏袒任何客户端的情况下处理超出其能力的请求?

答案1

将您的网站置于源拉 CDN 之后(Cloudflare我想到了一个选择,但还有其他选择。

正常情况下,php 页面渲染需要 1-2 秒,这是可以的。

不,这不对。

优化你的代码,使其不会占用秒来生成页面。

然后缓存全部这些事。

  • 使用以下方式缓存页面请求
  • 使用 Memcached 进行缓存数据库查找。
  • 在 CDN 上缓存图像。
  • 使用 APC 或 eAccelerator (或类似的操作码缓存) 缓存 PHP 级别
  • 事实上,也可以在 CDN 上缓存整个页面。

如果您还没有这样做,请将您的数据库服务器转移到单独的服务器上,为其提供大量内存和超快磁盘,然后将您的表缓存起来。Magento 在连接等方面表现不佳,因此您需要您的数据库服务器速度非常快。

这样,当用户查看你的网站时,内容就会从缓存中提取出来某处而不必生成每一个时间。


我冒昧地对您的网站运行了 Yslow。以下是结果摘要(不过,您应该自己做这件事……)

  1. 减少 HTTP 请求。 基本上,您应该将您的 javascript 和 CSS 文件合并为一个,这样可以减少发出多个请求的开销。
  2. 使用内容分发网络 (CDN)。 我已经在上面说过了,但是 Yslow 告诉我,60静态组件不在 CDN 上。其中 1.4MB 来自 www.brainyoo.de。这让我想到了……
  3. 将资产移动到多个无 cookie 的域。60 个资产与网站的其他部分从同一个域加载。这意味着浏览器必须等待每个资产加载完毕后才能加载下一个。解决此问题的常用方法是将静态资产放在单独的、无 cookie 的域上(这样请求更小、更快,并且不包含 cookie 信息)。
  4. 将 Javascript 移至文档底部。 被视为可扩展、快速网站的最佳实践。
  5. 最小化 Javascript 和 CSS。 说真的。你发送了将近 1MB 的 JS 和 CSS,这些都可以被最小化并...
  6. 使用 Gzip 压缩组件。有 39 个纯文本组件可以被 gzip 压缩。
  7. 添加 Expires 标头。 有 63 个静态文件的过期日期还很远,因此浏览器无法有效地缓存它们。

YSlow 总评分 D。我开始怀疑你的问题是否完全出在服务器端,但可以好好处理一下,提高你的 YSlow 评分。因为这样,a) Apache 服务器的流量更少。b) 加载速度更快,因此你的访问者不会长时间锁定 Apache 进程。

答案2

一般来说,如果 magento 运行缓慢或者时不时地杀死你的服务器,那么你的服务器如果有更多的 RAM/CPU 能力就会运行得更好。你可以调整你的服务器以顺利运行 magento,但这需要 a) 一些时间和 b) 必要的(服务器端)资源。

你做了多少数据库调整? magento 很麻烦,但是如果有足够的 RAM,可以配置得很快。

使用类似的工具mysql_tuner或者mysql 调优入门调整你的数据库。

并尽可能多地使用缓存。我不记得是否支持APC;memcached更好。

您还应该留意 IOWAIT,它暗示高清性能非常糟糕,可能有不同的原因。


编辑:

其他 Apache 客户端如何配置,以避免在不偏袒任何客户端的情况下处理超出其处理能力的请求?/我想知道其他 Apache 如何处理超出其处理能力的请求的情况

通常,您会根据预期的流量扩展您的设置。如果您的服务器在蜘蛛和爬虫访问它时出现故障,那么要么是您的脚本性能很差,要么是您的服务器太小。

当我预计我的服务器上会有 1000 个用户时,我会使用一个可以处理 5000 个客户端的服务器(并且我会监控 error.log 以了解是否已达到 max_clients)

可以进行速率限制,但您将获得与使用 mod_evasive 相同的体验。它确实在 DDOS 方面有所帮助,但如果您需要调整设置则不然。

相关内容