亚马逊AWS官方博客

使用 Graviton 2 实例搭建高性价比 PHP 负载运行环境

 1. Graviton2在PHP环境下的高性价比

AWS Graviton 由 Amazon Web Services 基于64 位 Arm Neoverse N1 内核定制,为在 Amazon EC2 中运行的工作负载提供更高性价比运行环境。Amazon EC2 提供更为广泛且深入的计算实例组合,其中已包括许多由新一代 Intel 和 AMD 处理器提供支持的实例。AWS Graviton 处理器则带来更多选择,帮助客户进一步优化性能和降低工作负载成本。与当前这一代基于 x86 的实例相比,基于Graviton 2的实例为各种工作负载(包括应用程序服务器、微服务、高性能计算、EDA、游戏、开源数据库和内存中的缓存)提供高达 40% 的性价比提升。AWS Graviton2 处理器也为视频编码工作负载提供增强的性能,为压缩工作负载提供硬件加速,并为基于 CPU 的机器学习推理提供支持。

AWS会通过主动降价来为帮助客户优化成本,历次降价说明可以参考文档[1]。除对现有服务主动降价外,新推出的EC2实例跟上一代相比价格会有下降。如下图所示,以中国宁夏区c5.large和c6g.large 按需价格对比,可以发现c6g.large比c5.large便宜20.5%。

LNMP(Linux + Nginx + MySQL + PHP)由于其简单易上手等特点,在电商、内容管理等系统有着广泛的应用。因此在针对Graviton2与x86机型的性能对比场景中,参考资料[3]、[4]分别选择了Nginx、PHP作为测试对象。以参考资料[4]测试结果为例,PHP7.4.1、PHP8在m6g.4xlarge上较m5.4xlarge分别有约10%、17%的性能提升。

小结:由于Gravtion2机器比同等配置x86机器价格便20%,性能最高可提升17%,因此PHP负载运行在Gravtion最高可获得约40%性价比提升。下文将介绍如何在Gravtion2实例下搭建PHP运行环境。

2. PHP运行环境搭建

相关组件极其版本说明如下:

操作系统:Amazon Linux 2

Nginx: 1.18

PHP: 7.4

MySQL: 8.0.23

组件版本选择说明:

  • 操作系统:对于运行在Graviton2的操作系统,请参考资料[2]选择受支持的操作系统,本文选择了Amazon Linux 2。
  • PHP:如参考资料[4]描述,AWS向PHP7.4、8.0贡献了代码以提升其在Graviton2的运行,本文选取目前Amazon Linux 2上使用最广泛的7.4版本作为示例
  • Nginx:推荐使用1.18版本
  • MySQL:官方在8.0版本添加了针对aarch64架构的支持,推荐使用该版本

PHP运行环境搭建详细步骤见下文。

2.1 启动实例

  • 登录至控制台后,进入EC2启动向导,默认是x86的AMI镜像,要使用ARM系统首先需要选择ARM镜像来启动。这里在系统映像选择Amazon Linux 2 64位(ARM)

  • 根据需要选择对应的实例类型(中国区目前可选实例类型为c6g/m6g/r6g),本文采用large作为实验环境。

其余步骤与创建x86实例一致,在此省略。

2.2 Nginx 安装配置

实例启动后,通过ssh登录至实例控制台,按如下步骤安装Nginx

1)更新环境及补丁,并通过重启使更新生效

sudo yum update -y
sudo reboot

2)通过amazon-linux-extras安装nginx 1.18稳定版本

sudo amazon-linux-extras install nginx1 -y
sudo nginx -v

2.3 PHP 安装

通过ssh登录实例控制台,执行如下操作

1)启用PHP7.4源,PHP7.4+新增了针对Graviton2的优化,因此推荐使用该版本

sudo amazon-linux-extras enable php7.4

2)清理已缓存的仓库元数据

sudo yum clean metadata

