字节跳动 Golang 微服务 HTTP 框架 Hertz

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

最近在研究字节、哔哩哔哩等开源技术的Golang框架,发现字节开源的Golang 微服务 HTTP 框架Hertz,用起来相对舒服很多。

为什么选择 Hertz

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

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

架构设计架构设计

同时,也对Hertz做了高性能方面的对比

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

四个框架的对比

三个框架的对比:三个框架的对比:

框架特点

高易用性

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

高性能

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

高扩展性

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

多协议支持

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

网络层切换能力

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

Hertz

官网地址:https://www.cloudwego.io/zh/docs/hertz/

图片图片

官方介绍:

Hertz [həːts] 是一个 Golang 微服务 HTTP 框架,具有高易用性、高性能、高扩展性等特点。

demo演示

  1. 准备 Golang 开发环境
  2. 如果您之前未搭建 Golang 开发环境,可以参考 Golang 安装。推荐使用最新版本的 Golang,或保证现有 Golang 版本 >= 1.16。小于 1.16 版本,可以自行尝试使用但不保障兼容性和稳定性。
  3. 确保打开 go mod 支持 (Golang >= 1.15 时,默认开启)。
  4. 完成安装后,你可能需要设置一下国内代理:go env -w GOPROXY=https://goproxy.cn。

目前,Hertz 支持 Linux、macOS、Windows 系统。

快速开发实践

在完成环境准备后,可以按照如下操作快速启动 Hertz Server:

  1. 在当前目录下创建 hertz_demo 文件夹,进入该目录中。
  2. 创建 main.go 文件。
  3. 在 main.go 文件中添加以下代码。
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()
}

图片图片

  1. 生成 go.mod 文件。
go mod init hertz_demo
  1. 整理 & 拉取依赖。
go mod tidy
  1. 运行示例代码。
go run hertz_demo

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

PS D:\wx_vagrant\www\cloudwego\hertz\hertz_demo> go run hertz_demo
2024/11/07 10:01:48.832771 engine.go:669: [Debug] HERTZ: Method=GET    absolutePath=/ping                     --> handlerName=main.main.func1 (num=2 handlers)
2024/11/07 10:01:48.849373 engine.go:397: [Info] HERTZ: Using network library=standard
2024/11/07 10:01:48.852301 transport.go:65: [Info] HERTZ: HTTP server listening on address=[::]:8888

接下来,我们可以对接口进行测试:

curl http://127.0.0.1:8888/ping

如果不出意外,我们可以看到类似如下输出:

{"message":"pong"}

图片图片

参考链接:https://www.cloudwego.io/zh/docs/hertz

责任编辑:武晓燕 来源: 程序员千羽
相关推荐

2024-11-13 11:02:03

微服务框架项目

2024-11-08 13:04:08

项目Hertz接口

2022-06-22 06:49:39

Hertz开源HTTP 框架

2022-10-14 14:44:04

字节跳动ByteTechHTTP 框架

2022-05-17 17:18:40

Kite字节跳动微服务框架

2021-09-09 09:05:30

开源字节跳动CloudWeGo

2022-11-24 09:01:26

HTTPHertz架构

2024-08-20 09:59:22

2022-08-25 18:48:29

字节跳动CSS开源

2023-04-19 16:51:54

分布式Primus开源

2018-12-17 16:39:20

Golang微服务

2018-12-17 16:44:49

Golang微服务

2018-12-17 16:48:05

Golang微服务

2024-09-25 15:57:56

2019-05-21 14:01:17

RPC框架Http

2023-10-18 11:56:17

开源AI

2021-01-29 10:33:34

存储

2024-11-26 19:29:35

2021-09-17 13:05:55

模型人工智能框架

2022-03-21 17:56:59

大模型训练训练框架
点赞
收藏

51CTO技术栈公众号