Hertz

English | 中文

Release WebSite License Go Report Card OpenIssue ClosedIssue Stars Forks

Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势,并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。

框架特点

  • 高易用性

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

  • 高性能

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

    四个框架的对比: Performance 三个框架的对比: Performance 关于详细的性能数据,可参考 hertz-benchmark。

  • 高扩展性

    Hertz 采用了分层设计,提供了较多的接口以及默认的扩展实现,用户也可以自行扩展。同时得益于框架的分层设计,框架的扩展性也会大很多。目前仅将稳定的能力开源给社区,更多的规划参考 RoadMap。

  • 多协议支持

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

  • 网络层切换能力

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

详细文档

Example

Hertz-Examples 仓库提供了开箱即用的代码,详见。

用户指南

基本特性

包含通用中间件的介绍和使用,上下文选择,数据绑定,数据渲染,直连访问,日志,错误处理,详见文档

治理特性

包含 trace monitor,详见文档

框架扩展

包含网络库扩展,详见文档

参考

apidoc、框架可配置项一览,详见文档

FAQ

常见问题排查,详见文档

框架性能

性能测试只能提供相对参考,工业场景下,有诸多因素可以影响实际的性能表现 我们提供了 hertz-benchmark 项目用来长期追踪和比较 Hertz 与其他框架在不同情况下的性能数据以供参考

相关项目

相关拓展

拓展 描述
为 Hertz 支持 Let's Encrypt 。
提供对 HTTP2 的支持。
使 Hertz 支持 Websocket 协议。
提供 ETag HTTP 响应标头。
提供了基于 bbr 算法的限流器。
提供基于 Prometheus 服务监控功能。
Hertz 的 Opentelemetry 扩展,支持 Metric、Logger、Tracing 并且达到开箱即用。
Opensergo 扩展。
Hertz 集成 Pprof 的扩展。
提供服务注册与发现功能。到现在为止,支持的服务发现拓展有 nacos, consul, etcd, eureka, polaris, servicecomb, zookeeper, redis。
Sentry 拓展提供了一些统一的接口来帮助用户进行实时的错误监控。
基于 Opentracing 的链路追踪。
Basicauth 中间件能够提供 HTTP 基本身份验证。
Jwt 拓展。
提供基于 token 的身份验证。
在 response 中添加 request id。
具有多状态存储支持的 Session 中间件。
通过 Casbin 支持各种访问控制模型。
提供跨域资源共享支持。
Csrf 中间件用于防止跨站点请求伪造攻击。
具有多配置项的 Secure 中间件。
含多个可选项的 Gzip 拓展。
可帮助将 Hertz 程序翻译成多种语言。
在 Hertz 中处理 Lark/飞书的卡片消息和事件的回调。
提供适用于 Hertz 的负载均衡算法。
Hertz 的日志拓展,提供了对 zap、logrus、zerologs 日志框架的支持。
Hertz 的异常恢复中间件。
实现反向代理。
使用 Swagger 2.0 自动生成 RESTful API 文档。
用于缓存 HTTP 接口内容的 Hertz 中间件,支持多种客户端。

贡献代码

RoadMap

开源许可

Hertz 基于Apache License 2.0 许可证,其依赖的三方组件的开源许可见 Licenses。

联系我们

  • 如何成为 member: COMMUNITY MEMBERSHIP

  • Issues: Issues

  • Slack: 加入我们的 Slack 频道

  • 飞书用户群(注册飞书进群)

    LarkGroup

  • WechatGroup

贡献者

感谢您对 Hertz 作出的贡献!

Contributors

Landscapes

  

CloudWeGo 丰富了 CNCF 云原生生态。