0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用Go重写Node.js服务

马哥Linux运维 来源:OSC开源社区 作者:OSC开源社区 2022-07-01 10:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Hasura Storage 是一项开源服务,在 hasura 和任何 s3 兼容的存储服务之上增加了一个存储服务。其目的是能够利用云存储服务,同时也利用 hasura 的功能,如它的 graphql API、权限、行动、预设等。

出于业务发展需求,Hasura Storage 团队近期将其原本用 Node.js 编写的服务用 Golang 进行了重写。“这个用 Node.js 编写的服务在相当长的一段时间内为我们提供了良好的服务,但随着公司的发展和用户数量的大规模增加,性能开始成为一个问题。虽然 Node.js 可能有很多可取之处,但优异的性能和可扩展性并不是其中之一。”

Hasura Storage 方面表示,在使用Golang进行重写后,其可处理的服务请求数增加了 5 倍,同时内存消耗减半。根据介绍,他们选择 Go 的原因在于:

该语言的依赖性管理系统和构建系统使其非常适合云

团队有丰富的 Golang 经验

虽然 Go是一种非常冗长的语言(尤其是与 Node.js 相比),但它非常易于学习且编写速度快

性能非常优异

重写完成后,Hasura Storage 团队针对 Node.js 和 Golang 版本的服务运行了一些基准测试。使用了k6并设计了以下测试:

当测试开始时,它会在前 10 秒内将 workers 的数量从 1 增加到 TARGET

然后再运行 60 秒才结束。

Workers尽可能快地查询服务

运行以下测试:

download_small_file

download_medium_file

download_large_file

download_image

download_image_manipulated

CPU 被限制在整个系统的 10%

RAM 是无限的

Hasura Storage 提前声明称,最终结果不应该只看表面的数字;“用于基准测试的系统的 CPU 容量非常有限,因为我们想对这两种服务施加压力并看看它们在压力下的表现如何所以,我们感兴趣的不是数字,而是两个版本之间的差异。”

测试结果表明,Hasura Storage在每种情况下能够处理的请求数都实现了大幅提升,其中较小的文件(5x)的效果更为显著。

522bd990-e2dd-11ec-ba43-dac502259ad0.png

同时在所有情况下都设法大大改善了 RAM 消耗,尤其是在下载大文件时。值得一提的是,这还是在提供了多达 5 倍的请求的前提下。

529817c2-e2dd-11ec-ba43-dac502259ad0.png

另一个重要的指标是响应时间,Hasura Storage 提供了两个数据:最小响应时间,开源告诉我们系统未承受压力时的响应时间;以及 P95,开源告诉我们大多数用户的响应时间最多是多少(包括当系统处于压力之下)。

首先是最小响应时间。测试用例download_small_file 的结果不好从图中目测,但Hasura Storage 称其将场景的响应时间从 Node.js用例的 29ms 提高到 Golang用例的 7ms。除了在 download_image_manipulated 中实现了大约 2 倍的改进外,在其他场景中则均实现了 4 倍的改进。

52ffaa72-e2dd-11ec-ba43-dac502259ad0.png

再是 P95。除 download_image_manipulated 和 download_large_file 外,大多数情况下都实现了 4 倍的改进。Hasura Storage 解释称,虽然没有像其他情况那样戏剧性,但这两种情况下都有实质性的改进。“这是合理的,因为下载大文件会受到 I/O NET 的约束,而处理图像则会受到 CPU 的约束。但即使如此,我们也很高兴看到这种实质性的改进。”

534e3a52-e2dd-11ec-ba43-dac502259ad0.png

此外,图像处理方面也有所改善。

在服务被重写和测试后,Hasura Storage 将服务部署到了生产环境,一些重写的好处也开始展现。如下图所示(集群的一个节点中的 RAM 使用情况),内存占用减少了近 40%。“这是一项重大改进,可以让我们在不增加整体基础设施费用的情况下为更多用户和流量提供服务。”

53dbe7c6-e2dd-11ec-ba43-dac502259ad0.png

Hasura Storage 方面表示,他们决定重写服务是为了提高性能指标;而在对两个服务进行并列基准测试后,他们也可以有底气的宣称成功地显着改善了所有指标。“我们希望能够在使用更少资源的同时满足更多请求,同时还可以改善我们用户的响应时间,我相信他们会喜欢的。”

原文标题:用Go重写Node.js服务:项目性能提升5倍,内存减少40%

文章出处:【微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11370

    浏览量

    226394
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1404

    浏览量

    121211
  • 开源
    +关注

    关注

    3

    文章

    4421

    浏览量

    46578
  • 存储服务
    +关注

    关注

    0

    文章

    20

    浏览量

    6080