3)安装PHP相关包

sudo yum install -y php php-cli php-pdo php-fpm php-json php-mbstring php-mysqlnd
php -v
PHP 7.4.11 (cli) (built: Oct 21 2020 19:12:31) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

2.4 MySQL安装配置

注意,为提升AWS北京、宁夏区域新版本MySQL的安装速度,本文采用了https://opentuna.cn/镜像(它是国外常用软件的中国本地镜像)

1)添加MySQL opentuna源

sudo tee /etc/yum.repos.d/mysql-community.repo<<EOF
[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=https://opentuna.cn/mysql/yum/mysql-connectors-community-el7-aarch64/
enabled=1
gpgcheck=1
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql

[mysql-tools-community]
name=MySQL Tools Community
baseurl=https://opentuna.cn/mysql/yum/mysql-tools-community-el7-aarch64/
enabled=1
gpgcheck=1
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql

[mysql-8.0-community]
name=MySQL 8.0 Community Server
baseurl=https://opentuna.cn/mysql/yum/mysql-8.0-community-el7-aarch64/
enabled=1
gpgcheck=1
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql
EOF

2)更新缓存索引

sudo yum makecache

3)安装数据库及客户端并启动数据库

sudo yum install -y mysql mysql-server
sudo systemctl start mysqld

4)获取MySQL8.0 root初始密码

sudo cat /var/log/mysqld.log | grep pass

5)数据库初始化设置(设置root密码)

sudo mysql_secure_installation

2.5 wordpress安装配置

为简化演示,本文选取流行的内容管理系统wordpress作为PHP示例应用。

1)连接到数据库,创建wordpress数据库

mysql -uroot -p
create database wordpress default charset utf8mb4;

2)下载wordpress源码

sudo -s
cd /usr/share/nginx/html/
wget https://wordpress.org/latest.tar.gz
tar -xvzf latest.tar.gz
rm latest.tar.gz

3)初始化wordpress配置文件

sudo -s
cd /usr/share/nginx/html/wordpress
cp wp-config-sample.php wp-config.php

编辑wp-config.php文件,留意根据实际情况调整如下参数

/* The name of the database for WordPress /
define( 'DB_NAME', '数据库名' );

/* MySQL database username /
define( 'DB_USER', '数据库用户' );

/* MySQL database password /
define( 'DB_PASSWORD', '数据库密码' );

/* MySQL hostname /
define( 'DB_HOST', 'localhost' );

4)访问http://my.public.dns.amazonaws.com/wordpress,录入对应信息启动wordpress配置。其中my.public.dns.amazonaws.com为EC2 DNS名称。

其余操作请根据wordpress安装向导提示完成。

注意:

  1. 请确保EC2实例安全组已开通80端口
  2. 中国区账号请确保已开通ICP备案

有兴趣的读者可以参考资料[4]搭建如下图所示测试环境来对比PHP在X86、Graviton2机器的性能。注意:为验证PHP性能,压测环境将MySQL独立部署于一台c5.4xlarge EC2。压测工具wrk则部署于一台独立的c5.4xlarge EC2。被压测环境为部署于m6g.4xlarge、m5.4xlarge的Wordpress。

3. 总结

使用Graviton2实例可以搭建高性价比PHP运行环境,实现成本优化。

4. 参考资料

1) https://aws.amazon.com/blogs/aws/category/price-reduction/

2) https://github.com/aws/aws-graviton-getting-started

3) https://www.nginx.com/blog/optimize-nginx-plus-deployment-arm-based-amazon-ec2-m6g-instances/

4) https://tinyurl.com/wxhnmtck

5) https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html

 

本篇作者

李寅祥

AWS 解决方案架构师,负责基于AWS云计算方案架构的咨询和设计,在国内推广AWS云平台技术和各种解决方案。曾就职于IBM,负责企业私有云方案咨询和架构设计,在基础架构方面有丰富经验。