0


24 年最快的 REST API Web 服务器:Node.js、Go、Rust 和 C# (.NET) 基准测试

随着我们进入 2024 年,Web 开发领域继续以惊人的速度发展。对于编写高性能 REST API 的开发人员来说,选择正确的技术堆栈不仅重要,而且至关重要。今天,我们将深入探讨主导市场的四个强大选项:Node.js、Go、Rust 和 C# (.NET)。

a36b9bb3da9a499f705b85b6cf67205d.png

1

设置阶段:我们的基准方法

在讨论结果之前,我们先来了解一下背景。我们的基准测试是在严格控制的环境中进行的,以确保公平竞争:

  • 🖥️ 硬件:AWS c6g.4xlarge 实例(16 个 vCPU,32 GB RAM)
  • 🐧 操作系统:Ubuntu 22.04 LTS
  • 🌐 网络:10 Gbps
  • 🔧 测试工具:wrk2,用于一致的请求速率和精确的延迟测量
  • ⏱️ 测试时长:每个场景 5 分钟

我们通过三个真实场景对每个竞争者进行测试:

  • 经典的“Hello, World!” JSON 响应
  • 数据库读取,获取一行
  • 复杂的 JSON 处理来模拟繁重的工作负载

我们并没有就此止步。每个场景都在三个压力水平下进行了测试:100、1000 和 5000 个并发连接。这就是我们所说的压力测试!

2

竞争者

让我们快速看一下每个竞争者如何实现一个简单的“Hello, World!” JSON 响应:

2.1

Node.js(带有 Express 的 v20.x)

const express = require('express');
const app = express();
app.get('/hello', (req, res) => {
  res.json({ message: 'Hello, World!' });
});
app.listen(3000);

2.2

Go(v1.21.x)

package main
import (
    "encoding/json"
    "net/http"
)
func main() {
    http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
        json.NewEncoder(w).Encode(map[string]string{"message": "Hello, World!"})
    })
    http.ListenAndServe(":3000", nil)
}

2.3

Rust(使用 Actix-web v4.x)

use actix_web::{web, App, HttpServer, Responder};
async fn hello() -> impl Responder {
    web::Json(serde_json::json!({"message": "Hello, World!"}))
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new().service(web::resource("/hello").to(hello))
    })
    .bind("127.0.0.1:3000")?
    .run()
    .await
}

2.4

C# (.NET 8)

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/hello", () => Results.Json(new { message = "Hello, World!" }));
app.Run();

3

结果

现在,就是大家期盼已久的时刻了。让我们深入了解一下基准测试结果:

3.1

场景 1:“Hello, World!” JSON 响应

| Framework | 100 Conn (req/s) | 1000 Conn (req/s) | 5000 Conn (req/s) | Avg Latency (ms) |
|-----------|------------------|-------------------|-------------------|------------------|
| Node.js   | 42,000           | 68,000            | 72,000            | 3.2              |
| Go        | 78,000           | 125,000           | 132,000           | 1.8              |
| Rust      | 95,000           | 158,000           | 165,000           | 1.5              |
| C# (.NET) | 68,000           | 110,000           | 118,000           | 2.1              |

3.2

场景 2:数据库读取(单行提取)

| Framework | 100 Conn (req/s) | 1000 Conn (req/s) | 5000 Conn (req/s) | Avg Latency (ms) |
|-----------|------------------|-------------------|-------------------|------------------|
| Node.js   | 15,000           | 22,000            | 24,000            | 8.5              |
| Go        | 28,000           | 42,000            | 45,000            | 4.8              |
| Rust      | 32,000           | 48,000            | 52,000            | 4.2              |
| C# (.NET) | 25,000           | 38,000            | 41,000            | 5.5              |

3.3

场景 3:复杂的 JSON 处理

| Framework | 100 Conn (req/s) | 1000 Conn (req/s) | 5000 Conn (req/s) | Avg Latency (ms) |
|-----------|------------------|-------------------|-------------------|------------------|
| Node.js   | 8,000            | 12,000            | 13,000            | 15.8             |
| Go        | 18,000           | 28,000            | 30,000            | 7.2              |
| Rust      | 22,000           | 34,000            | 36,000            | 6.1              |
| C# (.NET) | 16,000           | 25,000            | 27,000            | 8.4              |

4

分析结果

这些数字讲述了一个引人入胜的故事,但它们对作为开发人员的您来说真正意味着什么?让我们来分析一下:

🚀原始速度:Rust 是这里无可争议的冠军,在每种情况下都远远超过竞争对手。它就像 Web 服务器中的跑车 — 造型时尚、功能强大、速度极快。

📈扩大规模:当我们增加并发连接数时,所有竞争对手都表明他们可以应对高温。但 Rust 和 Go 呢?他们不仅能应对,而且在压力下茁壮成长。

⏱️延迟问题:说到保持速度,Rust 再次夺冠,Go 紧随其后。Node.js 虽然仍然非常快,但在更重的负载下开始感到压力。

🛠️开发人员体验:事情从这里开始变得有趣。Node.js 就像您最喜欢的牛仔裤一样 — 舒适、熟悉且随时可用。Go 在性能和易用性之间取得了良好的平衡。Rust?这就像学习驾驶喷气式飞机 — 一开始很难,但一旦掌握它就会变得非常强大。C# 和 .NET 提供了许多开发人员喜爱的强大、功能齐全的体验。

🎯最适合场景:

  • Node.js 在 I/O 密集型应用程序中大放异彩,并且当您需要在昨天启动并运行原型时也是如此。
  • 当您需要与机器对话时,Go 是您实现微服务的首选。
  • Rust 是完美主义者的梦想 —— 当每一毫秒和每个字节都很重要时,它是理想的选择。
  • C# (.NET) 是万事通,无论是在初创企业还是在大型企业环境中都同样适用。

5

判决结果

那么,您应该选择哪一个?嗯,这取决于您和您的项目。以下是快速指南:

  • 如果您追求的是极快的速度和效率:Rust 正在呼唤您。
  • 想要在性能和开发速度之间取得良好的平衡吗?Go 是你最好的新朋友。
  • 需要快速构建并更快地迭代?坚持使用 Node.js。
  • 您是否正在寻找能够与现有 .NET 基础架构良好兼容的强大工具?C# 就是您的不二之选。

请记住,这些基准测试仅供参考。您的里程可能会因您的具体用例、架构以及您对应用程序的微调方式而异。最好的建议是什么?运行您自己的基准测试,尽可能接近您的生产环境。

推荐

A Big Picture of Kubernetes

Kubernetes入门培训(内含PPT)更多内容


原创不易,随手关注或者”在看“,诚挚感谢!


本文转载自: https://blog.csdn.net/u012516914/article/details/141910905
版权归原作者 Spring_java_gg 所有, 如有侵权,请联系我们删除。

“24 年最快的 REST API Web 服务器:Node.js、Go、Rust 和 C# (.NET) 基准测试”的评论:

还没有评论