HertzGolang 微服務(wù) HTTP 框架
Hertz[h??ts] 是字節(jié)跳動開源的一個 Golang 微服務(wù) HTTP 框架,在設(shè)計(jì)之初參考了其他開源框架 fasthttp、gin、echo 的優(yōu)勢, 并結(jié)合字節(jié)跳動內(nèi)部的需求,使其具有高易用性、高性能、高擴(kuò)展性等特點(diǎn),目前在字節(jié)跳動內(nèi)部已廣泛使用。 如今越來越多的微服務(wù)選擇使用 Golang,如果對微服務(wù)性能有要求,又希望框架能夠充分滿足內(nèi)部的可定制化需求,Hertz 會是一個不錯的選擇。
框架特點(diǎn)
-
高易用性
在開發(fā)過程中,快速寫出來正確的代碼往往是更重要的。因此,在 Hertz 在迭代過程中,積極聽取用戶意見,持續(xù)打磨框架,希望為用戶提供一個更好的使用體驗(yàn),幫助用戶更快的寫出正確的代碼。
-
高性能
Hertz 默認(rèn)使用自研的高性能網(wǎng)絡(luò)庫 Netpoll,在一些特殊場景相較于 go net,Hertz 在 QPS、時延上均具有一定優(yōu)勢。關(guān)于性能數(shù)據(jù),可參考下圖 Echo 數(shù)據(jù)。
-
關(guān)于詳細(xì)的性能數(shù)據(jù),可參考 https://github.com/cloudwego/hertz-benchmark。
-
高擴(kuò)展性
Hertz 采用了分層設(shè)計(jì),提供了較多的接口以及默認(rèn)的擴(kuò)展實(shí)現(xiàn),用戶也可以自行擴(kuò)展。同時得益于框架的分層設(shè)計(jì),框架的擴(kuò)展性也會大很多。目前僅將穩(wěn)定的能力開源給社區(qū),更多的規(guī)劃參考 RoadMap。
-
多協(xié)議支持
Hertz 框架原生提供 HTTP1.1、ALPN 協(xié)議支持。除此之外,由于分層設(shè)計(jì),Hertz 甚至支持自定義構(gòu)建協(xié)議解析邏輯,以滿足協(xié)議層擴(kuò)展的任意需求。
-
網(wǎng)絡(luò)層切換能力
Hertz 實(shí)現(xiàn)了 Netpoll 和 Golang 原生網(wǎng)絡(luò)庫 間按需切換能力,用戶可以針對不同的場景選擇合適的網(wǎng)絡(luò)庫,同時也支持以插件的方式為 Hertz 擴(kuò)展網(wǎng)絡(luò)庫實(shí)現(xiàn)。
框架性能
性能測試只能提供相對參考,工業(yè)場景下,有諸多因素可以影響實(shí)際的性能表現(xiàn)。
我們提供了 hertz-benchmark 項(xiàng)目用來長期追蹤和比較 Hertz 與其他框架在不同情況下的性能數(shù)據(jù)以供參考。
相關(guān)項(xiàng)目
- Netpoll: 自研高性能網(wǎng)絡(luò)庫,Hertz 默認(rèn)集成
- Hertz-Contrib: Hertz 擴(kuò)展倉庫,提供中間件、tracer 等能力
- Example: Hertz 使用例子
