热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将AmazonLambda函数迁移到基于Arm的AmazonGraviton2处理器

除了基于x86的函数之外,AmazonLambda现在还允许您配置新的和现有的函数在基于Arm的AmazonGraviton2处理器上运行。使用此处理器架构选项&#x

59a231a64998d63d01328371fb86b974.gif

除了基于x86的函数之外,Amazon Lambda现在还允许您配置新的和现有的函数在基于Arm的Amazon Graviton 2处理器上运行。使用此处理器架构选项,您可以获得高达34%的性价比提升。这篇博客重点介绍从x86迁移到Arm64时的一些注意事项,因为迁移过程依赖于代码和工作负载。

使用Arm架构的函数得益于Amazon Graviton 2处理器内置的性能和安全性,该处理器旨在为计算密集型工作负载提供高达19%的性能提升。对使用多线程和多重处理,或者执行许多I/O操作的工作负载,可以减少调用时间,从而降低成本。

与当前的x86定价相比,以毫秒粒度计费的持续时间费用降低了20%。这也适用于使用预置并发时的持续时间费用。Compute Saving Plans支持由Amazon Graviton2提供支持的Amazon Lambda函数。

架构变更不会影响调用函数的方式,也不会影响函数反馈响应的方式。新架构与API、服务、应用程序或工具集成不受影响,而且将一如既往地工作。

Arm支持以下使用Amazon Linux 2的运行:

  •   Node.js 12 和14

  •   Python 3.8 和3.9

  •   Java 8 (java8.al2) 和11

  •   .NET Core 3.1

  •   Ruby 2.7

  •   自定义运行时(provided.al2)

https://aws.amazon.com/lambda/edge/不支持将Arm作为架构选项。

您可以使用亚马逊云科技管理控制台、亚马逊云科技命令行界面(Amazon CLI)、Amazon Cloud Formation、亚马逊云科技Serverless Application Model(Amazon SAM)和亚马逊云科技云开发工具包(Amazon CDK)创建和管理Amazon Graviton 2处理器提供支持的Amazon Lambda函数。还可以通过众多Amazon Lambda合作伙伴获得支持。

了解Amazon Graviton 2处理器

Amazon Graviton处理器由亚马逊云科技定制。通常,您不需要了解Amazon Graviton处理器的具体架构,除非您的应用程序可以从特定功能中受益。

Amazon Graviton 2处理器使用Neoverse-N1内核,支持Arm V8.2(包括CRC和加密扩展)以及其他一些架构扩展。特别是,Amazon Graviton 2支持大型系统扩展(LSE),可以提高大型系统的锁定和同步性能。

将x86 Lambda函数迁移到Arm64

许多Amazon Lambda函数可能只需要进行配置变更即可利用到Amazon Graviton2的性价比。另外一部分函数可能需要使用Arm专用的依赖项重新打包Amazon Lambda函数,或者重新构建函数二进制文件或容器镜像。

在开发机器上创建基于Arm的函数可能不需要Arm处理器。您可以使用Amazon SAM和Docker Desktop在x86机器上构建、测试、打包、编译和部署Arm Lambda函数。如果您有一个基于Arm的系统,比如Apple M1 Mac,您可以在本地编译二进制文件。

无架构专用依赖项或二进制文件的函数

如果您的函数不使用架构专用的依赖项或二进制文件,则可以通过一次配置变更从一种架构切换到另一种架构。许多使用解释性语言的函数,例如Node.js和Python,或者编译成Java字节码的函数,可以在不做任何更改的情况下切换。确保你检查了二进制文件的依赖项、Amazon Lambda Layer和Amazon Lambda扩展。 

要将函数从x86切换到Arm64,可以使用Amazon Lambda控制台在函数运行时设置中更改架构。

编辑运行时设置

f9f450fca504c01621753b52376154b7.png

编辑Amazon Lambda函数架构

如果要在Amazon Lambda函数中显示或记录处理器架构,可以使用操作系统专用的调用。例如:Node.js process.arch 或 Python platform.machine().

使用Amazon CLI创建Amazon Lambda函数时,请指定--architectures选项。如果未指定架构,则默认值为x86-64。例如,要创建arm64函数,请指定--architectures arm64。

Amazon lambda create-function \--function-name MyArmFunction \--runtime nodejs14.x \--architectures arm64 \--memory-size 512 \--zip-file fileb://MyArmFunction.zip \--handler lambda.handler \--role arn:Amazon:iam::123456789012:role/service-role/MyArmFunction-role

*左滑查看更多

Bash

使用Amazon SAM或AmazonCloudFormation时,在函数配置中添加或修改Architectures属性。

MyArmFunction:Type: Amazon::Lambda::FunctionProperties:Runtime: nodejs14.xCode: src/Architectures:- arm64Handler: lambda.handlerMemorySize: 512

YAML

启动Amazon SAM应用程序时,您可以指定:

sam init --architecture arm64

Bash

构建Amazon Lambda Layer时,您可以指定CompatibleArchitectures。

