English | 中文
Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势,并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。
-
高易用性
在开发过程中,快速写出来正确的代码往往是更重要的。因此,在 Hertz 在迭代过程中,积极听取用户意见,持续打磨框架,希望为用户提供一个更好的使用体验,帮助用户更快的写出正确的代码。
-
高性能
Hertz 默认使用自研的高性能网络库 Netpoll,在一些特殊场景相较于 go net,Hertz 在 QPS、时延上均具有一定优势。关于性能数据,可参考下图 Echo 数据。
四个框架的对比: 三个框架的对比: 关于详细的性能数据,可参考 hertz-benchmark。
-
高扩展性
Hertz 采用了分层设计,提供了较多的接口以及默认的扩展实现,用户也可以自行扩展。同时得益于框架的分层设计,框架的扩展性也会大很多。目前仅将稳定的能力开源给社区,更多的规划参考 RoadMap。
-
多协议支持
Hertz 框架原生提供 HTTP/1.1、HTTP/2、HTTP/3 及 ALPN 协议支持。除此之外,由于分层设计,Hertz 甚至支持自定义构建协议解析逻辑,以满足协议层扩展的任意需求。
-
网络层切换能力
Hertz 实现了 Netpoll 和 Golang 原生网络库 间按需切换能力,用户可以针对不同的场景选择合适的网络库,同时也支持以插件的方式为 Hertz 扩展网络库实现。
Hertz-Examples 仓库提供了开箱即用的代码,详见。
包含通用中间件的介绍和使用,上下文选择,数据绑定,数据渲染,直连访问,日志,错误处理,详见文档
包含日志,链路追踪,埋点,监控,OpenTelemetry 集成,详见文档
包含服务注册与发现扩展,Sentinel 集成,详见文档
包含网络库扩展,详见文档
apidoc、框架可配置项一览,详见文档
常见问题排查,详见文档
性能测试只能提供相对参考,工业场景下,有诸多因素可以影响实际的性能表现 我们提供了 hertz-benchmark 项目用来长期追踪和比较 Hertz 与其他框架在不同情况下的性能数据以供参考
- Netpoll: 自研高性能网络库,Hertz 默认集成
- hertz-Contrib: Hertz 扩展仓库,提供可观测、安全、流量治理、协议、HTTP 通用能力等扩展
- Example: Hertz 使用例子
拓展 | 描述 |
---|---|
Autotls | 为 Hertz 支持 Let's Encrypt 。 |
Http2 | 提供对 HTTP2 的支持。 |
Websocket | 使 Hertz 支持 Websocket 协议。 |
Etag | 提供 ETag HTTP 响应标头。 |
Limiter | 提供了基于 bbr 算法的限流器。 |
Monitor-prometheus | 提供基于 Prometheus 服务监控功能。 |
Obs-opentelemetry | Hertz 的 Opentelemetry 扩展,支持 Metric、Logger、Tracing 并且达到开箱即用。 |
Opensergo | Opensergo 扩展。 |
Pprof | Hertz 集成 Pprof 的扩展。 |
Registry | 提供服务注册与发现功能。到现在为止,支持的服务发现拓展有 nacos, consul, etcd, eureka, polaris, servicecomb, zookeeper, redis。 |
Sentry | Sentry 拓展提供了一些统一的接口来帮助用户进行实时的错误监控。 |
Tracer | 基于 Opentracing 的链路追踪。 |
Basicauth | Basicauth 中间件能够提供 HTTP 基本身份验证。 |
Jwt | Jwt 拓展。 |
Keyauth | 提供基于 token 的身份验证。 |
Requestid | 在 response 中添加 request id。 |
Sessions | 具有多状态存储支持的 Session 中间件。 |
Casbin | 通过 Casbin 支持各种访问控制模型。 |
Cors | 提供跨域资源共享支持。 |
Csrf | Csrf 中间件用于防止跨站点请求伪造攻击。 |
Secure | 具有多配置项的 Secure 中间件。 |
Gzip | 含多个可选项的 Gzip 拓展。 |
I18n | 可帮助将 Hertz 程序翻译成多种语言。 |
Lark | 在 Hertz 中处理 Lark/飞书的卡片消息和事件的回调。 |
Loadbalance | 提供适用于 Hertz 的负载均衡算法。 |
Logger | Hertz 的日志拓展,提供了对 zap、logrus、zerologs 日志框架的支持。 |
Recovery | Hertz 的异常恢复中间件。 |
Reverseproxy | 实现反向代理。 |
Swagger | 使用 Swagger 2.0 自动生成 RESTful API 文档。 |
Cache | 用于缓存 HTTP 接口内容的 Hertz 中间件,支持多种客户端。 |
- 字节跳动在 Go 网络库上的实践
- 超大规模的企业级微服务 HTTP 框架 — Hertz 正式开源!
- 字节跳动开源 Go HTTP 框架 Hertz 设计实践
- 助力字节降本增效,大规模企业级 HTTP 框架 Hertz 设计实践
- HTTP 框架 Hertz 实践入门:性能测试指南
Hertz 基于Apache License 2.0 许可证,其依赖的三方组件的开源许可见 Licenses。
-
Email: [email protected]
-
如何成为 member: COMMUNITY MEMBERSHIP
-
Issues: Issues
-
Slack: 加入我们的 Slack 频道
-
飞书用户群(注册飞书进群)
感谢您对 Hertz 作出的贡献!
CloudWeGo 丰富了 CNCF 云原生生态。