Magento 2.0 性能优化配置建议及 benchmark 测试结果(官方白皮书翻译)

这是 Magento 官方的白皮书,不代表博主个人观点。翻译也是劳动,谢绝转载!

原文下载

介绍

Magento 2.0 是为下一代电子商务而设计的 —— 让他比以往更快速、更容易、更低成本地创建完美适应您的业务需求的购物体验。

(一大段的介绍非常安利,博主估计,翻译出来也没有多少人会看,所以就概括一下了,有兴趣的请参阅原文。)

Magento 2 希望比以往更快速,更容易,更低成本,这一切都建立在 Magento 2 在流行的框架上搭建了一个更现代的架构。(也就是说 Magento 2 团队相信用更先进的技术来实现更快的速度,更低的成本,让他更容易。)他的模块化设计是自定义和灵活性的关键;内置的自动测试框架可以加快开发的速度;他的 API 可以很方便地与第三方系统集成;简化的结账流程以及响应式的设计;重新设计的后台控制面板提高管理效率;系统更容易升级;

Magento 2.0 :

  • 相同的硬件可以每小时可以处理更多订单
  • 目录浏览可以立马响应
  • 购物车和结账响应时间下降了两位数
  • 更好地处理高峰时的订单,超大的目录和庞大的客户名单
  • 后台支持更多管理用户同时操作

该白皮书深入探讨了 Magento 2.0 的性能和可扩展性,可以帮助您了解该平台将如何支持您业务的长期发展。本书同时提供了 Magento 2.0 站点优化的配置建议以及基准测试结果。

建议使用的 Magento 配置

Magneto 为不同的使用情形提供了相当多的部署和配置选项。要充分发挥 Magento 本身的性能和超强的扩展性优势,需要正确设置好 Magento 。此外,关于环境配置的建议,不在本篇范围之内。

重要说明:文中涉及到的测试都是基于建议和支持的配置。配置的偏差可能导致不同的测试结果,不能准确反映出产品设计和构建的自然情况

核心配置

Magento 2.0 为使用 PHP7 和 Varnish 而优化,虽然也可以在 PHP5.6 和没有 Varnish 的情况下运行,不过不建议这样用。建议同时使用 PHP7 和 Varnish 来支持站点的业务处理,获得最佳的性能。

静态资源设置

静态资源的设置决定着 CSS,JavaScript,HTML 和图像等资源,如何准备好供站点使用。

  • Stores -> Configuration -> Advanced -> Developer:
    • Grid Settings: Asynchronous indexing: Enable
      • CSS Settings: Minify CSS Files: Yes
    • JS Settings: Minify JS Files: Yes
    • Merge JavaScript Files: No
    • Template Settings: Minify HTML: Yes
    • JavaScript Settings: Enable JavaScript Bundling: Yes

页面缓存

页面缓存设置决定着使用页面缓存的哪个文件版本,为了获得最佳性能,强烈建议开启 Varnish 的缓存。注意,这需要部署和配置 Varnish

  • Stores -> Configuration -> Advanced -> System -> Full page cache
    • Caching Application->Varnish Caching

Email 设置

Email 设置控制着邮件何时发送,它和邮件何时生成相关。

  • Stores->Configuration->Sales->Sales Emails:
    • General settings: Asynchronous sending: Enable

索引设置

  • System->Index Management:
    • All indexers should be in “Update on schedule” mode

应用缓存

  • Configure the platform to use Redis in env.php
    • Requires deployment and configuration of Redis

Production Mode (生产模式)

可以通过如下命令,启用生产模式:
php bin/magento deploy:mode:set production

如果要让开发者控制其中的过程,可以拆成几个步骤:

php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy
set MODE production manually in web server config

分层架构

Magento 2.0 平台是分层的架构,公有四层,分别为性能和可扩展性进行了优化。他们是:the client, the page cache, the application, and the database tiers

此种标准的 web 应用结构,允许架构的不同组件独立地扩展,以应对不同的业务需求和不同的负载情况。

接下来的章节将描述 Magento 2.0 对每层做的性能和扩展性的改进

性能和扩展性的改进

Magento 2.0 改进了应用如何与浏览器进行交互,以及减少了服务器必须传输给浏览器进行渲染的数据量。这些改进可以显著地提高页面响应时间和加载时间,给建立更快的站点提供一个良好的起点。

客户端的改进

页面加载时间很重要,Magneto 通过减少页面渲染必须的数据量来降低加载时间。主要有以下方式:

  • 使用了压缩 (即删掉不必要的字符)。使用了 jShrink 和 cssmin,以及针对 HTML 的内部开发的压缩引擎。图片使用 PHP 的 gd2 库进行压缩。
  • 最大限度利用浏览器缓存。初次访问会缓存所有 Js 和 css,这样可以减少下个页面的请求。
  • 在结账和购物车操作中使用异步操作。

