亚马逊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相关包
2.4 MySQL安装配置
注意,为提升AWS北京、宁夏区域新版本MySQL的安装速度,本文采用了https://opentuna.cn/镜像(它是国外常用软件的中国本地镜像)
1)添加MySQL opentuna源
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源码
3)初始化wordpress配置文件
编辑wp-config.php文件,留意根据实际情况调整如下参数
4)访问http://my.public.dns.amazonaws.com/wordpress,录入对应信息启动wordpress配置。其中my.public.dns.amazonaws.com为EC2 DNS名称。
其余操作请根据wordpress安装向导提示完成。
注意:
- 请确保EC2实例安全组已开通80端口
- 中国区账号请确保已开通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://thinkwithwp.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.thinkwithwp.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html