性能比拼: Elixir vs Go

news2025/4/20 21:14:12

本内容是对知名性能评测博主 Anton Putra Elixir vs Go (Golang) Performance (Latency - Throughput - Saturation - Availability) 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准

对比 Elixir 和 Go

简介

许多人长期以来一直要求我对比 ElixirGo。在本视频中,我将 ElixirGo 标准库 进行对比。我甚至收到了一个包含 Elixir 实现 的 Pull Request 。因此,如果你希望我对比你喜欢的框架,可以提交 PR

在第一个测试中,我们将从 客户端角度 测量 99% 百分位数的延迟(P99 Latency),并通过计算 每秒请求数(Requests per Second, RPS) 来衡量 吞吐量(Throughput)。此外,我们还会测量 Kubernetes 容器的 CPU 使用率和内存使用率,以及 应用的可用性(Availability)或错误率(Error Rate)。由于我们在 Kubernetes 中运行这两个应用程序,因此还需要测量 CPU 限流(CPU Throttling)

第二个测试更加 真实,也更加 有趣。这是我首次使用 足够大的 EC2 实例 运行数据库,以确保数据库不会成为瓶颈。我稍后会解释设计思路。我们会使用 Prometheus 进行监控,测量 每个应用程序插入新记录所需的时间,以及 整体 POST 请求的持续时间

此外,我们还会测量 数据库的 CPU 使用率,以及 每个应用创建的数据库连接池大小


测试环境

我使用 AWS 来运行所有基准测试。应用程序运行在 m7a.large 实例 上。同时,我使用 4xlarge Graviton 实例 部署 Prometheus、Grafana 等监控组件,并用于运行 客户端负载生成器。在第二个测试中,我使用 2xlarge 实例 运行数据库。

这些 EC2 实例 的最大优势是 磁盘使用不需要额外付费,费用已包含在 EC2 价格 中。这类实例自带 两个 SSD 磁盘,总计 2.5TB 存储,非常适合 自管理分布式数据库,比如 Cassandra、Kafka,甚至 PostgreSQL

为了 支持我的频道并支付基础设施费用,我提供 一对一咨询服务,详情请查看 视频描述


测试设计

第一轮测试

在第一个测试中,我使用 Terraform 从零开始创建 VPC 和所有网络组件,并配置了 EKS 集群,其中包含 两个实例组(Instance Groups)

  • 第一个实例组

    • 包含 2 个 m7a.large 节点(每个 2 核 CPU,8GB 内存)。
    • 仅部署应用程序(每个节点运行一个应用)。
    • 设置 资源限制 以匹配 VM 容量,确保 无干扰(No Noisy Neighbors)
  • 第二个实例组

    • 基于 Graviton,用于部署 Prometheus、Grafana负载生成客户端(使用 Kubernetes Jobs 运行)。

应用程序接收到 GET 请求 后,会返回 硬编码的设备信息 给客户端。


第二轮测试

在第二个测试中,我创建了一个 2xlarge 实例 运行数据库,配置如下:

  • 8 核 CPU,64GB 内存
  • 使用 pgTune 优化 PostgreSQL 配置
  • 最大连接数 设置为 1050(较高,但为了测试需要)。

应用在接收到请求后,会执行以下操作:

  1. 解析 JSON 负载
  2. 生成 UUID 和时间戳
  3. 记录插入数据库
  4. 返回 PostgreSQL 生成的 ID

第一轮测试

开始测试

让我们开始 第一轮测试。首先,我们关注 最重要的指标---延迟(Latency),因为它直接影响 用户体验。在本测试中,我们使用 99% 百分位数(P99),表示 99% 的请求完成时间在该范围内,数值越低越好。

Grafana微秒(μs) 显示数据,当数值达到 1,000μs 时,自动转换为毫秒(ms)

从一开始,Go 的延迟表现明显优于 Elixir,并且这种趋势一直持续到测试结束。


吞吐量(Throughput)

在右侧,我们可以看到 吞吐量(请求数/秒)。吞吐量影响 应用所需的资源量,进而影响 基础设施成本。如果你预算有限,你会更倾向于选择 在相同计算资源下能处理更多请求的应用


CPU 和内存使用

我们还测量了 Kubernetes 容器的 CPU 和内存使用,结果显示 Go 在这两个方面都表现更好

当请求量达到 18,000 次/秒 时,Elixir 无法再处理更多请求,开始 落后于 Go


CPU 限流(Throttling)

Kubernetes 中,CPU 限流 是影响应用性能的重要因素。在测试进行几分钟后,Elixir 的可用性下降,表明 许多请求超时或返回 500 错误

