共计 3523 个字符,预计需要花费 9 分钟才能阅读完成。
明天,通过了字节跳动外部一年多的应用和迭代,高性能企业级 HTTP 框架—— Hertz,已在 CloudWeGo 正式开源啦!Hertz 曾经成为了字节跳动外部最大的 HTTP 框架,线上接入的服务数量超过 1 万,峰值 QPS 超过 4 千万,具备 高易用性 、 易扩大 、 低时延 的特点。对于字节跳动服务框架团队和 CloudWeGo 而言,Hertz 将不仅仅是一个开源我的项目,它也是一个实在的超大规模企业级实际。
我的项目地址:https://github.com/cloudwego/…
将来,字节跳动基础架构团队将以 Hertz 开源库为主进行迭代,保持内外保护一套代码,对立进行迭代演进,为用户提供更好的体验。
01 Hertz 概述
Hertz 是一个超大规模的企业级微服务 HTTP 框架,具备高易用性、易扩大、低时延等特点。最后,字节跳动外部的 HTTP 框架是对 Gin 框架的封装,具备不错的易用性、生态欠缺等长处。随着外部业务的一直倒退,对高性能、多场景的需要日渐强烈。而 Gin 是对 Golang 原生 net/http 进行的二次开发,在按需扩大和性能优化上受到很大局限。因而,为了满足业务需要,更好的服务各大业务线,2020 年初,字节跳动服务框架团队通过外部对应用场景和内部支流开源 HTTP 框架 Fasthttp、Gin、Echo 的调研后,开始基于自研网络库 Netpoll 开发外部框架 Hertz,让 Hertz 在面对企业级需要时,有更好的性能及稳定性体现,也可能满足业务倒退和应答一直演进的技术需要。2021 年 7 月,Hertz 正式上线 1.0 版本。
在经验了字节跳动外部一年多的应用后,Hertz 框架成为了字节跳动外部最大的 HTTP 框架,线上接入的服务数量超过 1 万 , 峰值 QPS 超过 4 千万。Hertz 除了业务线的同学应用外,也服务于外部很多根底组件,如:函数计算平台 FaaS、压测平台、各类网关、Service Mesh 管制面等,均收到不错的应用反馈。在如此大规模的场景下,Hertz 领有极强的稳定性和性能,bug 和 kernel case 也简直暴露无遗并进行修复。同时 Hertz 保持的内外保护一套代码,也为开源进来的 Hertz 框架提供了强有力的保障。
上面是 Hertz 的一些个性:
稳定性
Hertz 在如此大规模的场景下,每一个 PR 的合入、每一次发版都要慎之又慎,稍有不慎便可能造成千万甚至更多的损失。咱们制订了标准的 PR、发版流程,每次合入代码须要由有教训的同学审核。即便如此,为了升高危险,咱们也搭建了各种测试场景,包含兼容性、高并发、大小包等场景,每次的 PR、发版都须要测试一段时间,充沛测试,将每次发版的危险缩小到最低。
高易用性
在开发过程中,疾速写出正确的代码往往是重要的。Hertz 在设计 API 时,思考到用户的应用习惯,参考业界支流框架应用 API 的形式,并加以优化。在 Hertz 在迭代过程中,踊跃听取用户意见,继续打磨框架,比方很多用户心愿 Client 也有 Trace 的能力,为此,Hertz Client 反对了中间件能力;在代理场景中,Hertz Client 也反对了流式解决。在做中间件和流式解决设计时,也思考到用户理论应用习惯,帮忙用户更快地写出正确的代码。Hertz 也提供了命令行工具,一键生成代码,进步框架的易用性。
易扩大
Hertz 采纳了分层设计,提供了较多的接口以及默认的扩大实现,用户也能够自行扩大,详情可参考 CloudWeGo 官网的 Hertz 扩大局部。同时得益于框架的分层设计,框架的扩展性也会大很多。目前仅将稳固的能力开源给社区,更多的布局参考 RoadMap。
低延时
Hertz 默认应用自研的高性能网络库 Netpoll,在一些非凡场景中,相较于 go net,Hertz 在 QPS、时延上均具备肯定劣势。对于性能数据,可参考下图 Echo 数据。
在外部实际中,某些典型服务,如框架占比拟高的服务、网关等服务,迁徙 Hertz 后相比 Gin 框架,资源应用显著缩小,CPU 使用率随流量大小升高 30%—60%。
对于具体的性能数据,可参考:https://github.com/cloudwego/…。
命令行工具
Hertz 提供了一个简略易用的命令行工具 Hz,用户只需提供一个 IDL,依据定义好的接口信息,Hz 便能够一键生成我的项目脚手架,开箱即用应用 Hertz;Hz 也提供更新能力,用户的 IDL 如果产生扭转,Hz 能够更新脚手架。目前 Hz 反对了 Thrift 和 Protobuf 两种 IDL 定义。命令行工具内置丰盛的选项,能够依据本人的需要应用。同时它底层依赖 Protobuf 官网的编译器和自研的 Thriftgo 的编译器,两者都反对自定义的生成代码插件。如果感觉默认模板不可能满足的需要,能够自定义生成的模板。
自 Hertz 公布以来,外部反应优异。在外部,除最常见的前后端通信场景外,还波及网关、上传、下载、代理等场景;所用到的交互模式除 ping-pong 外,还有 streaming、chunk 等;应用的协定除 HTTP1 外,还有 HTTP2、Websocket 等。这些简单的交互场景和交互模式都对 Hertz 的 Server 和 Client 的可用性和稳定性提出了不小的挑战。为此,Hertz 疾速响应用户需要;搭建稳定性测试服务尽可能模仿线上实在简单场景;较高的单测覆盖率保障代码逻辑失常。
02 内外版本保护
字节跳动外部有着欠缺的微服务体系,团队非常重视开源建设和承诺,Hertz 和 CloudWeGo 中的开源我的项目 Kitex 雷同,放弃内外统一 ,我的项目的外围能力均迁徙至开源库中,在外部仅封装一层壳帮忙企业内无感降级,以保障对开源长期保护的承诺,并且 所有开源个性,都会在外部的稳定性验证后才会开源进去。后续,团队将继续以 Hertz 开源库为主进行迭代,及时响应社区需要与问题,为用户提供更好的体验和应用保障。
对于 Hertz 的开发者来说,Hertz 同样反对对框架进行灵便的扩大,以适应业务需要。咱们也欢送内部的开发者将本人的奉献提交到社区当中,在社区进行开源共建,独特打造一款有着欠缺生态、极致性能和高易用性的 HTTP 框架。
03 RoadMap
对于基础架构团队而言,Hertz 不仅仅是一个开源我的项目,它也是一个 实在的超大规模企业级实际我的项目。通过开源,咱们心愿 Hertz 能丰盛云原生社区的 Golang 中间件体系,欠缺 CloudWeGo 生态矩阵,为更多开发者和企业搭建云原生化的大规模分布式系统,提供一种古代的、资源高效的的技术计划。
如前文所述,目前 Hertz 只开源了外部通过稳定性验证的局部,将来,咱们会进一步推动其走向欠缺:
- 云原生能力反对。反对 xDS API,从 Istio 动静获取服务配置。
- 多协定的反对。Hertz 目前只开源了 HTTP1 的局部,将来咱们还会开源其余协定,如:HTTP2、Websocket、ALPN 等,为开发者提供更多场景的微服务需要反对。如果有需要也能够提交 issue 通知咱们,让咱们晓得您的需要以便疾速反对。
- 更好用的命令行工具。咱们将持续迭代 Hz,继续集成各种罕用的中间件,提供模块化构建能力,用户能够按需抉择所需组件。
- 更欠缺的生态反对。因为 Hertz 没有采纳 go net 的数据结构,须要更多的生态反对。第一批开源咱们只开源了 CORS、Trace、Metrics 等生态。将来咱们还将反对包含反向代理、Session 等生态。
- 联合内外部用户需要,继续迭代。我的项目开源后,咱们也会依据开发者需要发展迭代。
欢送大家向 Hertz 提交 issue 和 PR 共建 Hertz。
咱们诚心期待更多的开发者退出,也期待 Hertz 助力越来越多的企业疾速构建云原生架构。咱们也真挚欢送企业用户迁徙应用,咱们会提供专项技术支持和交换,欢送入群征询。
04 相干链接
我的项目地址:https://github.com/cloudwego/…
我的项目官网:https://www.cloudwego.io
扫描左侧二维码退出 飞书社群 ,扫描右侧二维码退出 微信社群。
05 老手工作
Hertz 开源后,为了给对 Hertz 感兴趣的同学提供一个参加奉献的机会,咱们也筹备了一系列老手工作。
支付工作地址:
https://github.com/cloudwego/…
我的项目地址
GitHub:https://github.com/cloudwego
官网:www.cloudwego.io
流动预报
6 月 25 日,CloudWeGo & 稀土掘金 Meetup 直播流动行将开始,邀请到来自字节跳动、森马电商和华兴证券的资深开发者,向社区分享 CloudWeGo 的最新企业落地实际。预约流动可领周边大礼!
流动预约链接:https://mp.weixin.qq.com/s/D9…