Graviton2在PHP环境下的高性价比
Amazon Graviton 由 Amazon Web Services 基于64 位 Arm Neoverse N1 内核定制,为在 Amazon EC2 中运行的工作负载提供更高性价比运行环境。Amazon EC2 提供更为广泛且深入的计算实例组合,其中已包括许多由新一代 Intel 和 AMD 处理器提供支持的实例。Amazon Graviton 处理器则带来更多选择,帮助客户进一步优化性能和降低工作负载成本。与当前这一代基于 x86 的实例相比,基于Graviton 2的实例为各种工作负载(包括应用程序服务器、微服务、高性能计算、EDA、游戏、开源数据库和内存中的缓存)提供高达 40% 的性价比提升。Amazon Graviton2 处理器也为视频编码工作负载提供增强的性能,为压缩工作负载提供硬件加速,并为基于 CPU 的机器学习推理提供支持。
亚马逊云科技会通过主动降价来为帮助客户优化成本,历次降价说明可以参考文档[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运行环境。
PHP运行环境搭建
相关组件极其版本说明如下:
操作系统:Amazon Linux 2
Nginx: 1.18
PHP: 7.4
MySQL: 8.0.23
组件版本选择说明:
操作系统:对于运行在Graviton2的操作系统,请参考资料[2]选择受支持的操作系统,本文选择了Amazon Linux 2。
PHP:如参考资料[4]描述,亚马逊云科技向PHP7.4、8.0贡献了代码以提升其在Graviton2的运行,本文选取目前Amazon Linux 2上使用最广泛的7.4版本作为示例
Nginx:推荐使用1.18版本
MySQL:官方在8.0版本添加了针对aarch64架构的支持,推荐使用该版本
PHP运行环境搭建详细步骤见下文。
启动实例
1.登录至控制台后,进入EC2启动向导,默认是x86的AMI镜像,要使用ARM系统首先需要选择ARM镜像来启动。这里在系统映像选择Amazon Linux 2 64位(ARM)
2.根据需要选择对应的实例类型(中国区目前可选实例类型为c6g/m6g/r6g),本文采用large作为实验环境。
其余步骤与创建x86实例一致,在此省略。
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
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
MySQL安装配置
注意,为提升亚马逊云科技北京、宁夏区域新版本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
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。
总结
使用Graviton2实例可以搭建高性价比PHP运行环境,实现成本优化。
参考资料
[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
本篇作者
李寅祥
亚马逊云科技解决方案架构师
负责基于亚马逊云科技云计算方案架构的咨询和设计,在国内推广亚马逊云科技云平台技术和各种解决方案。曾就职于IBM,负责企业私有云方案咨询和架构设计,在基础架构方面有丰富经验。
听说,点完下面4个按钮
就不会碰到bug了!