MyArmLayer:Type: Amazon::Lambda::LayerVersionProperties:ContentUri: layersrc/CompatibleArchitectures:- arm64

YAML

构建Amazon Graviton2的函数代码

如果函数包中有依赖项或二进制文件,则必须为要使用的架构重新构建函数代码。许多包和依赖项都有与Arm64等效的版本。对照Arm64软件包测试您自己的工作负载,看看您的工作负载是否适合迁移。由于处理器架构功能不同,并非所有工作负载的性能都有所提高。 

对于Rust和Go等编译语言,您可以使用支持Arm的provided.al2custom runtime https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html 。您提供一个与Amazon Lambda Runtime API 通信的二进制文件。 

在编译Go时,请设置架构为arm。 

GOOS=linux GOARCH=arm64 go build

在编译Rust时,请设置目标。

cargo bulid --release -- target-cpu=neoverse-n1

在某些Linux发行版上默认安装的Python pip已经过时&#xff08;<19.3&#xff09;。要安装针对Amazon Graviton发布的二进制软件包&#xff0c;请使用以下命令升级pip&#xff1a;  

sudo python3 -m pip install --upgrade pip

Bash

使Arm软件生态系统正在不断改进。作为一般规则&#xff0c;尽可能使用更高版本的编译器和语言运行时。在GitHub上的Amazon Graviton入门存储库包含已知可以提高性能的对常见包的最新更改&#xff0c;包括ffmpeg、PHP、.Net、PyTorch和zlib。

您可以将https://pkgs.org/ 作为包存储库搜索工具。‍

有时代码包括架构专用的优化。这些优化可以包括使用特定CRC指令在汇编中优化的代码&#xff0c;或者启用在特定架构上运行良好的功能。查看Arm64是否缺少任何优化的一种方法是搜索代码中的__x86_64__ifdef&#xff0c;并查看是否包含相应的Arm64代码。如果没有&#xff0c;请考虑替代的解决方案。 

有关特定语言的其他注意事项&#xff0c;请参阅GitHub存储库中的链接。 

Amazon Graviton的性能runbook https://github.com/aws/aws-graviton-getting-started/blob/main/perfrunbook/graviton_perfrunbook.md 是Amazon Graviton对应用程序代码进行基准测试、调试和优化的性能评测参考。

  • C/C&#43;&#43;

    https://github.com/aws/aws-graviton-getting-started/blob/main/c-c&#43;&#43;.md

  • Go

    https://github.com/aws/aws-graviton-getting-started/blob/main/golang.md

  • JAVA

    https://github.com/aws/aws-graviton-getting-started/blob/main/java.md

  • .Net

    https://github.com/aws/aws-graviton-getting-started/blob/main/dotnet.md

  • Python

    https://github.com/aws/aws-graviton-getting-started/blob/main/python.md

  • Rust

https://github.com/aws/aws-graviton-getting-started/blob/main/rust.md

将函数包构建为容器镜像

打包为容器镜像的函数必须针对它们将要使用的架构&#xff08;x86 或 Arm64&#xff09;构建。 亚马逊云科技为Amazon Lambda 提供的基础镜像有 Arm64 架构版本。 要为 Arm64 指定容器镜像&#xff0c;请使用 Arm64 特定镜像标签&#xff0c;以Node.js 14为例&#xff1a;

  • public.ecr.Amazon/lambda/nodejs:14-arm64

  • public.ecr.Amazon/lambda/nodejs:latest-arm64

  • public.ecr.Amazon/lambda/nodejs:14.2021.10.01.16-arm64

Docker Hub也提供Arm64镜像。

除了亚马逊云科技提供的Amazon Linux 2镜像之外&#xff0c;您还可以使用任意Linux基础镜像。支持Arm64的镜像包括Alpine Linux 3.12.7或更高版本、Debian 10和11、Ubuntu 18.04和20.04。有关其他受支持的Linux版本的详细信息&#xff0c;请参阅可用于基于Amazon Graviton实例的操作系统。 

迁移函数

下面是一个示例&#xff0c;说明如何将Amazon Lambda函数从x86迁移到Arm64&#xff0c;并利用较新的软件版本来优化价格和性能。您可以采用类似的方法来测试自己的代码。

我有一个现存的Amazon Lambda函数&#xff0c;作为没有配置架构属性的Amazon SAM模板的一部分&#xff0c;默认为x86_64。

Imagex86Function:Type: Amazon::Serverless::FunctionProperties:CodeUri: src/Handler: app.lambda_handlerRuntime: python3.9

YAML

Amazon Lambda函数代码执行一些计算密集型图像处理。该代码使用一个按照以下版本配置的依赖项&#xff1a; 

{"dependencies": {"imagechange": "^1.1.1"}
}

JSON

我使用相同的源代码在Amazon SAM模板中复制Amazon Lambda函数&#xff0c;并将Arm64指定为架构。

ImageArm64Function:Type: Amazon::Serverless::FunctionProperties:CodeUri: src/Handler: app.lambda_handlerRuntime: python3.9Architectures:- arm64

