4

Quarkus(Java)与Gin(Go)性能比拼

 8 months ago
source link: https://www.jdon.com/71116.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Quarkus(Java)与Gin(Go)性能比拼 - 极道

在下面的文章中,我们将探讨两种常用框架的性能评估:在 Go 上运行的 Gin 和在 Java 上运行的 Quarkus。Gin 在 Go 社区中非常受欢迎,而 Quarkus 的创建是为了让 Java 开发人员能够为现代的云原生世界创建应用程序。需要强调的是,这种比较分析的重点是框架本身,而忽略了底层的编程语言。

Go Gin
Go Gin 是一个用于构建 Web 应用程序的轻量级的 Go 语言框架。它基于 HTTP 的路由器和中间件的概念,使得开发者能够快速地构建高性能的 Web 服务。Go Gin 设计简单,性能优越,适用于构建 RESTful API 和 Web 应用。

以下是 Go Gin 框架的一些主要特点和优势:

  1. 轻量级: Go Gin 设计简洁,代码量相对较小,使得应用程序更加轻便。
  2. 高性能: 框架的设计追求高性能,通过有效地利用 Go 语言的特性,提供了快速的路由和中间件处理。
  3. HTTP 路由: 支持灵活的路由定义,可以方便地处理各种 HTTP 请求,包括 GET、POST、PUT、DELETE 等。
  4. 中间件支持: 中间件是 Go Gin 框架的核心概念,可以通过中间件实现各种功能,例如日志记录、认证、授权等。
  5. JSON 支持: 内置了对 JSON 的支持,便于处理 RESTful API 请求和响应。
  6. 模板引擎: 提供了支持 HTML 模板的功能,方便构建 Web 页面。
  7. 支持 WebSocket: Go Gin 支持 WebSocket,可以用于构建实时应用程序。

go Gin测试代码

package main 

import
  "net/http" 
  "github.com/gin-gonic/gin"
 ) 

func  main () { 
  r := gin.New() 

r.GET( "/" , func (c *gin.Context) { 
    c.String(http.StatusOK, "Hello world!" ) 
  }) 

r.Run( ":3000" ) 
}

Java Quarkus
Quarkus旨在成为Java应用程序的高性能框架。它使用诸如提前编译(AOT)和本机镜像生成等技术,以实现快速启动时间和较低的内存消耗。

以下是 Quarkus 的一些主要特点和优势:

  1. 快速启动时间: Quarkus 采用了一系列技术,如静态编译、AOT(Ahead of Time)编译和优化的垃圾回收,以实现极快的应用程序启动时间。这使得 Quarkus 特别适合云原生场景,其中快速启动对于弹性和伸缩性至关重要。
  2. 低内存消耗: Quarkus 针对云环境和容器化应用程序进行了优化,通过减少内存占用来提高效率。这有助于在资源有限的环境中更有效地运行多个应用程序实例。
  3. 微服务支持: Quarkus 提供了对微服务架构的良好支持,包括构建和部署微服务、使用 REST 和 GraphQL 构建 API 等功能。
  4. 容器友好: Quarkus 的设计考虑了容器化部署,支持 Docker 和 Kubernetes 等容器编排工具,简化了在容器环境中的部署和管理。
  5. 多种构建工具支持: Quarkus 提供了对 Maven 和 Gradle 等主流构建工具的支持,使开发者可以使用他们熟悉的构建工具。
  6. 扩展模型: Quarkus 引入了一个扩展模型,使得开发者能够轻松地添加和配置依赖。这些扩展包括数据库连接、消息队列、安全性等,以满足各种应用程序的需求。
  7. Java 标准兼容: Quarkus 是构建在 Java 标准上的,因此与 Java 生态系统的现有技术和库兼容。开发者可以在 Quarkus 中使用他们喜欢的 Java 框架和库。
package org.acme;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import io.smallrye.common.annotation.NonBlocking;

@Path("/")
public class HelloWorldApplication {

@GET
    @NonBlocking
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello World!";
    }
}

性能测试结果
所有测试均在配备 16G 内存的 MacBook Pro M2 上进行。在负载测试中,我们使用了 Bombardier 测试工具。软件版本如下

  • Go v1.21.3
  • Quarkus 3.5.1(Java v21)

所有测试均使用 50、100 和 300 个并发连接执行了 1 千万次请求。

  • 在速度方面,Quarkus(Java)超过了 Gin(Go),这可能令人惊讶,因为 Java 虚拟机(JVM)的性能比机器代码更快。
  • 在资源利用方面,Gin 的 CPU 使用率较高。
  • 不过,值得注意的是,Quarkus 的内存消耗明显高于 Gin。

在最大延迟方面,Quarkus要差于 Gin五倍左右,并发50时,要慢10倍。

详细点击标题


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK