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

    文章

    11216

    浏览量

    222914
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1398

    浏览量

    119817
  • 开源
    +关注

    关注

    3

    文章

    4031

    浏览量

    45562
  • 存储服务
    +关注

    关注

    0

    文章

    20

    浏览量

    6054

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

    HarmonyOS5云服务技术分享--云缓存快速上手指南

    Redis@2024) 二、实战代码:Node.js篇 通过ioredis库连接云缓存,只需三步: const Redis = require(\'ioredis\'); const redisClient
    发表于 05-22 18:37

    HarmonyOS5云服务技术分享--ArkTS开发函数

    等打包 ✅ 支持Node.js 14.x/18.x和Java 1.8 ✅ 支持HTTP触发器调用 ✅ 持续开发调试一条龙 ?️ 准备工作: 安装AGCLI工具(华为应用分发服务命令行工具) 准备测试
    发表于 05-22 17:29

    HarmonyOS5云服务技术分享--ArkTS开发Node环境

    ✨ 你好呀,开发者小伙伴们!今天我们来聊聊如何在HarmonyOS(ArkTS API 9及以上)中玩转云函数,特别是结合Node.js和HTTP触发器的开发技巧。文章会手把手带你从零开始,用最接地
    发表于 05-22 17:21

    HarmonyOS5云服务技术分享--云函数创建配置指南

    。HarmonyOS的AGC平台提供灵活配置,支持Node.js、Python、Java等多种语言,还能自定义运行环境哦! ?️ 二、手把手创建第一个云函数 ​​Step 1:进入云函数控制台​​ 登录
    发表于 05-22 17:08

    keithley 2600系列labiew vi中配置测量功能中的node in 和node out具体功能是什么?

    图中的node in和node out的具体作用是什么呢?新手刚刚接触labview和源表,不太明白其具体功能
    发表于 05-12 10:11

    KaihongOS操作系统:开发环境搭建

    ”。 步骤 2选择 Do not import settings,点击 OK。 步骤 3安装 Node.js 与 ohpm。可以指定本地已安装的 Node.js 或 ohpm 路径位置;如果本地 没有合适
    发表于 04-23 07:27

    AIWA JS215维修手册

    电子发烧友网站提供《AIWA JS215维修手册.pdf》资料免费下载
    发表于 04-01 16:44 3次下载

    【教程】Node-RED中Chirpstack节点使用指南

    在物联网应用开发中,LoRaWAN技术因其低功耗、远距离传输等特点而备受关注。Chirpstack作为最流行的LoRaWAN服务器之一,与Node-RED的集成为我们提供了强大的物联网应用开发能力
    的头像 发表于 03-27 19:33 995次阅读
    【教程】<b class='flag-5'>Node</b>-RED中Chirpstack节点使用指南

    在树莓派上构建和部署 Node.js 项目

    探索在RaspberryPi上构建和部署Node.js项目的最佳实践。通过我们的专业提示和技巧,克服常见挑战,使您的项目顺利运行。去年圣诞节,我收到了一份极其令人着迷的礼物,它占据了我许多周末的时间
    的头像 发表于 03-25 09:44 510次阅读
    在树莓派上构建和部署 <b class='flag-5'>Node.js</b> 项目

    仅仅使用代码,就能点亮树莓派的 GPIO 世界

    RaspberryPi的一个流行应用是构建Web服务器。为此,我们可以使用不同的技术,如Python、Node.JS甚至PHP。由于RaspberryPi的绝大多数脚本都是用Python编写的,因此
    的头像 发表于 03-25 09:31 486次阅读
    仅仅使用代码,就能点亮树莓派的 GPIO 世界

    【干货】什么是Node-RED?一文带你了解!

    一什么是Node-RED?首先我们来认识一下什么是Node-RED。Node-RED是一个基于Node.js的开源可视化编程工具,于2013年由IBM公司推出。它可以通过浏览器的图形化
    的头像 发表于 03-13 19:32 1511次阅读
    【干货】什么是<b class='flag-5'>Node</b>-RED?一文带你了解!

    Bun 1.2震撼发布:全力挑战Node.js生态的JavaScript运行时新星

    了与 Node.js 的兼容性,还为开发者带来了内置的数据库支持和云服务集成能力,进一步强化了其“全能工具包”的定位。Node.js 兼容性获得突破性进展在此次更新中,最引人注目的是 Bun 在
    的头像 发表于 01-24 10:42 1321次阅读
    Bun 1.2震撼发布:全力挑战<b class='flag-5'>Node.js</b>生态的JavaScript运行时新星

    AWTK-WEB 快速入门(4) - JS Http 应用程序

    导读XMLHttpRequest改变了Web应用程序与服务器交换数据的方式,fetch是其继任者。本文介绍一下如何使用JS语言开发AWTK-WEB应用程序,并用fetch访问远程数据。用AWTKDesigner新建一个应用程
    的头像 发表于 01-22 11:31 726次阅读
    AWTK-WEB 快速入门(4) - <b class='flag-5'>JS</b> Http 应用程序