Kitex 概覽

2022-04-26 09:39 更新

CloudWeGo-Kitex

Kitex[ka?t’eks] 字節(jié)跳動(dòng)內(nèi)部的 Golang 微服務(wù) RPC 框架,具有高性能、強(qiáng)可擴(kuò)展的特點(diǎn),在字節(jié)內(nèi)部已廣泛使用。如果對微服務(wù)性能有要求,又希望定制擴(kuò)展融入自己的治理體系,Kitex 會(huì)是一個(gè)不錯(cuò)的選擇。

架構(gòu)設(shè)計(jì)


框架特點(diǎn)

  • 高性能

使用自研的高性能網(wǎng)絡(luò)庫 Netpoll,性能相較 go net 具有顯著優(yōu)勢。

  • 擴(kuò)展性

提供了較多的擴(kuò)展接口以及默認(rèn)擴(kuò)展實(shí)現(xiàn),使用者也可以根據(jù)需要自行定制擴(kuò)展,具體見下面的框架擴(kuò)展。

  • 多消息協(xié)議

RPC 消息協(xié)議默認(rèn)支持 ?Thrift?、?Kitex Protobuf?、?gRPC?。Thrift 支持 Buffered 和 Framed 二進(jìn)制協(xié)議;Kitex Protobuf 是 Kitex 自定義的 Protobuf 消息協(xié)議,協(xié)議格式類似 Thrift;gRPC 是對 gRPC 消息協(xié)議的支持,可以與 gRPC 互通。除此之外,使用者也可以擴(kuò)展自己的消息協(xié)議。

  • 多傳輸協(xié)議

傳輸協(xié)議封裝消息協(xié)議進(jìn)行 RPC 互通,傳輸協(xié)議可以額外透傳元信息,用于服務(wù)治理,Kitex 支持的傳輸協(xié)議有 ?TTHeader?、?HTTP2?。TTHeader 可以和 Thrift、Kitex Protobuf 結(jié)合使用;HTTP2 目前主要是結(jié)合 gRPC 協(xié)議使用,后續(xù)也會(huì)支持 Thrift。

  • 多種消息類型

支持 ?PingPong?、?Oneway?、雙向 ?Streaming?。其中 Oneway 目前只對 Thrift 協(xié)議支持,雙向 Streaming 只對 gRPC 支持,后續(xù)會(huì)考慮支持 Thrift 的雙向 Streaming。

  • 服務(wù)治理

支持服務(wù)注冊/發(fā)現(xiàn)、負(fù)載均衡、熔斷、限流、重試、監(jiān)控、鏈路跟蹤、日志、診斷等服務(wù)治理模塊,大部分均已提供默認(rèn)擴(kuò)展,使用者可選擇集成。

  • 代碼生成

Kitex 內(nèi)置代碼生成工具,可支持生成 ?Thrift?、?Protobuf ?以及腳手架代碼。

框架性能

性能測試只能提供相對參考,工業(yè)場景下,有諸多因素可以影響實(shí)際的性能表現(xiàn)。

由于開源社區(qū)缺少支持 thrift 的優(yōu)秀 RPC 框架,當(dāng)前對比項(xiàng)目為 grpcrpcx, 均使用 protobuf 協(xié)議。

我們通過 測試代碼 比較了它們的性能,測試表明 Kitex 具有明顯優(yōu)勢。

測試環(huán)境

CPU: Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz, 4 cores

Memory: 8GB

OS: Debian 5.4.56.bsk.1-amd64 x86_64 GNU/Linux

Go: 1.15.4

并發(fā)表現(xiàn) (Echo 1KB, 改變并發(fā)量)


吞吐表現(xiàn) (并發(fā) 100, 改變包大小) 


相關(guān)項(xiàng)目

Netpoll: 自研的高性能網(wǎng)絡(luò)庫,Kitex 默認(rèn)集成的。

kitex-contrib:Kitex 的部分?jǐn)U展庫,使用者可以根據(jù)需求通過 Option 集成進(jìn) Kitex 中。

Example:Kitex 的使用示例。

相關(guān)文章

字節(jié)跳動(dòng) Go RPC 框架 Kitex 性能優(yōu)化實(shí)踐

字節(jié)跳動(dòng)在 Go 網(wǎng)絡(luò)庫上的實(shí)踐


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號