软件推荐
我们需要以下软件用于Commerce的生产实例:
对于多服务器部署或计划扩展业务的商家,我们建议执行以下操作:
有关每种类型软件支持版本的信息,请参阅系统要求。
操作系统
Commerce的操作系统配置和优化与其他高负载Web应用程序类似。 随着服务器处理的并发连接数的增加,可用套接字的数量可以完全分配。 Linux内核支持“重用”TCP连接的机制。 要启用此机制,请在/etc/sysctl.conf
中设置以下值:
net.ipv4.tcp_tw_reuse = 1
内核参数net.core.somaxconn
控制等待连接的打开套接字的最大数目。 可以安全地将此值增加到1024,但应该将其与服务器处理此数量的能力相关联。 要启用此内核参数,请在/etc/sysctl.conf
中设置以下值:
net.core.somaxconn = 1024
PHP
Magento完全支持PHP 7.3和7.4。在配置PHP以获得最大请求处理速度和效率时,需要考虑以下几个因素。
PHP扩展
我们建议将活动PHP扩展的列表限制为Commerce功能所需的那些扩展。
Magento Open Source和Adobe Commerce:
- ext-bcmath
- ext-ctype
- 外部卷曲
- ext-dom
- ext-fileinfo
- ext-gd
- ext-hash
- ext-iconv
- ext-intl
- ext-json
- ext-libxml
- ext-mbstring
- ext-openssl
- ext-pcre
- ext-pdo_mysql
- ext-simplexml
- 外部soap
- 分插座
- 外钠
- ext-tokenizer
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
此外,Adobe Commerce要求:
- ext-bcmath
- ext-ctype
- 外部卷曲
- ext-dom
- ext-fileinfo
- ext-gd
- ext-hash
- ext-iconv
- ext-intl
- ext-json
- ext-libxml
- ext-mbstring
- ext-openssl
- ext-pcre
- ext-pdo_mysql
- ext-simplexml
- 外部soap
- 分插座
- 外钠
- ext-spl
- ext-tokenizer
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
添加更多扩展会增加库加载时间。
PHP设置
要确保成功执行所有Commerce实例,而不将数据或代码转储到磁盘,请按照以下方式设置内存限制:
memory_limit=1G
对于调试,请将此值增加到2G。
Realpath_cache配置
要提高Commerce性能,请在php.ini
文件中添加或更新以下推荐的realpath_cache
设置。 此配置允许PHP进程缓存文件的路径,而不是在每次加载页面时查找它们。 请参阅PHP文档中的性能调整。
realpath_cache_size=10M
realpath_cache_ttl=7200
字节代码
要在PHP 7上获得Commerce的最大速度,您必须激活OpCache模块并正确对其进行配置。 建议为模块设置以下设置:
opcache.memory_consumption=512
opcache.max_accelerated_files=60000
opcache.consistency_checks=0
opcache.validate_timestamps=0
opcache.enable_cli=1
在微调opcache的内存分配时,请考虑Magento代码库和所有扩展的大小。 Magento的性能团队使用前面的示例中的值进行测试,因为它在opcache中提供了足够的空间来容纳平均已安装的扩展数。
如果您的计算机内存不足,但未安装许多扩展或自定义设置,请使用以下设置获得类似结果:
opcache.memory_consumption=64
opcache.max_accelerated_files=60000
APCU
我们建议启用PHP APCu扩展和配置composer
以支持它以优化其最大性能。 此扩展缓存已打开文件的文件位置,这将提高Commerce服务器调用(包括页面、Ajax调用和端点)的性能。
编辑您的apcu.ini
文件以包含以下内容:
extension=apcu.so
[apcu]
apc.enabled = 1
Web服务器
Magento完全支持Nginx和Apache Web Server。 Commerce在<magento_home>/nginx.conf.sample
(Nginx)和<magento_home>.htaccess.sample
(Apache)文件中提供了示例推荐配置文件。 Nginx示例包含用于提高性能的设置,并且设计得只需很少的重新配置。 示例文件中定义的一些主要配置最佳实践包括:
- 在浏览器中缓存静态内容的设置
- PHP的内存和执行时间设置
- 内容压缩设置
您还应配置用于输入请求处理的线程数,如下所示:
MySQL
本文档未提供深入的MySQL优化说明,因为每个存储和环境都不同,但我们可以提出一些常规建议。
对MySQL 5.7.9进行了许多改进。我们确信已使用良好的默认设置分发MySQL。 最关键的设置是:
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_buffer_pool_instances
和innodb_buffer_pool_size
的组合,以便每个缓冲池实例至少为1 GB。max_connections
max_connections
参数的值应与应用程序服务器中配置的PHP线程总数相关。 一般建议是,小环境为300,中环境为1,000。innodb_thread_concurrency
innodb_thread_concurrency = 2 * (NumCPUs + NumDisks)
Varnish
Magento强烈建议使用Varnish作为商店的整页缓存服务器。 PageCache模块仍存在于代码库中,但应仅将其用于开发目的。 它不应与Varnish一起使用,也不应替代。
在Web层前面的单独服务器上安装Varnish。 它应接受所有传入请求并提供缓存的页面副本。 为了允许Varnish有效地处理安全页面,可以将SSL终止代理置于Varnish之前。 Nginx可用于此目的。
Commerce为Varnish(版本4和5)分发一个示例配置文件,其中包含所有推荐的性能设置。 其中最重要的性能包括:
- 后端运行状况检查 轮询Commerce服务器以确定它是否及时响应。
- 宽限模式 允许您指示Varnish在超出Commerce的生存时间(TTL)时段后保留缓存中的对象并提供此过时内容(如果不正常或尚未获取新内容)。
- Saint模式 在可配置的时间范围内将不正常的Commerce服务器列入黑名单。 因此,当使用Varnish作为负载平衡器时,不正常的后端无法提供流量。
有关实现这些功能的详细信息,请参阅高级 Varnish 配置。
优化资产性能
通常,我们建议将您的资产(图像、JS、CSS等)存储在CDN上以获得最佳性能。
如果您的网站不需要部署大量区域设置,并且您的服务器与大多数客户位于同一区域,则通过将资产存储在Varnish中而不是使用CDN,您可能会发现以较低的成本获得了显着的性能提升。
要将您的资产存储在Varnish中,请在Commerce为Varnish 5生成的default.vcl
文件中添加以下VCL条目。
在vcl_recv
子例程中PURGE请求的if
语句的末尾,添加:
# static files are cacheable. remove SSL flag and cookie
if (req.url ~ "^/(pub/)?(media|static)/.*\.(ico|html|css|js|jpg|jpeg|png|gif|tiff|bmp|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)$") {
unset req.http.Https;
unset req.http./* {{ ssl_offloaded_header }} */;
unset req.http.Cookie;
}
在vcl_backend_response
子例程中,查找用于为GET
或HEAD
请求取消设置Cookie的if
语句。
更新的if
块应如下所示:
# validate if we need to cache it and prevent from setting cookie
# images, css and js are cacheable by default so we have to remove cookie also
if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
unset beresp.http.set-cookie;
if (bereq.url !~ "\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)(\?|$)") {
set beresp.http.Pragma = "no-cache";
set beresp.http.Expires = "-1";
set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
}
}
每次升级网站或部署/更新资产时,请重新启动Varnish服务器以刷新缓存的资产。
缓存和会话服务器
Magento提供了多个用于存储缓存和会话数据的选项,包括Redis、Memcache、文件系统和数据库。 下面将讨论其中一些选项。
单个Web节点设置
如果您计划仅使用一个Web节点提供所有流量,则将缓存放在远程Redis服务器上没有任何意义。 而是使用文件系统或本地Redis服务器。 如果要使用文件系统,请将缓存文件夹放在RAM文件系统上装入的卷上。 如果要使用本地Redis服务器,我们强烈建议配置Redis,使其使用套接字进行直接连接,而不是通过HTTP交换数据。
多个Web节点设置
对于多Web节点设置,Redis是最佳选项。 由于Commerce主动缓存大量数据以获得更好的性能,请注意网络节点和Redis服务器之间的网络通道。 您不希望该渠道成为请求处理的瓶颈。