页面缓存

通过 Varnish page caching 来提供更快的服务器响应。
(原文内容比较多,还提到了Edge Side Includes,博主的水平有限,还是不翻译为妙,需要研究的请参阅原文)

应用层的增强

Magento 2.0 架构设计旨在满足大型的、发展中的企业的扩展性和稳定性需求。下面的改进旨在消除后端业务操作过程中的阻塞或表锁定。

  • 异步的订单和产品更新
    大企业订单产品都很多,通常同时有很多管理用户同时作业。Magento 2.0 引入了可选的订单和产品异步更新,这样可以消除表锁定和阻塞,提高效率。
  • 工作队列机制
    看起来这是 EE 版本特有的功能。有兴趣的请参阅原文。
  • PHP Interpreters
    PHP7 采用了新的解释器,提高了性能,所以 Magento 2 建议使用 PHP7

数据库提升

  • 多个主数据库,每个主数据库可以拥有多个从数据库

  • MySQL Cluster Support

性能测试工具 (Performance Toolkit)

The Magento Performance Toolkit is a script and a set of JMeter tests that allow for consistent and
repeatable performance testing for Magento applications. The script allows the generation of four distinct
customer profiles that are intended to represent different eCommerce business sizes. The data from the
script populates a Magento instance. The Performance Toolkit is bundled with the Magento distribution
(in the setup/performance-toolkit directory).

性能测试结果

为了表现,Magento 2.0 灵活架构带来的性能提升,我们对 Magento EE 2.0 和 Magneto EE 1.14.2 基于建议的设置进行了 benchmark (基准)测试。这些测试表明 Magneto 2.0 (Varnish+PHP7.0)可以为小型和大型商业部署都提供更高的吞吐量(每小时订单数)和更快的响应时间

测试配置

软件

我们给下面的软件都使用了推荐设置和本身自带的支持设置(比如 Varnish 就是 Magento 2.0 自带支持的)

  • Magento Enterprise Edition 2.0 with PHP7 and Varnish caching
  • Magento Enterprise Edition 1.14.2 with PHP5.6 and Full-Page Caching

其他测试是无效的,因为他们不能提供推荐的或是支持的设置数据。附录中可查看软件的其他的额外细节说明。

方案

研究了如下两种情况:

  • 小型 $100万-$500万 在线销售额,部署在一台的4核 web 服务器上和一台单独的数据库节点上。使用了 25 个同时的 JMeter 线程(模拟25个并发请求)来测试某个时间段的峰值流量。(with $1-$5M in online sales deployed on a single 4-core web node and a single database node. 25 simultaneous JMeter threads (representing 25 concurrent requests) were used to show site performance during a period of peak traffic, such as a sale)
  • 大型 $5千万-$1亿 在线销售额,部署在5台4核的 web 节点和一太单独的数据库节点上。使用了 25-100 个 JMeter 线程(模拟25到100个并发请求)来测试不断增加负载的情况下的性能。(with $50-$100M in online sales deployed on five 4-core web nodes and a single database node. 25 to 100 simultaneous JMeter threads (representing 25 to 100 concurrent requests) were used to show site performance under increasing traffic loads.)

附录部分有交代测试的配置情况。博主觉得这个信息很重要,所以把他搬到这里来。

小型的 Small Merchant Deployment (4 web node cores)

  • Software
    • PhP 5.6.13 with Zend Opcache v7.0.6-dev (for Magento Enterprise Edition 1.14.2)
    • PhP 7.0.3-1 with Opcache (for Magento Enterprise Edition 2.0)
    • Nginx 1.6.2
    • MySQL 5.6.28
    • Varnish 4.0.2 (for Magento Enterprise Edition 2.0)
    • Redis 3.0.5
    • CentOS 6.4, CentOS 7.0 and Debian (on core 3.16.7)
  • 1 Web Node
    • 4 CPUs Core i7 with hyper threading
    • 8GB of memory
    • 500 GB 7200 RPM SSHD and RAID 1, 5, or 10 disks
    • Running Software
    • Nginx
    • Varnish (for Magento Enterprise Edition 2.0)
    • php-fpm
  • 1 Database Node
    • 4 CPUs Core i7 with hyper threading
    • 8GB of memory
    • 500 GB 7200 RPM SSHD and RAID 1, 5, or 10 disks
    • Running Software
    • MySQL
    • Redis (FPC Cache for Magento Enterprise Edition 1.14.2, Session Storage)
  • 1 JMeter node (to drive the tests)
    • 4 CPUs Core i7 with hyper threading
    • 8GB of memory
    • 500 GB 7200 RPM SSHD and RAID 1, 5, or 10 disks
  • All performance tests leverage real cores. Virtual can bring unexpectedly high deviation

