亚马逊AWS官方博客

Amazon Compute Optimizer 支持 Amazon Graviton 迁移指南

本文由 Amazon Compute Optimizer 首席产品经理 Letian Feng 和 EC2 Spot 高级专家解决方案架构师 Steve Cole 撰写。

Amazon Compute Optimizer 如今推出了一项新功能,让您可以利用多个 CPU 架构(包括基于 x86 的实例和基于 Amazon Graviton 的实例)更轻松地优化 EC2 实例。Compute Optimizer 是一项可选服务,可为工作负载推荐最佳 Amazon 资源,通过分析历史利用率指标来降低成本并提高性能。Amazon Graviton 处理器由亚马逊云科技使用 64 位 Arm 内核定制构建,可为在 Amazon EC2 中运行的云工作负载提供最佳性价比,与当前基于 x86 的同类实例相比,性价比最高可提高 40%。因此,对 Graviton 感兴趣的客户一直想找到一种可扩展的方式来了解在 Graviton 迁移过程中应该优先处理哪些 EC2 实例。从今天开始,您可以使用 Compute Optimizer 来查找能够以最小的迁移工作量带来最大回报的工作负载。

工作原理

Compute Optimizer 通过提供迁移工作量评级,帮助您找到以最小的迁移工作量获得最大回报的工作负载。迁移工作量等级从非常低到高不等,反映了从当前实例类型迁移到推荐实例类型可能需要的工作量,具体取决于实例架构的差异以及工作负载是否与推荐的实例类型兼容。

有关运行的工作负载类型的线索有助于估计迁移到 Graviton 需要多少工作量。对于某些工作负载,转换到 Graviton 很简单,只需直接更新实例类型和关联的 Amazon Machine Images(AMIs),或在各种启动或 CloudFormation 模板中更新即可。对于其他工作负载,您可能需要使用其他软件版本或更改源代码。转换最快、最容易的工作负载是基于 Linux 的开源应用程序。许多开源项目已经支持 Arm64,并进一步支持 Graviton。因此,许多客户在开始进行 Graviton 迁移时,会先检查工作负载是否在与 Graviton 兼容的应用程序列表中。然后将这些信息与 Compute Optimizer 预计能够节省的费用相结合,列出 Graviton 迁移机会清单。

由于 Compute Optimizer 无法查看实例,只能查看实例属性以获取有关 EC2 实例上运行的工作负载类型的线索。Compute Optimizer 使用的线索基于客户提供的实例属性,例如实例标签、Amazon Marketplace 产品名称、AMI 名称和 CloudFormation 模板名称。例如,当一个实例标有 “key: applicationType” 和 “value: hadoop” 时,Compute Optimizer 将识别该应用程序为 Apache Hadoop(在本例中)。因为主要的框架(如 Apache Hadoop、Apache Spark 和其他许多框架)都在 Graviton 上运行,所以 Compute Optimizer 会指出 Graviton 的迁移工作量很小,并让客户查看文档,了解将 Hadoop 应用程序迁移到 Graviton 所需的步骤。

再举一个例子,Compute Optimizer 看到有实例正在使用 Microsoft Windows SQL Server AMI 时,就会推断 SQL Server 正在运行。由于要将 SQL Server 工作负载现代化并迁移到 Arm 需要大量工作,Compute Optimizer 将指出 Graviton 迁移工作量较大。要向 Compute Optimizer 提供哪个应用程序正在运行的线索,最有效的方法是在每个实例上添加“应用程序类型”标签。如果 Compute Optimizer 没有足够的线索,则表明它没有足够的信息来指导迁移。