YAML

我使用Amazon SAM构建两个Amazon Lambda函数。我指定--use-container标志&#xff0c;在其架构专用的构建容器中构建每个函数

sam build –use-container

Bash

即使在x86系统上&#xff0c;我也可以使用sam本地调用&#xff08;sam local invoke&#xff09;在本地测试Arm64函数。

1de4906593182ba4534b8e39b492afc6.png

然后&#xff0c;我使用sam deploy将这些函数部署到Amazon云端。 

Amazon Lambda Power Tuning https://github.com/alexcasalboni/aws-lambda-power-tuning 开源项目使用不同的设置运行您的函数&#xff0c;给出最大限度地降低成本和提高性能的建议配置。该工具允许您比较同一图表上的两个结果&#xff0c;并合并基于Arm64的定价。这对于比较同一函数的两个版本&#xff08;一个使用x86&#xff0c;另一个使用Arm64&#xff09;很有用。

我比较了X86和Arm64 Lambda函数的性能&#xff0c;发现Arm64 Lambda函数运行成本便宜12%&#xff1a;

3f8745f9aedff3ecb237ef96d1cf4d8e.png

然后&#xff0c;我将包依赖项升级为1.2.1版&#xff0c;该版本已针对Arm64处理器进行了优化。

{"dependencies": {"imagechange": "^1.2.1"}
}

JSON

我使用sam build和sam deploy通过更新的依赖项重新部署更新的Amazon Lambda函数。

我将原始的x86函数与更新的Arm64函数进行了比较。将Arm64与更新的依赖代码版本结合使用&#xff0c;可将性能提高30%&#xff0c;并将成本降低43%。

5df0a88dd9fce6a830f5906286dd0b33.png

您可以使用Amazon CloudWatch&#xff0c;使用数据统计功能查看持续时间等性能指标。然后&#xff0c;您可以比较这两种架构的平均持续时间和p99持续时间。由于Amazon Graviton2的架构&#xff0c;函数可能使用更少的内存。这可以让您调整函数内存配置的大小&#xff0c;从而降低成本。

在生产环境中部署Arm64函数

一旦确认Amazon Lambda函数在Arm64上成功执行&#xff0c;就可以迁移工作负载。可以使用带有加权别名的函数版本和别名来控制展示。如果触发任何指定的Amazon CloudWatch警报&#xff0c;流量将逐渐切换到Arm64版本或自动回滚。

Amazon SAM支持通过一种名为Amazon Lambda安全部署的功能使用Amazon CodeDeploy进行渐进式Amazon Lambda部署。您可以使用许多CI/CD系统编译Arm64的二进制文件包。Amazon CodeBuild支持本机构建基于Arm的应用程序。CircleCI还具有用于部署的Arm计算资源类。GitHub Action允许您使用自托管运行器。您还可以使用GitHub Action内的Amazon SAM和其他CI/CD管道来创建Arm64构件。

结论

使用Arm/Amazon Graviton2架构的Amazon Lambda函数可提供高达34%的性价比提升。本博客讨论了帮助您将函数迁移到Arm64的一些注意事项。

许多函数可以通过配置更改进行无缝迁移&#xff0c;另外一部分函数需要重新构建才能使用Arm64软件包。我展示了如何迁移函数&#xff0c;以及如何将软件更新到新版本去提高运行在Arm64上的函数性能。您可以使用Amazon Lambda Power Tuning工具测试自己的函数。

立即开始将您的Amazon Lambda 函数 迁移到 Arm/Amazon Graviton2

欲了解更多无服务器学习资源&#xff0c;请访问https://serverlessland.com/。

本篇作者

f388772d156949453a2c7d6092699d0d.png

Julian Wood

Senior Developer Advocate

Julian Wood 帮助开发人员和构建者了解并热爱无服务器技术如何改变他们构建和运行应用程序的方式&#xff0c;在全球企业和初创企业中担任基础架构架构师和经理超过 25 年&#xff0c;然后在亚马逊全身心投入无服务器领域。

*本篇中文翻译审核&#xff1a;Jian, Tang (Jack) | Solutions Architect | 亚马逊云科技

1454feb70b27a8bbed3572a133c63fd6.gif

0a08af095286fdc6fbd281f6bdc7edaa.gif

听说&#xff0c;点完下面4个按钮

就不会碰到bug了&#xff01;

6709b88c64fdbe8b01e91d5073b61935.gif


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 在Windows10系统上使用VMware创建CentOS虚拟机的详细步骤教程
    本文详细介绍了在Windows10系统上使用VMware创建CentOS虚拟机的步骤,包括准备条件、安装VMware、下载CentOS ISO文件、创建虚拟机并进行自定义配置、设置虚拟机的ISO与网络、进行安装和配置等。通过本文的指导,读者可以轻松地创建自己的CentOS虚拟机并进行相应的配置和操作。 ... [详细]
author-avatar
踏山321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有