Elixir 在本次测试中的极限远低于 Go。我认为 Elixir 这个框架 更适合与 Python Django 或 Ruby on Rails 进行对比,其性能类别相似,可能稍好一些。

让我们继续运行测试,直到 Go 也达到极限


测试结束

Go 最高达到了 60,000 请求/秒,与其他基准测试结果相近。在此测试中,我使用了 性能更优的第三方 JSON 解析库,进一步提升了 Go 应用的整体表现

Go 应用在无法处理更多请求时,会出现内存峰值,这是预期行为。


完整测试数据

请求数/秒

  • Elixir:18,000
  • Go:60,000
延迟(Latency)

  • Go 显著优于 Elixir
CPU 使用

  • Elixir 可能使用了更多中间件,或某些库不如 Go 高效
可用性(Availability)

  • Elixir 可用性下降,更多请求返回 4xx 和 5xx 状态码
内存使用

  • 本次测试采用实际内存使用量(字节)而非百分比
CPU 限流

  • 超过 pod 资源限制时,cgroups 会对容器进行限流,导致性能下降

第二轮测试

测试开始

在第二轮测试中,我使用了 更大的数据库 VM,确保 数据库不会成为瓶颈。通常,像 Redis、数据库或其他微服务 可能会成为瓶颈,因此需要 监控整个系统

在这个测试中,我们额外测量了:

  • 数据库插入延迟
  • 整个 POST 请求的延迟
  • PostgreSQL CPU 使用率
  • 数据库连接池大小

连接池

我们在两种应用中都限制 最大连接数为 500。不同之处在于:

  • Elixir 在启动时立即创建 500 个连接
  • Go 根据负载动态增加连接,直至达到 500

测试结果

当请求量达到 9,000 次/秒 时,Elixir 的 CPU 使用率接近饱和,无法再处理更多请求。而 Go 应用的 CPU 仍有余量,最终吞吐量达到 25,000 次/秒,比 Elixir 高出一倍多


总结

如果你可以改进 Elixir 或 Go 的实现,请提交 Pull Request,我会重新运行测试并分享优化结果。

我的频道还有其他 基准测试(Benchmark),你可能会感兴趣。感谢观看,我们下期见!

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

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

相关文章

【Linux网络与网络编程】11.数据链路层mac帧协议ARP协议

前面在介绍网络层时我们提出来过一个问题:主机是怎么把数据交给路由器的?那里我们说这是由数据链路层来做的。 网络上的报文在物理结构上是以mac帧的形式流动的,但在逻辑上是以IP流动的,IP的流动是需要mac帧支持的。 数据链路层解…

lottie深入玩法

A、json文件和图片资源分开 delete 是json资源名字 /res/lottie/delete_anim_images是图片资源文件夹路径 JSON 中引用的图片名,必须与实际图片文件名一致 B、json文件和图片资源分开,并且图片加载不固定 比如我有7张图片,分别命名1~7&…

热门与冷门并存,25西电—电子工程学院(考研录取情况)

1、电子工程学院各个方向 2、电子工程学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、电子科学与技术25年相较于24年上升20分 2、信息与通信工程、控制科学与工程、新一代电子信息技术(专硕)25年相较于24年下降25分 3、25vs24推…

Warcraft Logs [Classic] [WCL] BOSS ID query

Warcraft Logs [Classic] [WCL] BOSS ID query 所有副本BOSSID查询 https://wowpedia.fandom.com/wiki/DungeonEncounterID#Retail IDNameMapInstanceIDPatch227High Interrogator GerstahnBlackrock Depths230228Lord RoccorBlackrock Depths230229Houndmaster GrebmarBlackro…

架构师面试(三十一):IM 消息收发逻辑

问题 今天聊一下 IM 系统最核心的业务逻辑。 在上一篇短文《架构师面试(三十):IM 分层架构》中详细分析过,IM 水平分层架构包括:【入口网关层】、【业务逻辑层】、【路由层】和【数据访问层】;除此之外&a…

基于若依框架前后端分离的项目部署

文章目录 单项目的部署项目目录后端打包上传前端打包上传配置nginx服务器打开防火墙完成 两个项目的部署两个项目介绍后端打包并上传前端打包并上传nginx配置服务器端口开放完成 腾讯云服务器 之 环境搭建 单项目的部署 项目目录 后端打包上传 查看端口号 在ruoyi-admin的appl…

黑马Java基础笔记-1

JVM,JDK和JRE JDK是java的开发环境 JVM虚拟机:Java程序运行的地方 核心类库:Java已经写好的东西,我们可以直接用。 System.out.print中的这些方法就是核心库中的所包含的 开发工具: javac(编译工具)、java&…

面向新一代扩展现实(XR)应用的物联网框架

