[翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能

原文: Comparing AWS Lambda performance of Node.js, Python, Java, C# and Go

AWS 最近宣布他们支持了 C# (Net Core 2.0 版本) 和 Go 语言来实现 Lambda 功能。

(译者注: AWS Lambda 是 AWS 推出的 Serverless 功能,请参阅这里或 Serverless 相关资料)

做为一名维护 serverless-golang 项目的工程师,我很想知道每个语言运行时的性能如何,尤其是与其他开发者就此主题深入讨论之后。

(译者注:上图是 github 上的讨论:性能优化是 Lambda 接下来工作会一直持续的事情。每种语言都有他们的长处和弱点, 这就是为什么我们会有这样有趣的语言战争 :) 此测试只是测量语言运行时启动时间, 这是动态语言例如 Node.js 和 Python 速度比 C# 和 Java 这样的静态语言快的原因, 因为它们缺少类型检查和依赖项的惰性加载。)

为了找到答案,我使用 Serverless 框架 开发了一系列性能测试,并观察出了一些非常有趣的结果。

游侠索罗:星球大战外传

主演:阿尔登·埃伦瑞奇 / 艾米莉亚·克拉克 / 唐纳德·格洛沃

猫眼电影演出 广告
购买

2018 AWS Lambda 性能测试

我的性能测试基于 Yan Cui 2017 年进行的 AWS Lambda 函数的性能测试和比较。为了保持一致性,我 fork 了 Yan 的代码库并添加了一些额外的测试模板。

与 Yan 的原始性能测试类似,我们将忽略初始冷启动时间,仅关注持续时间这一标准,以比较不同语言之间的运行时性能。

所有用于测试的代码都可以在我的 GitHub 仓库 中找到。

每个 Lambda 函数都配置了由 Serverless 框架设置的默认 1024MB 内存, 并部署到了北弗吉尼亚州(us-east-1)。部署时总共有 12 个 Lambda 函数。

为了管理性能负载测试, 我创建了一个叫 artillery.io 做的脚本。该脚本在一个小时内对所有 12 个 API 执行负载测试:

观察结果 1 - Net Core 2.0 拥有显著的提高

.Net Core 2.0 上的 C# 和 F# 都超出了全部预期,并且在平均持续时间内胜过了所有其他运行时。 AWS Lambda 用户应该将 .Net Core 2.0 设为默认设置,并升级所有仍在使用 1.0 的项目。

请观察图上的平均持续时间,.Net Core 2.0 上的 C# 和 F# 在整个 1 小时内始终低于其他运行时:

.Net Core 2.0 上 C# 的平均持续时间

观察结果 2  —  Go 的性能与 Java 相当

Go 的运行时性能与 Java 非常相似。使用 UPX 压缩或 Python Shim 没有显著的性能提升。

在1小时内,Go 的平均持续时间与 Java 完全相同:

Go 1.x的平均持续时间

观察结果 3 —  编译语言与动态语言的性能稳定性

在原来的 2017 年基准测试结果中,与动态语言例如 Python 和 Node.js 相比,Java 和 .Net Core 1.0 这类编译语言的性能显然更加稳定。

基于最新的 2018 年性能测试结果,我们观察到 Java 和新的编译语言(.Net Core 2.0 和 Go)以及原始动态语言之间没有太大差异。

性能稳定性,比较平均和最大持续时间

在 2018 年的结果中,我们在所有语言中观察到了更多的稳定性。可以大胆的推测, 虽然新语言正在添加到 AWS Lambda 中, 但现有的语言不会被遗忘, 而且正在不断地改进。

观察结果 4  —  Go 的包体积比 Java 大

使用 -s 和 -w 链接器 flag 进行编译的 Go 二进制文件(2.3mb)会比 Java(2.0mb)体积更大(2.3mb)。通过使用 upx,可以缩小二进制大小,但没有显著的改善。

C# 在所有编译语言中占用的空间最小是 201KB,而 F# 增加了大约 1MB 的额外依赖。

最后的想法

借助对 Go 和 .Net Core 2.0 支持,AWS 继续领导了 FaaS 和 Furious 竞赛,成为最成熟的提供商,拥有了最广泛的支持语言。我很高兴看到 AWS Lambda 的 .Net Core 2.0 工具的性能和稳定性从早期的 1.0 版本有所改进。

作为 Go 编程语言的倡导者,我仍然觉得 Go 运行时需要一些优化工作。根据性能测试的结果,.Net Core 2.0 比 Go 的执行速度高了 3 倍。

我猜测 .Net Core 2.0 超越 Go 的性能优势是由于在容器级别进行了一些特定的底层优化以及潜在的 JSON 序列化优化或缓存。虽然对结果感到失望,但我相信随着 AWS Lambda 平台持续的快速发展,Go 的性能将会提高。

本性能测试不反映真实的生产用例,最终性能差异非常微妙。然而,与去年相比,架构师和工程师在2018 年考虑 AWS Lambda 功能时应该从所有可用的语言运行时中进行选择。

让我在下面的评论中了解你的想法,或直接通过Twitter @yunzhilin与我联系。

本文作者 Yun 是 Contino 亚太地区的副总裁,Contino是一家全球咨询公司,通过现代化的软件交付使公司组织加速创新。

原文地址: https://www.cnblogs.com/Rwing/p/comparing-aws-lambda-performance-of-node-js-python-java-csharp-and-go.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

Rwing

Reward

长按二维码向我转账

pic_reward_qrcode.2x3534de.png

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【结论】立体井字棋(jzoj 2124)

立体井字棋 题目大意&#xff1a; 在一个nnn的正方体中&#xff0c;由n个格子连成一条直线的方案数&#xff08;多少种可能用n个格子连成一条直线&#xff09; 样例输入 2 样例输出 28 数据范围限制 对于30%的数据&#xff0c; n<10&#xff1b; 对于100%的数据&am…

ASP.NET Core Identity 实战(3)认证过程

如果你没接触过旧版Asp.Net Mvc中的 Authorize 或者 Cookie登陆&#xff0c;那么你一定会疑惑 认证这个名词&#xff0c;这太正式了&#xff0c;这到底代表这什么&#xff1f;获取资源之前得先过两道关卡Authentication & Authorization要想了解Identity中用户登录之后&…

简明 ASP.NET Core 手册

编者&#xff1a;在4月份推送过这篇文章 简明 ASP.NET Core 手册 &#xff0c;今天再次推荐这篇文章&#xff0c;是因为原作者更新到了新版本1.1.0&#xff0c;改动很大&#xff0c;几乎所有章节都有很大程度的调整&#xff0c;这些调整都是根据读者的建议而做&#xff0c;而且…

《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

前言借书正式出版之际&#xff0c;完整回顾下从写博客到写书整个历程&#xff0c;也算是对自己近三年在技术上的一个总结&#xff0c;整个历程可通过三个万万没想到来概括&#xff0c;请耐心阅读。写博、写书完整历程回顾从2013年12月注册博客园账号&#xff0c;注册博客园账号…

Entity Framework Core 2.1带来更好的SQL语句生成方案

微软发布了Entity Framework Core2.1&#xff0c;为EF开发者带来了很多期待已久的特性。EF Core 2.1增加了对SQL GROUP BY的支持&#xff0c;支持延迟加载和数据种子等。EF Core 2.1的第一个重要新增特性是将GroupBy操作符翻译成包含GROUP BY子句的SQL。缺乏这种支持被认为是EF…

【枚举】数列(jzoj 1507)

数列 题目大意&#xff1a;给出一个等差数列的初始值和差值还有一个等比数列的处值和比值&#xff0c;问不大于n的数中&#xff0c;问这两个序列中&#xff0c;有多少个数小于n&#xff08;只要在一个序列中就行了&#xff0c;在两个序列中只记一次&#xff09; 样例输入 1 …

【模拟】蚂蚁(jzoj 1508)

蚂蚁 题目大意&#xff1a; 有n只蚂蚁&#xff0c;他们各往一个方向走&#xff08;上北&#xff0c;下南&#xff0c;左西和有东四个方向&#xff09;&#xff0c;他们如果撞到一起就会直接消失&#xff0c;每个单位时间走一格&#xff0c;但有一种情况&#xff1a;两只蚂蚁相…

【结论】单元格(jzoj 1509)

单元格 题目大意&#xff1a; 在一个RC的矩形中选三个点&#xff0c;使他们行列各不同&#xff0c;定义“费用”为&#xff0c;这三个点之间的行列的差值的和&#xff08;1,2和3,4费用是差值是&#xff08;3-1&#xff09;&#xff08;4-2&#xff09;224&#xff09;&#x…

【DP】剪草(jzoj 1510)

剪草 题目大意&#xff1a; 有n棵小草&#xff0c;B某看它们很不顺眼&#xff0c;想让他们的高度总和不大于H&#xff0c;它们一开始各有一个高度&#xff0c;然后它们各有一个固定的生长值&#xff0c;B某每个单位时间可以将一棵草减掉&#xff08;让他的高度变为0&#xff…

codeforces 962E Byteland, Berland and Disputed Cities 最小生成树变形

题目 题目链接 题意 在OxOx轴上有一堆点&#xff0c;这些点有三种类型R、B、PR、B、P型&#xff0c;现在要求添加一些线段把这些点连起来&#xff0c;使得如果去掉RR类型点,剩下的点都是联通的。如果去掉B" role="presentation" style="position: rela…

P6772-[NOI2020]美食家【矩阵乘法,倍增】

前言 我考场&#xff08;线上赛&#xff09;切NOI的题了&#xff01; 正题 题目链接:https://www.luogu.com.cn/problem/P6772 题目大意 nnn个点mmm条边&#xff0c;每个城市有不同的愉悦值&#xff0c;从111出发&#xff0c;要求经过TTT的时间后回到点111(不能原地停留。 …

在ASP.NET Core中使用brotli压缩

Brotli是一种全新的数据格式&#xff0c;可以提供比Zopfli高20-26%的压缩比。据谷歌研究&#xff0c;Brotli压缩速度同zlib的Deflate实现大致相同&#xff0c;而在Canterbury语料库上的压缩密度比LZMA和bzip2略大。 链接&#xff1a;Google开源Brotli压缩算法 微软使用了一种基…

CUMT--Java复习--文件及IO流

目录 一、文件 1、文件系统和路径 2、File类 3、FilenameFilter接口 二、IO流 1、流的分类 2、流的体系结构 三、字节流 1、InputStream 2、OutputStream 四、字符流 1、Reader 2、Writer 五、过滤流和转换流 1、过滤流 2、转换流 六、序列化 1、对象序列化…

用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等

本文所需的一些预备知识可以看这里: 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 和 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) 准备项目建立Richardson成熟度2级的POST、GET、PUT、PATCH、DELETE的RESTful API请看这里&#xff1a; 用ASP.NET Core…

