字节高性能开源微服务 HTTP 框架--Hertz

简介

Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttpginecho 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。

如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。

架构

框架特点

  • 高易用性

    在开发过程中,快速写出来正确的代码往往是更重要的。

    因此,在 Hertz 在迭代过程中,积极听取用户意见,持续打磨框架,希望为用户提供一个更好的使用体验,帮助用户更快的写出正确的代码。

  • 高性能

    Hertz 默认使用自研的高性能网络库 Netpoll,在一些特殊场景相较于 go net,Hertz 在 QPS、时延上均具有一定优势。

    关于性能数据,可参考下图 Echo 数据。

    四个框架的对比:

    三个框架的对比:

    • 高扩展性

      Hertz 采用了分层设计,提供了较多的接口以及默认的扩展实现,用户也可以自行扩展。同时得益于框架的分层设计,框架的扩展性也会大很多。

      目前仅将稳定的能力开源给社区,更多的规划参考 RoadMap

    • 多协议支持

      Hertz 框架原生提供 HTTP1.1、ALPN 协议支持。除此之外,由于分层设计,Hertz 甚至支持自定义构建协议解析逻辑,以满足协议层扩展的任意需求。

    • 网络层切换能力

      Hertz 实现了 Netpoll 和 Golang 原生网络库 间按需切换能力,用户可以针对不同的场景选择合适的网络库,同时也支持以插件的方式为 Hertz 扩展网络库实现。

官网

快速使用

package main

import (
    "context"

    "github.com/cloudwego/hertz/pkg/app"
    "github.com/cloudwego/hertz/pkg/app/server"
    "github.com/cloudwego/hertz/pkg/common/utils"
    "github.com/cloudwego/hertz/pkg/protocol/consts"
)

func main() {
    h := server.Default()

    h.GET("/ping", func(ctx context.Context, c *app.RequestContext) {
            c.JSON(consts.StatusOK, utils.H{"message": "pong"})
    })

    h.Spin()
}
go mod tidy

运行服务

go run .

如果成功启动,你将看到以下信息:

2025/02/22 21:46:03.681131 engine.go:669: [Debug] HERTZ: Method=GET    absolutePath=/ping                     --> handlerName=main.main.func1 (num=2 handlers)
2025/02/22 21:46:03.687423 engine.go:397: [Info] HERTZ: Using network library=standard
2025/02/22 21:46:03.688459 transport.go:65: [Info] HERTZ: HTTP server listening on address=[::]:8888

然后测试

curl http://127.0.0.1:8888/ping
{"message":"pong"}
posted @ 2025-02-24 16:24  厚礼蝎  阅读(307)  评论(0)    收藏  举报