我正在设置一台使用 Mysql 为 Magento 提供服务的 Debian 服务器。预计负载会很高(每天有数百万次点击)。我读过很多人的评论,发现有很多不同的设置,但我不知道如果我想这样做的话该怎么做。当然,在多台服务器之间进行负载平衡会很好,但我只有一台服务器。那么这个怎么样?
Varnish 位于 nginx 和 apache 之前,其中 nginx 只处理静态数据,而 apache 处理动态数据。
或者将 varnish 仅放在 apache 前面会更好吗?那么 nginx 就在前面,静态数据直接由 nginx 提供,动态 apache 页面则通过 varnish 提供?
答案1
我想不出任何理由(除了故意配置不当)会让您提出的设置 A 比您提出的设置 B 更好或更差。
你有没有具体的您希望通过将 Varnish 放在 Apache 之前来解决什么问题?或者将 Varnish 放在 nginx 之前?
如果你不这样做,你就会成为货物崇拜系统管理:
“这个人很成功,他在 nginx 和 Apache 前面使用 Varnish,所以如果我在 nginx 和 Apache 前面使用 Varnish,我也会成功。”
流量很少会来得如此之快,以至于你没有时间计划如何处理它。你有一个计划来吸引这么多的流量吗(比如,斯蒂芬·弗莱承诺他会在你的网站上线后立即发推文)。或者你只是非常乐观吗?如果不乐观,那就把东西放到网上,让它运转起来。 过早的优化是一切罪恶的根源。 一旦您了解了您的流量状况和瓶颈所在,您将有足够的时间来优化网站。
越简单越好。如果您可以放弃您提到的三种不同的 Web 服务软件中的一种或两种,您可能会发现服务器上的 CPU 使用率和内存使用率会显著降低。也许 CPU 和内存使用率是你的瓶颈。
随着业务的增长,有些因素可能会影响你能够处理的流量:
- 查看 MySQL 慢日志并调整查询和索引,直到慢查询消失。
- 确保您正确设置了缓存标头。
总结
在没有遇到交通问题之前,不要担心交通问题。
答案2
首先,我完全同意Ladadadada的回答,即......
- 过早优化是万恶之源
- 通常越简单越好,大多数情况下
您不应该因为可以获得更多流量而进行优化。当您需要优化时,即当您现在遇到流量高峰时,或者当您明确知道将出现巨大流量高峰时(例如出于营销活动),才进行优化。
最重要的是:分析你的系统!在优化之前(当然之后)进行基准测试。你必须知道你的瓶颈到底是什么,以及需要优化什么。
现在,Magento 的具体部分... :)
虽然如果我坚持 Ladadadada 的意见,你不应该只遵循另一个 Cargo Cult,但我建议安装 Varnish。
为什么?因为标准的 Magento 安装如果不进行优化的话速度不会很快。好吧,它往往非常慢。
如何加速 Magento:
- 安装APC缓存
- 使用 Memcached 作为快速 Magento 后端
- 将 Magento 缓存文件放到 RAM 磁盘 (tmpfs) 上
- 将 Varnish 放在你的网络服务器软件(Apache 或 nginx,只要你使用 Varnish,其实没关系)前面,以缓存静态内容和完整页面(如 Magento Enterprise 的全页缓存)
为了有效地使用 Varnish,您必须适应 Magento,以便可以缓存完整的页面并且客户端的浏览器将额外加载动态部分(例如购物车小部件)(使用 JavaScript)。
还有一个模块可用:http://www.magentocommerce.com/magento-connect/pagecache-powered-by-varnish.html
但是,如果您计划大幅增加流量,我还建议您至少在系统中添加 2 台服务器。
仅使用一台服务器,嗯 - 我能想到的完美的 SPOF(单点故障)。:) 使用多台服务器不仅仅是为了负载平衡和扩展。它是为了高可用性。如果您的单台服务器无法再处理流量/负载,会发生什么?是的,它会停机,您的商店处于离线状态,大量新客户将无法看到您的优质产品 - 事实上,他们会看到一些丑陋的错误消息。所以基本上,...您将会非常糟糕。
在优化单个服务器以获得最佳性能之前,您确实应该规划并设置故障转移策略。
也许只有两台服务器?每台服务器都有一个 webapp 堆栈和一个数据库?或者三台服务器,...两个 webapp 节点和一个专用数据库服务器?最好是 4 台,...两个 webapp 节点和 2 个数据库节点。
它究竟是什么样子并不重要,...但你必须消除单点故障。
祝你一切顺利,......(交通)成长的痛苦是最好的痛苦。;)
答案3
好吧,我不确定在不知情的情况下有人如何可靠地为您提供建议......
- 这是针对 1 家商店,还是针对多家商店(转售)?
- 完整且准确的服务器规格是什么?
- 您的流量目标是什么(点击量、页面浏览量、带宽承诺)?
- 客户主要搜索或浏览类别吗?
我们给客户的建议...
如果你需要转售托管
Nginx > Apache > PHP-FPM
这样可以为您的客户提供 .htaccess 支持、PHP-FPM 的安全性(chroot/多个 php.inis)以及 Nginx 的静态文件性能。
如果它只适合你
Pound > Varnish > Nginx > PHP-FPM
这为您提供了来自 Pound 的 SSL 解包、来自 Varnish 的静态和动态 (ESI) 缓存、来自 Nginx 的非缓存静态内容以及来自 PHP-FPM 的动态内容
如果你没有使用过 Varnish
Apache > PHP-FPM
事实是,如果你没有正确设置 Varnish(缓存的私有会话、不需要的 cookie 取消设置),那么你使用 Varnish 带来的危害会比好处多得多。Nginx 也是如此。
读一下这个http://www.sonassi.com/knowledge-base/magento-kb/mythbusting/why-shouldnt-i-use-nginx-for-magento/
哦,无论如何都要避免使用 tmpfs,它不会提高性能。
阅读这些内容可获得更多信息...
我的最后一条建议是,咨询专业人士——这笔钱花得值得。