Hertz
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和Go Net之间切换的功能。用户可以为不同场景选择合适的网络库。同时,Hertz还支持以插件形式扩展网络库。
文档
入门指南
示例
Hertz-Examples仓库提供开箱即用的代码。更多
基本特性
包含常用中间件、上下文选择、数据绑定、数据渲染、直接访问、日志记录、错误处理的介绍和使用。更多
可观测性
包含检测、日志记录、追踪、监控、OpenTelemetry集成。更多
服务治理
包含服务注册与发现扩展、Sentinel集成。更多
框架扩展
包含网络库扩展。更多
参考
API文档、框架可配置项列表。更多
常见问题
常见问题解答。更多
性能
性能测试只能提供相对参考。在生产环境中,有许多因素会影响实际性能。 我们提供了hertz-benchmark项目,用于跟踪和比较Hertz与其他框架在不同情况下的性能,供参考。
相关项目
- Netpoll:一个高性能网络库。Hertz默认集成。
- Hertz-contrib:Hertz的部分扩展库,用户可以根据需要通过选项集成到Hertz中。
- Example:Hertz的使用示例。
扩展
扩展 | 描述 |
---|---|
Autotls | 让 Hertz 支持 Let's Encrypt。 |
Http2 | 为 Hertz 提供 HTTP2 支持。 |
Websocket | 使 Hertz 支持 Websocket 协议。 |
Etag | 为 Hertz 提供 ETag(或实体标签)HTTP 响应头支持。 |
Limiter | 提供基于 BBR 算法的限流器。 |
Monitor-prometheus | 提供基于 Prometheus 的服务监控。 |
Obs-opentelemetry | Hertz 的 Opentelemetry 扩展,支持指标、日志、追踪,开箱即用。 |
Opensergo | Opensergo 扩展。 |
Pprof | Hertz 集成 Pprof 的扩展。 |
Registry | 提供服务注册和发现功能。目前支持的服务发现扩展有 nacos、consul、etcd、eureka、polaris、servicecomb、zookeeper、redis。 |
Sentry | Sentry 扩展提供一些统一接口,帮助用户进行实时错误监控。 |
Tracer | 基于 Opentracing 的链路追踪。 |
Basicauth | Basicauth 中间件可提供 HTTP 基本认证。 |
Jwt | JWT 扩展。 |
Keyauth | 提供基于令牌的身份验证。 |
Requestid | 在响应中添加请求 ID。 |
Sessions | 支持多状态存储的会话中间件。 |
Casbin | 通过 Casbin 支持各种访问控制模型。 |
Cors | 提供跨域资源共享支持。 |
Csrf | Csrf 中间件用于防止跨站请求伪造攻击。 |
Secure | 具有多个配置项的安全中间件。 |
Gzip | 具有多个选项的 Gzip 扩展。 |
I18n | 帮助将 Hertz 程序翻译成多种编程语言。 |
Lark | 使用 Hertz 处理飞书卡片消息和事件回调。 |
Loadbalance | 为 Hertz 提供负载均衡算法。 |
Logger | Hertz 的日志扩展,提供对 zap、logrus、zerologs 日志框架的支持。 |
Recovery | Hertz 的恢复中间件。 |
Reverseproxy | 实现反向代理。 |
Swagger | 使用 Swagger 2.0 自动生成 RESTful API 文档。 |
Cache | Hertz 中间件,用于缓存 HTTP 响应,支持多种后端。 |
博客
- 字节跳动在 Go 网络库上的实践
- 超大规模的企业级微服务 HTTP 框架 — Hertz 正式开源!
- 字节跳动开源 Go HTTP 框架 Hertz 设计实践
- 助力字节降本增效,大规模企业级 HTTP 框架 Hertz 设计实践
- HTTP 框架 Hertz 实践入门:性能测试指南
贡献
路线图
许可证
Hertz 根据 Apache License 2.0 进行分发。Hertz 第三方依赖的许可证在这里说明。
社区
- 邮箱:conduct@cloudwego.io
- 如何成为会员:社区成员
- 问题:Issues
- Slack:加入我们的 CloudWeGo 社区 Slack 频道。
- Lark:使用 Lark 扫描下方二维码加入我们的 CloudWeGo/hertz 用户群。
贡献者
感谢您对 Hertz 的贡献!
生态系统
CloudWeGo 丰富了 CNCF 云原生全景图。