中文标题: 面向新一代扩展现实(XR)应用的物联网框架 英文标题: Towards an IoT Framework for the New Generation of XR Applications 作者信息 Joo A. Dias,UNIDCOM - IADE,欧洲大学,里斯本&…

pcl各模块

参考资料: https://github.com/Ewenwan/MVision/blob/master/PCL_APP/1_%E7%82%B9%E4%BA%91%E6%BB%A4%E6%B3%A2filter.md 点云库PCL各模块学习 语雀 各模块依赖关系: 模块: common pcl_common中主要是包含了PCL库常用的公共数据结构和方…

Oracle Recovery Tools修复ORA-600 6101/kdxlin:psno out of range故障

数据库异常断电,然后启动异常,我接手该库,尝试recover恢复 SQL> recover database; ORA-10562: Error occurred while applying redo to data block (file# 2, block# 63710) ORA-10564: tablespace SYSAUX ORA-01110: ???????? 2: H:\TEMP\GDLISNET\SYSAUX01.DBF O…

2025MathorcupC题 音频文件的高质量读写与去噪优化 保姆级教程讲解|模型讲解

2025Mathorcup数学建模挑战赛(妈妈杯)C题保姆级分析完整思路代码数据教学 C题:音频文件的高质量读写与去噪优化 随着数字媒体技术的迅速发展,音频处理成为信息时代的关键技术之一。在日常生活中,从录音设备捕捉的原始…

.net core web api 数据验证(DataAnnotations)

目录 一、什么是 DataAnnotations? 二、扩展验证逻辑(自定义验证器) 一、什么是 DataAnnotations? DataAnnotations 是一组特性(Attributes),用于在模型类上定义验证规则。主要用于属性级别的…

【工具-Krillin AI】视频翻译、配音、语音克隆于一体的一站式视频多语言转换工具~

Krillin AI 是全能型音视频本地化与增强解决工具。这款简约而强大的工具,集音视频翻译、配音、语音克隆于一身,支持横竖屏格式输出,确保在所有主流平台(哔哩哔哩,小红书,抖音,视频号&#xff0c…

ICPR-2025 | 让机器人在未知环境中 “听懂” 指令精准导航!VLTNet:基于视觉语言推理的零样本目标导航

作者:Congcong Wen, Yisiyuan Huang, Hao Huang ,Yanjia Huang, Shuaihang Yuan, YuHao, HuiLin and Yi Fang 单位:纽约大学阿布扎比分校具身人工智能与机器人实验室,纽约大学阿布扎比分校人工智能与机器人中心,纽约大学坦登工程…

Shiro-550 动调分析与密钥正确性判断

一、Shiro 简介 Apache Shiro是一个开源安全框架,用于构建 Java 应用程序,提供身份验证、授权、加密和会话管理等功能。 二、Shiro-550(CVE-2016-4437) 1、漏洞原理 Shiro 在用户登陆时提供可选项 RememberMe,若勾选…

Python制作简易PDF查看工具PDFViewerV1.0查找功能优化

原文说明 为不破坏原文结构,因此功能优化不在原文中维护了。关于这款工具原文请通过下面链接访问。Python制作简易PDF查看工具PDFViewerV1.0 这款小工具基本功能已经可以作为一款文档浏览器使用,但还有一些美中不足的地方,本文将介绍对文本查…

20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤

20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤 2025/4/19 15:38 查询格式YUV/RGB 81 09 04 24 60 FF 90 50 00 00 FF 查询辨率帧率 81 09 04 24 72 FF 90 50 01 03 FF 查询LVDS mode : Singel output/Dual output 81 09 04 24 74 FF 90 50 00 00 FF 配置405的机…

从0开发一个unibest+vue3项目,使用vscode编辑器开发,总结vue2升vue3项目开始,小白前期遇到的问题

开头运行可看官网 链接: unibest官网 一:vscode中vue3代码显示报错标红波浪线 去查看扩展商店发现一些插件都弃用了,例如h5的插件以及vue老插件 解决办法:下载Vue - Official插件(注意:横杠两边是要加空格的&#xff…

HTML5好看的水果蔬菜在线商城网站源码系列模板4

文章目录 1.设计来源1.1 主界面1.2 关于我们1.3 商品信息1.4 新闻资讯1.5 联系我们1.5 登录注册 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/147264262 HTML5好看的水果…

多人五子棋联机对战平台 测试报告

目录 项目介绍 测试用例设计 部分功能测试示例 自动化测试 测试范围 排除范围 自动化测试目录​编辑 执行全部自动化测试用例 性能说明 总结 性能测试 结果分析 测试总结 项目介绍 该项目基于WebSocket实现实时通信,采用SSM框架构建在线五子棋多人联机…