以下是各级迁移工作量的描述:

  • 非常低:推荐的实例类型具有与当前实例类型相同的 CPU 架构。通常,客户可以直接修改实例类型,或者对新的实例类型进行简单的重新部署。所以这只是优化,而不是迁移。
  • 比较低:推荐的实例类型的 CPU 架构与当前实例类型不同,但迁移路径比较简单。例如,将 Apache Hadoop 或 Redis 从 x86 迁移到 Graviton 就属于这一类,因为 Hadoop 和 Redis 都有兼容 Graviton 的版本。
  • 中等:推荐的实例类型的 CPU 架构与当前实例类型不同,而 Compute Optimizer 也没有足够的信息来提供迁移指导。
  • 高:推荐的实例类型的 CPU 架构与当前实例类型不同,并且该工作负载在推荐的 CPU 架构上没有已知的兼容版本。这种情况下,客户可能需要重新编译其应用程序或重新构建其工作负载的平台(例如从 SQL Server 迁移到 MySQL)。

演练

现在看看如何在 Compute Optimizer 上使用 Graviton 建议。打开 Compute Optimizer 控制台时,您将看到控制面板页面,上面概括了账户中的所有优化机会。Graviton 建议适用于 EC2 实例和自动扩缩组。

单击“查看 EC2 实例建议”后,您将进入 EC2 建议列表视图。您可以在此处查看 EC2 实例列表、当前实例类型、调查结果(超额配置、配置不足或优化)、推荐的最佳实例类型以及缩减规模预计可节省的费用。默认情况下,无论 CPU 架构如何,都会向您显示最适合该价格的实例类型。在许多情况下,这意味着将推荐 Graviton,因为 EC2 提供了大量性价比较高的 Graviton 实例。如果您只想查看当前架构的建议,可以使用 CPU 架构首选项下拉列表,让 Compute Optimizer 仅显示当前 CPU 架构的建议。

在这里,您可以看到两个新列:迁移工作量和推断的工作负载类型。推断的工作负载类型字段显示 Compute Optimizer 推断的实例正在运行的工作负载类型。迁移工作量字段显示如果根据推断的工作负载类型从当前实例类型迁移到推荐的实例类型,可能需要花费的工作量。当 CPU 架构没有变化(即从 x86 实例类型移动到另一个 x86 实例类型,例如在第三行中)时,迁移工作量将非常低。对于运行与 Graviton 兼容的应用程序(例如 Apache Hadoop、NGINX、Memcached 等)的 x86 实例,当你将实例迁移到 Graviton 时,工作量将比较低。如果 Compute Optimizer 无法识别应用程序,则从 x86 迁移到 Graviton 的工作量将为中等,您可以通过在实例上放置应用程序类型的标签密钥来提供应用程序类型数据。您可以单击每行以查看更详细的建议。点击第一行。

Compute Optimizer 将此实例识别为正在运行 Apache Hadoop 工作负载,因为有 Amazon EMR 系统标签与之相关联。显示的横幅详细说明了为什么 Compute Optimizer 将其视为工作量低的 Graviton 迁移候选方案,单击“了解更多”,还会出现迁移指南。

也可以通过 Compute Optimizer API 或 CLI 检索获取同样的 Graviton 建议。以下是一个示例 CLI,可检索到与上述内容相同的建议:

aws compute-optimizer get-ec2-instance-recommendations --instance-arns arn:aws-cn:ec2:cn-north-1:020796573343:instance/i-0b5ec1bb9daabf0f3 --recommendation-preferences "{\"cpuVendorArchitectures\": [\"CURRENT\" , \"AWS_ARM64\"]}"
{
    "instanceRecommendations": [
        {
            "instanceArn": "arn:aws-cn:ec2:cn-north-1:000000000000:instance/i-0b5ec1bb9daabf0f3",
            "accountId": "000000000000",
            "instanceName": "Compute Intensive",
            "currentInstanceType": "r5.large",
            "finding": "UNDER_PROVISIONED",
            "findingReasonCodes": [
                "CPUUnderprovisioned",
                "EBSIOPSOverprovisioned"
            ],
            "inferredWorkloadTypes": [
                "ApacheHadoop"
            ],
            "utilizationMetrics": [
                {
                    "name": "CPU",
                    "statistic": "MAXIMUM",
                    "value": 100.0
                },
                {
                    "name": "EBS_READ_OPS_PER_SECOND",
                    "statistic": "MAXIMUM",
                    "value": 0.0
                },
                {
                    "name": "EBS_WRITE_OPS_PER_SECOND",
                    "statistic": "MAXIMUM",
                    "value": 4.943333333333333
                },
                {
                    "name": "EBS_READ_BYTES_PER_SECOND",
                    "statistic": "MAXIMUM",
                    "value": 0.0
                },
                {
                    "name": "EBS_WRITE_BYTES_PER_SECOND",
                    "statistic": "MAXIMUM",
                    "value": 880541.9921875
                },
                {
                    "name": "NETWORK_IN_BYTES_PER_SECOND",
                    "statistic": "MAXIMUM",
                    "value": 18113.96638888889
                },
                {
                    "name": "NETWORK_OUT_BYTES_PER_SECOND",
                    "statistic": "MAXIMUM",
                    "value": 90.37638888888888
                },
                {
                    "name": "NETWORK_PACKETS_IN_PER_SECOND",
                    "statistic": "MAXIMUM",
                    "value": 2.484055555555556
                },
                {
                    "name": "NETWORK_PACKETS_OUT_PER_SECOND",
                    "statistic": "MAXIMUM",
                    "value": 0.3302777777777778
                }
            ],
            "lookBackPeriodInDays": 14.0,
            "recommendationOptions": [
                {
                    "instanceType": "r6g.large",
                    "projectedUtilizationMetrics": [
                        {
                            "name": "CPU",
                            "statistic": "MAXIMUM",
                            "value": 70.76923076923076
                        }
                    ],
                    "platformDifferences": [
                        "Architecture"
                    ],
                    "migrationEffort": "Low",
                    "performanceRisk": 1.0,
                    "rank": 1
                },
                {
                    "instanceType": "t4g.xlarge",
                    "projectedUtilizationMetrics": [
                        {
                            "name": "CPU",
                            "statistic": "MAXIMUM",
                            "value": 33.33333333333333
                        }
                    ],
                    "platformDifferences": [
                        "Hypervisor",
                        "Architecture"
                    ],
                    "migrationEffort": "Low",
                    "performanceRisk": 3.0,
                    "rank": 2
                },
                {
                    "instanceType": "m6g.xlarge",
                    "projectedUtilizationMetrics": [
                        {
                            "name": "CPU",
                            "statistic": "MAXIMUM",
                            "value": 33.33333333333333
                        }
                    ],
                    "platformDifferences": [
                        "Architecture"
                    ],
                    "migrationEffort": "Low",
                    "performanceRisk": 1.0,
                    "rank": 3
                }
            ],
            "recommendationSources": [
                {
                    "recommendationSourceArn": "arn:aws-cn:ec2:cn-north-1:000000000000:instance/i-0b5ec1bb9daabf0f3",
                    "recommendationSourceType": "Ec2Instance"
                }
            ],
            "lastRefreshTimestamp": "2021-12-28T11:00:03.576000-08:00",
            "currentPerformanceRisk": "High",
            "effectiveRecommendationPreferences": {
                "cpuVendorArchitectures": [
                    "CURRENT",
                    "AWS_ARM64"
                ],
                "enhancedInfrastructureMetrics": "Inactive"
            }
        }
    ],
    "errors": []
}

总结

现可在由光环新网运营的亚马逊云科技中国(北京)区域和由西云数据运营的亚马逊云科技中国(宁夏)区域免费使用 Compute Optimizer Graviton 建议。要开始使用 Compute Optimizer,请访问 Compute Optimizer 网页

Original URL:https://aws.amazon.com/blogs/compute/aws-compute-optimizer-supports-aws-graviton-migration-guidance/