云迁移的阿玛迪亚斯Amper阿尔特拉实例 — CodesCode
学习全球旅行IT公司阿马迪斯如何迁移到Azure上的阿尔特拉实例,实现高达20%的原始吞吐量提升和50%更加优越的性能/价格比
这篇文章最初由Ampere Computing发布。
“您可能对Amadeus不熟悉,因为它是一家B2B公司[…但]当您在互联网上搜索航班或酒店时,很有可能您正在使用幕后由Amadeus提供的服务,”据Amadeus云架构师Didier Spezia表示。
Amadeus是全球领先的旅行IT公司,为众多旅游行业的参与者提供支持:航空公司、酒店连锁、旅行社、机场等。Amadeus的一个活动是为旅行社和Kayak或Expedia等公司提供购物服务,以搜索和定价旅行航班。Amadeus还支持更高级的功能,例如基于预算的查询和日历约束查询,这些都需要预先计算多维索引。在众多航空公司中搜索可用座位的合适航班是相当困难的。
寻找最佳解决方案被视为NP难问题,因此为了提供尽力而为的答案,Amadeus使用了蛮力算法、图算法和启发式方法的组合。它需要大规模、分布式系统,并消耗大量的CPU资源,目前在Amadeus内共有数千台机器上运行。为了满足客户需求,Amadeus在全球范围内运营多个本地设施,并在多个云服务提供商上运行工作负载。
项目
几年前,Amadeus启动了一个大型多年期的项目,将大部分本地资源迁移至Azure。在这个特定的用例中,Amadeus与Microsoft共同合作,验证了Ampere基于ARM架构的虚拟机(VM)。
在讨论中,来自Microsoft的Mo Farhat评论道:
从我们的立场来看… [Microsoft]希望为我们的客户提供选择。我们不会推动[他们]选择一种架构而不是另一种…或者一种CPU而不是另一种。我们希望提供一系列选项并提供可信赖的建议…
起初,作为过渡的一部分,Amadeus并不一定对引入不同的架构感兴趣。根据Spezia的说法:
我们之所以引入不同的架构,是因为我们预计可以获得一些好处…我们对从Ampere获得性能/价格比非常感兴趣…我们希望能够混合使用传统的x86 CPU和Ampere CPU的机器,并在最适合该工作负载的CPU上运行工作负载。
他们选择了一个大型的、分布式的、密集计算的C++应用程序作为首个在Ampere上运行的应用程序,因为他们认为这将在x86上提供最大的比较优势。
我们认为基于ARM架构的机器可能是一个良好的选择,但是当然,我们需要验证和确认我们的假设。我们首先运行了一些合成基准测试。[…] 结果是积极的,但合成基准测试并不是非常相关的。由于在生态系统中引入新的CPU架构不是中立的,我们需要更好的保证,并决定使用真实的应用程序代码进行基准测试。[…] 该应用程序是一个庞大的C++代码库。它依赖于大量的低级开源库,以及一些Amadeus中间件库,最后还有功能代码本身。为了在测试环境中运行,从中分离出了一部分代码。
使该项目成功的一个因素是Amadeus团队能够在项目的早期获得Ampere服务器的能力。根据Didier的说法:
首先,Amadeus在本地安装了几台搭载Ampere Altra CPU的机器。它们用于最初的移植工作,现在仍在运行我们的CI/CD。由于我们正处于向公共云的迁移过程中,并且在复杂的生态系统中采用混合模型,我们很感激有机会在本地部署一些机器,这些机器与Microsoft在Azure上提供的VM具有相同的CPU架构。与其进行交叉编译,我们发现使用运行目标架构的机器进行CI/CD和测试非常有价值。
该应用程序的CI仍在Amadeus实验室的Ampere服务器上运行。
挑战
通过使用符合Arm64的工具链(Aarch64目标)重新编译所有内容,我们的代码移植工作开始了,这对我们的CI/CD产生了影响。
将此代码移植到Ampere上的过程非常顺利,尽管揭示了一些问题。一些与平台相关的编译器行为,例如“char”数据类型是有符号还是无符号,在x86和Arm64上是不同的,而应用程序对这些行为做出了假设。
</
为了编译他们庞大的C++代码库,Amadeus使用了GCC和Clang C++编译器。作为迁移的一部分,一些开源依赖关系需要升级,以利用改进的Arm64支持。这些升级中有一些涉及到需要进一步更改代码的API或行为变更。此外,一些在x86上未显露的与未定义或平台定义行为相关的潜在问题在迁移过程中暴露出来并得到了修复。
部署
在云中,Amadeus应用程序部署在OpenShift集群(Red Hat的基于Kubernetes的容器平台)上。为了在生产环境中运行这些应用程序,需要一个完整的中间件生态系统(企业服务总线,日志记录和监控设施等),这个生态系统也托管在OpenShift上。
Amadeus不想将他们的整个应用基础架构迁移到Arm64。另一个值得信赖的合作伙伴Red Hat为OpenShift提供了一个支持的功能:单一群集中启用异构硬件架构的功能。
具体而言,这意味着一个OpenShift群集可以同时包含x86和ARM计算节点。通过定义既包含x86节点又包含Arm64节点的节点集,并使用容器的标签和“污染物”来进行部署,开发者可以轻松地决定将Pod调度在哪种类型的虚拟机上。这样,Amadeus应用程序基础架构的支持组件可以在传统的x86虚拟机上运行,而Amadeus出于成本和性能的原因决定在Arm64上运行的应用程序Pod可以在由Ampere Altra CPU提供动力的Azure Dps v5虚拟机上运行。
异构集群对于支持渐进式迁移和避免操作双倍数量的OpenShift集群至关重要。
成果
显然,在进入生产环境之前,Amadeus希望通过一些基准测试来验证他们的假设。使用cpubench1a合成基准测试,使用32个vCPU的虚拟机,单个Ampere Altra虚拟机(D32ps_v5)的原始吞吐量比等效的Intel虚拟机提高了20%,性能/价格提高了50%,而原始吞吐量比等效的AMD虚拟机提高了13%,性能/价格提高了27%。
在使用逼真的购物应用基准测试进行基准测试时,吞吐量和响应时间之间存在一个权衡。吞吐量越高,响应时间受到的影响就越大。使用Ampere Altra虚拟机的性能/价格比提高了47%,平均响应时间降低了11%,相比Intel虚拟机。并且性能/价格比提高了37%,平均响应时间降低了9%,相比AMD虚拟机。
Amadeus现在已经将足够的应用程序组件进行了迁移,可以运行真实的应用程序(而不仅仅是基准测试)。公司目前正在完成集成测试并验证平台的最后几个细节。完成后,Amadeus将开始在多个Azure区域逐渐推动生产环境。
Ampere的首批云原生处理器专为可持续的云计算而打造,提供了前所未有的可预测的高性能、平台可扩展性和能源效率。我们邀请您了解更多关于我们开发者工作的努力,找到最佳实践、洞见,并加入以下讨论:developer.amperecomputing.com 和 community.amperecomputing.com。
请与我们的专家销售团队讨论合作伙伴关系或获取更多信息,或通过我们的开发者访问计划获得Ampere Systems的试用访问权。
Leave a Reply