现如今,许多大规模的 Web 应用程序都部署在大型数据中心内,这些数据中心往往配备了多个服务器机架,并广泛分布在全国乃至全球各地。以往,x86 处理器一直是数据中心服务器的主力军。然而,随着众多云服务提供商纷纷采用 Ampere 云原生处理器等基于 Arm 架构的 CPU,以及 HPE 公司推出搭载 Ampere® Altra® Max 处理器的 HPE ProLiant RL300 Gen11,arm64 处理器已成为 x86 处理器的理想替代。由于具备高内核数、低功耗、线性可扩展性以及更高的性能等优势,Arm 服务器在应对各种工作负载时表现出色,尤其适合 Web 服务前端。
在基础设施中引入新架构,如 arm64,需考量诸多因素。为了成功地实施、管理和扩展混合架构集群,一些企业工具能够助力将不同的工作负载与正确的架构配对,进而优化性能和成本,并提升部署或管理的便捷性。更重要的是,随着近来全球能源成本的攀升,管理 IT 堆栈中的功耗和空间占用显得尤为重要,这将影响到企业的财务健康状况。因此,引入基于 Arm 的服务器,可以在保持性能和服务水平不变的同时,有效降低功耗,是为企业优化硬件足迹(hardware footprint)的强有力工具。在同一集群中同时托管 x86 和 arm64 节点,是平衡成本和收益的理想方案,也是利用同时面向 x86 和 arm64 架构的成熟软硬件生态系统的理想方案。此外,混合架构可助力降低供应商锁定(vendor-lock risk)的风险,这尤其适合处在不断发展并拥有多元化业务的企业。
具体而言,Web 服务器、搜索引擎和内容管理系统等位于企业云基础设施前端的应用程序,是引入可扩展、高能效 arm64 架构的理想对象。Java 是开发这类应用程序的事实标准(de facto standard),同时作为一种脚本语言,它可以直接使用,无需进行任何移植。因此,针对前端应用程序引入多架构之后,不仅可以最快地带来投资回报,还能将现有的 x86 机器重新用于其它传统应用程序和微服务。
本文将介绍如何把 HPE RL300 服务器引入 x86-only 的 Web 服务部署,并使用直接迁移(lift-and-shift)的方法,将部分应用程序迁移到该服务器。由于大多数现代的 Web 应用程序都采用基于微服务的架构,因此单独迁移单个微服务至新型的 Arm 服务器会更为简便,无需将整个应用程序迁移至 arm64。接下来,我们将以前端微服务作为多架构部署的一个实际用例。NGINX 是一款应用广泛的 Web 服务器,适用于网上银行、社交网络、电子商务等多种 Web 应用,以及多个并发用户在既定网站内浏览不同应用程序的场景。下面,本文将详细介绍如何使用 NGINX 将此类流行的 Web 服务器扩展至 HPE RL300 服务器。
同时,我们还使用横向扩展(scale-out)的复合 Web 服务评估案例研究的结果,并计算了将前端 NGINX 层迁移到 HPE RL300 服务器所带来的益处。根据性能和每瓦性能数据的对比,把 NGINX 从某款x86 处理器迁移到 Ampere® Altra® Max 处理器后,可节省多达 1/3 的机架空间,并降低 1/3 的功耗。此外,当整个 Web 服务继续在多体系结构部署中运行时,其余的应用层仍在 x86 服务器上保持原状,且性能不受任何影响。
为了实施基于 x86 和 arm64 服务器的多架构部署,至少需要两台安装了 Web 服务器软件(NGINX)的服务器。其中,一台采用 x86 处理器,以下称为“主机 1”;另一台则是搭载了 Ampere Altra Max 处理器的 HPE ProLiant RL300 服务器,以下称为“主机 2”
当然,用户也可以选择在某个特定服务器上运行多个虚拟机或容器,而不使用整机。
为了向用户展示应用程序的网页内容,需要选用高性能的 Web 服务器 NGINX 作为应用程序的前端。根据操作系统的不同,可以选择 YUM 或 APT 包管理工具进行软件安装。
sudo yum -y update sudo yum install ca-certificates sudo yum -y install nginx
首先,在 x86 服务器(主机1)上部署 NGINX,并使其能连接到 NGINX。如果您已经启用了防火墙,则请确保允许常规 HTTP 流量通过端口 80,8080;如果您配置了 SSL,则还需允许 HTTPS 流量通过端口 443 。
要启动 NGINX 并验证状态,请运行以下代码:
sudo systemctl start nginx sudo systemctl status nginx
通过 Web 浏览器连接到主机 1 的 IP 地址或主机名。如果您看到的是 NGINX 默认登陆页面,说明您已成功安装了 NGINX,并启用了 Web 服务器的 HTTP 流量。
在大规模集群部署中,可以使用多台服务器托管 Web 应用程序的前端服务。负载均衡能够带来诸多好处,比如能够实现应用程序的跨服务器扩展,提升程序性能,优化用户体验,以及增强冗余性。
NGINX 凭借其简洁而强大的特性,可作为负载均衡器,有效提升服务器资源的利用率和运行效率。您只需按照指令配置 NGINX,指定其监听连接的位置以及重定向的目标,即可实现负载均衡。
为了配置负载均衡,需要修改 NGINX 配置文件。默认情况下,该文件名为 nginx.conf,并放置在 /etc/nginx 目录下。然而,具体的位置可能会根据安装 NGINX 时所使用的软件包管理系统和操作系统而定。
在 x86 服务器(主机1)上,需要编辑 NGINX 配置文件,并定义 upstream 和 server 两个模块,具体操作如下:
# Define which servers to include in the load balancing scheme.
http {
upstream backend {
server host1:8080;
}
# This server accepts all traffic to port 80 and passes it to the upstream.
# Notice that the upstream name and the proxy_pass need to match.
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
# Use port 8080 for the web server configuration
server {
listen 8080;
}
}
要为 HTTPS 而不是 HTTP 配置负载均衡,只需使用"https"作为协议,然后使用以下命令重新启动 NGINX。
sudo systemctl restart nginx
检查 NGINX 是否成功重启。当您在网络浏览器中输入负载均衡器的公共 IP 地址时,它会将请求传递给主机 1 上的后端服务器。
接下来,我们将在 HPE RL300 服务器(主机 2)上运行一个新的 NGINX 实例,以扩展前端部署。首先,使用上文“安装 NGINX Web 服务器”部分所述的相同方法,在 RL300 服务器上安装 NGINX。开源的 NGINX 软件包在 x86 和 arm64 服务器上都运行良好。为了获得 NGINX 的最佳性能,Ampere 提供了一些优化建议。此外,我们还为提供了针对 arm64 做源代码编译和构建 NGINX 的 高效指南 。
下一步,需要在服务器(主机 2)上配置 NGINX。我们不会将它配置为负载均衡器,服务器部分使用默认的 nginx.conf,端口为 8080。主机 2 上的 nginx.conf 文件将不包含 upstream 模块,Server 模块如下所示:
http {
# This server accepts all traffic to port 8080 a
server {
listen 8080;
}
}
安装完成后,启动 NGINX 服务,并确保您可以通过 web 服务器上的主机 2 IP 地址访问 NGINX 默认登陆页面。
接下来,更新主机 1 上的 NGINX 负载均衡器服务,将新的 RL300 纳入 NGINX 负载均衡器配置。编辑主机 1 上的 nginx.conf 文件,在 upstream 模块添加主机 2 的 IP 地址。
# Define which servers to include in the load balancing scheme.
# It's best to use the servers' private IPs for better performance and security.
# Add the ip address for RL300 to the upstream.
http {
upstream backend {
server host1:8080;
server host2:8080;
}
# This loadbalancer accepts all traffic to port 80 and passes it to the upstream.
# Notice that the upstream name and the proxy_pass need to match.
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
server {
listen 8080;
}
}
使用以下命令重启 NGINX:
sudo systemctl restart nginx
现在,当您访问负载均衡器的 IP 地址时,它都会按照循环的方式将请求分发到 upstream 模块中配置的两个服务器上。至此,NGINX 的多架构部署已完成,用户流量被分发到运行在 x86 和 arm64 服务器上的 NGINX 实例中。
为了深入了解将 NGINX 等服务迁移到 Ampere® Altra® 处理器的优势,我们对一个由四层微服务组成的复合 web 服务进行了扩展的分析。这四层分别为:Web 前端(NGINX)、键值存储(REDIS)、对象缓存(Memcached)以及后端数据库(MySQL)。我们按照整个服务的百分比,为每层所选的应用程序分配了不同的权重。在我们的示例中,我们将负载设定为每秒 130 万个请求,这些请求由服务的前端层接收,并由作为 HTTPS 服务器的 NGINX 进行处理。随后,我们根据各层组件的权重设定了相应的总性能水平,以此确定加权四层 web 服务模型的整体负载。 点击了解更多关于复合 web 服务模型的信息。
以下图表对比了运行在某 x86 服务器上的复合四层 web 服务及其所有组件微服务,以及基于 Ampere arm64 的混合架构部署。在混合架构场景中,web 服务前端(NGINX)组件迁移到了 Ampere Altra Max 云原生处理器,但其它三个组件微服务仍在某 x86 服务器上运行。结果显示,即使仅将 web 服务的单一组件(NGINX)迁移到 Ampere Altra Max 云原生处理器,也能显著减少所需服务器的总量,同时降低维持相同性能(以每秒请求数衡量)所需的整体功耗。
在数据中心里,若每机架最大功耗预算为 12.8 千瓦,将 NGINX 转换为Ampere Altra Max 云原生处理器后,所节省的功耗足以将机架占用空间从 3 个(总功耗预算 38.4 千瓦)减少到 2 个(总功耗 25.6 千瓦)。
与使用 Ampere Altra Max 和行业其他服务器进行异构部署相比,完全部署在某 x86 服务器的 web 服务需要多占用 50% 的机架空间和功耗。要实现与异构部署相同的性能,传统的全 x86 架构设置需要额外消耗约 11 千瓦的功率。根据加利福尼亚州的电费价格计算(美国能源信息署 2023 年 7 月公布的数据),这产生的电费大约为 2.2 万美元/每年,或相当于 68 吨二氧化碳的排放量。
总体而言,采用基于 Arm 架构的 HPE ProLiant RL300 服务器进行多架构部署的益处显而易见。对于像 NGINX 这样的微服务,使用容器化镜像进行代码迁移的过程简单直接。通过负载均衡和反向代理等功能,可以轻松地在不同服务器上以混合架构(包括 x86 和 arm64)部署和运行应用程序的多个实例。此外,将关键工作负载迁移到 Ampere Altra Max 云原生处理器上,不仅能显著降低能耗和减少数据中心占地面积,还能保证应用程序性能不受影响。
如欲获取更多关于 Ampere Systems 的信息或申请试用,请关注 Ampere 开发者计划,订阅开发者新闻简报。此外,您还可以加入 Ampere 开发者社区参与讨论,发现更多精彩内容和干货知识!