亚马逊AWS官方博客
使用 Graviton 2优化Serverless车联网架构
一、背景介绍
AWS Graviton 由 Amazon Web Services 基于64 位 Arm Neoverse N1 内核定制,为在 Amazon计算资源中运行的工作负载提供更高性价比运行环境。与当前这一代基于 x86 的实例相比,基于Graviton 2的实例为各种工作负载(包括应用程序服务器、微服务、高性能计算、EDA、游戏、开源数据库和内存中的缓存)提供高达 40% 的性价比提升。除了基于x86 Amazon EC2 实例外,Amazon Lambda现在还允许您配置新的和现有的函数在基于Arm的Amazon Graviton 2处理器上运行。使用此处理器架构选项,您可以获得高达34%的性价比提升。
在汽车行业,AWS发布了针对车联领域的AWS 联网汽车解决方案架构,有许多客户也借助该方案基于AWS的无服务化服务的优势来快速高效的构建自己的车联网应用。除高可用,高性能外,在成本方面AWS也致力于持续为客户优化成本,本文主要以某客户真实场景为背景,着重介绍如何在Lambda中使用AWS Graviton 2 进一步优化车辆网应用的成本。
二、环境部署测试
环境说明:
- 如上图通过AWS SAM 构建一个相似的车联网数据收集场景。
- API Gateway 负责数据接入,Lambda 函数把接受数据并写入到DynamoDB中。
- Amazon Lambda函数分别运行在x86 和 arm64 Architecture中,进行对比测试。
- Lambda 函数使用python 3.9 开发,内存配置为256M。
- 本环境在us-east-2区域进行构建,使用EC2 IAM role 获取相应操作权限。
环境部署
- 安装SAM
- 编写Lamdba 函数及环境模板
- SAM部署
创建S3 bucket
部署SAM模板
此过程需要几分钟完成。
通过控制台确定所有资源已正常运行。如下图:
- 测试验证
获取api gateway endpoint
- Cold start test
模拟发送数据,验证Lamdba函数基于x86架构的链路响应
Total: 0.627213s
模拟发送数据,验证Lamdba函数基于arm架构的链路响应
Total: 0.551996s
另外也可以通过X-RAY 更加直观的查看两种架构的响应情况。
(Lambda x86)
(Lambda arm)
- Duration test
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
0.078070s | 0.069882s | 0.077301s | 0.065671s | 0.067726s | 0.080177s | 0.074370s | 0.066984s | 0.073227s | 0.072684s |
(Lambda x86)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
0.073550s | 0.073990s | 0.068542s | 0.062004s | 0.089615s | 0.060765s | 0.065035s | 0.062175s | 0.085470s | 0.079319s |
(Lambda arm)
- Apache Benchmark 并发测试
安装apache benchmark
Lambda x86 并发数为100时,服务器平均请求等待时间为1.873ms
Lambda arm 并发数为100时,服务器平均请求等待时间为1.498ms
三、总结
我们可以看到本场景中同样的条件下,由 Graviton2 提供支持的 Lambda 函数具有更好的性能,函数可以更高效地运行;另外使用 Arm/Graviton2 架构的函数,持续时间费用比 x86 的当前定价低 20%,使用预置并发的函数的持续时间费用也可减少 20%。因此,由 Graviton2 提供支持的 Lambda 函数可以降低 20% 的成本的同时提供更高的性能提升,从而为客户提供了更完善的用户体验和更低的成本节约。
四、参考资料
https://github.com/aws/aws-sam-cli/releases/
https://aws.amazon.com/cn/lambda/pricing/