原文标题:用Go重写Node.js服务:项目性能提升5倍,内存减少40%

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    是否可以重写TF 文件的内容或添加新的 TF 文件?

    我有三个 TF 文件(TF_Config_20MHz.txt、TF_Config_40MHz.txt、TF_Config_80MHz.txt)。 是否可以重写 TF 文件的内容或添加新的 TF 文件
    发表于 05-06 06:46

    OpenClaw搭建教程:云服务器一键部署完整流程

    基于Node.js运行的开源AIAgent框架,因此部署方式和很多Node.js应用类似。只要具备一台Linux云服务器,并安装Node.js环境,就可以完成OpenClaw的部署。根
    的头像 发表于 03-12 14:39 790次阅读

    大模型 ai coding 比较

    Core i7-1195G7 @ 2.90GHz (4核8线程) OS Windows 10 (win32 x64) Node.js v24.13.0 测试日期 2026-02-19 网关
    发表于 02-19 13:43

    Go 语言高并发服务设计与性能调优实战:从万级到百万级并发的演进之路

    在2026年的今天,Go 语言已成为高并发后端服务的首选语言。根据 Stack Overflow 最新开发者调查: 指标 数据 Go 语言采用率 后端服务中占比 42% 平均并发能力
    发表于 02-18 19:19

    Docker容器化部署完全指南

    我们团队从 2019 年开始全面容器化,目前线上跑着 800+ 个容器,覆盖 Java、GoNode.js、Python 四种技术栈。这篇文章把从安装到生产环境踩过的坑全部整理出来。
    的头像 发表于 02-09 14:09 717次阅读

    从零开始安装并配置开源AI编程神器OpenCode

    编程神器OpenCode吧! 一,第一步:环境准备 (Node.js & opencode 然后键入命令,“/connect",连接编程大模型供应商。 选择“Z.AI Coding Plan”,如下所示
    的头像 发表于 01-22 21:22 2096次阅读
    从零开始安装并配置开源AI编程神器OpenCode

    从0到1搭建实时日志监控系统:基于WebSocket + Elasticsearch的实战方案

    低成本、实时性高的日志监控系统。 2. 技术选型 数据存储 :Elasticsearch(高效检索与聚合) 实时推送 :WebSocket(全双工通信,避免HTTP轮询) 后端服务Node.js
    发表于 01-09 16:43

    Node-RED+Modbus_slave:JSON数据采集与阿里云服务器上传

    1.引言 1.1文档说明 本文档介绍的是使用node-red将modbus_slave模拟的485数据进行JSON数据封装后,上传到阿里云ECS私人搭建的服务器,数据通过服务器出处理后,存入到
    的头像 发表于 01-05 17:37 1065次阅读
    <b class='flag-5'>Node</b>-RED+Modbus_slave:JSON数据采集与阿里云<b class='flag-5'>服务</b>器上传

    低成本TLI4971/TLE4971电流传感器评估套件——MS2Go与S2Go

    低成本TLI4971/TLE4971电流传感器评估套件——MS2Go与S2Go 在电子工程师的日常工作中,电流传感器的评估和应用是一个重要的环节。今天我们要介绍的是英飞凌(Infineon
    的头像 发表于 12-19 16:50 1338次阅读

    探索TLE493D-P3XX-MS2GO 3D 2Go套件:开启3D磁传感器评估之旅

    探索TLE493D-P3XX-MS2GO 3D 2Go套件:开启3D磁传感器评估之旅 在电子工程师的日常工作中,评估和开发磁传感器是一项常见且重要的任务。英飞凌(Infineon
    的头像 发表于 12-18 17:15 1483次阅读

    Node-RED工业节点推荐:Modbus、PLC、OPC UA、MQTT 都能搞定!

    在工业现场,设备多、协议杂、系统分散是常态。但自从有了Node-RED,工程师只需“拖一拖”“连一连”,就能让 PLC、传感器、数据库与云端高效互通。 今天,深圳市钡铼技术有限公司 带你系统了解
    的头像 发表于 10-13 18:02 1822次阅读
    <b class='flag-5'>Node</b>-RED工业节点推荐:Modbus、PLC、OPC UA、MQTT 都能搞定!

    Node-RED太烧钱?你可能需要换个打开方式

    Node-RED作为开源可视化编程工具,确实能快速搭建物联网应用。但当你准备把它用到生产环境时,就会发现这些隐形开销:硬件成本首当其冲。工业现场需要能扛得住高温高湿、电压波动、电磁干扰的设备。普通工控机在车间里经常"闹脾气",而专业的工业服务器价格让人肉疼。
    的头像 发表于 09-05 16:12 1194次阅读
    <b class='flag-5'>Node</b>-RED太烧钱?你可能需要换个打开方式

    进迭时空 V8 RISC-V 后端优化

    前言V8是Google开发及开源的JavaScript和WebAssembly语言编译引擎,是Chromium项目的一部分,主要应用于Chrome浏览器和Node.js等项目,在浏览器生态中发
    的头像 发表于 07-31 09:02 2100次阅读
    进迭时空 V8 RISC-V 后端优化

    【M-K1HSE开发板免费体验】M-K1HSE开发板构建HELLO WORLD页面

    工程存放的位置,其他参数保持默认设置即可,点击【finish 】。 其中Node用来配置当前工程运行的Node.js版本,可选择使用已有的Node.js或下载新的Node.js版本 4
    发表于 07-15 04:31