大型的 Larger Merchant Deployment (20 web node cores)

  • Software
    • PhP 5.6.13 with Zend Opcache v7.0.6-dev (for Magento Enterprise Edition 1.14.2)
    • PhP 7.0.3-1 with Opcache (for Magento Enterprise Edition 2.0)
    • Nginx 1.6.2
    • MySQL 5.6.28
    • Varnish 4.0.2 (for Magento Enterprise Edition 2.0)
    • Redis 3.0.5
    • Memcache 1.4.21
    • CentOS 6.4, CentOS 7.0 and Debian (on core 3.16.7)
  • 5 Web Nodes
    • 4 CPUs Core i7 with hyper threading
    • 8GB of memory
    • 500 GB 7200 RPM SSHD and RAID 1, 5, or 10 disks
    • Running Software
      • Web Node #1:
        • Nginx
        • Varnish (for Magento Enterprise Edition 2.0)
        • php-fpm
      • Web Node #2 – #5:
        • php-fpm
  • 1 Database Node
    • 4 CPUs Core i7 with hyper threading
    • 8GB of memory
    • 500 GB 7200 RPM SSHD and RAID 1, 5, or 10 disks
    • Running Software
      • MySQL
      • Redis (Session Storage, FPC storage for Magento Enterprise Edition 1.14.2)
  • JMeter node (to drive the tests)
    • 4 CPUs Core i7 with hyper threading
    • 8GB of memory
    • 500 GB 7200 RPM SSHD and RAID 1, 5, or 10 disks
  • All performance tests leverage real cores. Virtual can bring unexpectedly high deviation.

两种情况都假设商店是如下情况:

Websites /Store Views SKUs (Simple/Configurable) Categories /Nesting Catalog / Cart Rules Customers (in Database) Orders(in Database)
2 / 2 16,000 / 1,000 300 / 3 20 / 20 200 1600

请查看附录了解更多详情

测试方法

测试模拟了典型的电子商务网站使用场景,例如:

  • 目录浏览,包括访问首页,目录页,可配置产品详细页面和简单产品详细页面
  • 将简单商品和可配置商品都加入购物车
  • 以访客身份或已注册用户身份完成结账的所有步骤

我们假设了如下的用户会话的流量模式:

  • 62% 只浏览
  • 30% 浏览并将产品添加到购物车,但没有结账
  • 4% 以访客身份结账
  • 4% 以注册用户身份结账

所有的测试使用的 Magento Performance Toolkit,JMeter 用来测量和报告服务器响应时间(以毫秒为单位)

Small Merchant Deployment (小型部署)

小型部署的测试表明,Magento EE 2.0 在处理25个并发时可以成功应对。Magento EE 2.0 表现比 Magento EE 1.14.2 好。

  • Magento EE 2.0 比 Magneto EE 1.14.2 每小时多处理 28% 订单,达到597个订单每小时。
  • 目录浏览的响应时间非常小,几乎是立马响应(响应时间和浏览器中客户感受到的时间不一样)
  • 添加到购物车的响应速度相比较快了 66%
  • 所有结账步骤合在一起,访客结账响应时间快 48% , 已注册客户结账响应时间快 36%

吞吐量

吞吐量

响应时间

目录浏览

添加到购物车

结账

Large Merchant Deployment (大型部署)

测试表明 Magento EE 2.0 的表现比 Magneto EE 1.14.2 好

  • 多处理 39% 的订单,达到 2558 个订单每小时
  • 目录页面的响应时间几乎是立刻马上
  • 加入购物车的服务器响应时间在 500 毫秒以下,速度相比较快了 66%
  • 所有结账步骤加载一起,访客结账的响应时间快了 51%,已注册用户结账的响应时间快了 36%

吞吐量

服务器响应时间

总结

Magento 2.0 性能更好,吞吐量更大,响应时间更短。

三大段英文,博主实在不想翻译了,感兴趣的童鞋请查看原文。原文总结部分的测试数据表格呈现,博主也省略了,因为博主觉得上面的树状图表现力更好。

5 comments

  1. jimmy

    博主真棒!我正在学习magento2 ,希望能读到更多magento2的知识 谢谢

    1. Pisces Post author

      感谢留言支持!

  2. 美丽的不礼貌

    哎呦 还不错哦

    1. 美丽的不礼貌

      对的

      1. Pisces Post author

        这是在测试吗?

发表评论

电子邮件地址不会被公开。 必填项已用*标注