用ASP.NET Core 2.1 建立规范的 REST API -- HATEOAS

本文所需的一些预备知识可以看这里: 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 和 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) 准备项目建立Richardson成熟度2级的POST、GET、PUT、PATCH、DELETE的RESTful API请看这里&#xff1a;用ASP.NET Core …

学习手记(2020/8/19~2021/3/19)

文章目录所有集合子集数量和结论证明枚举子集的方法最大匹配模的次数线性基卡特兰数树形dpTipTipTip斯特林数斐波那契幂前缀和hallhallhall定理阿巴阿巴1狄利克雷卷积常用式子组合数学恒等式竞赛图性质一些博弈模型基础反演二项式反演莫比乌斯反演欧拉反演子集反演min-max\text…

奶牛的交叉路(jzoj 1756)

奶牛的交叉路 题目大意&#xff1a; 有两个数轴&#xff0c;之间有n条线分别连接着两个数轴的点各一个&#xff0c;这些线可能会相交&#xff0c;问有多少条线没有和其他点相交 样例输入 4 -3 4 7 8 10 16 3 9样例输出 2数据范围限制 1<N<100000&#xff0c;-1…

.Net Core 环境下构建强大且易用的规则引擎

1. 引言1.1 为什么需要规则引擎在业务的早期时代&#xff0c;也许使用硬编码或者逻辑判断就可以满足要求。但随着业务的发展&#xff0c;越来越多的问题会暴露出来&#xff1a;逻辑复杂度带来的编码挑战&#xff0c;需求变更时改变逻辑可能会引起灾难重复性的需求必须可重用&am…

【最短路】【SPFA】单源最短路径 (luogu 3371)

单源最短路径 luogu 3371 题目大意&#xff1a; 求出一个点到其他点的最短路 原题&#xff1a; 题目背景 本题测试数据为随机数据&#xff0c;在考试中可能会出现构造数据让SPFA不通过&#xff0c;如有需要请移步 P4779。 题目描述 如题&#xff0c;给出一个有向图&…

在Windows 下如何使用 AspNetCore Api 和 consul

一、概念&#xff1a;什么是consul:Consul 是有多个组件组成的一个整体&#xff0c;作用和Eureka,Zookeeper相当&#xff0c;都是用来做服务的发现与治理。 Consul的特性&#xff1a;1、 服务的发现&#xff1a;consul可以把注册到其中的服务提供给使用者&#xff0c;也可以主动…