日前,字節(jié)跳動(dòng)技術(shù)社區(qū) ByteTech 舉辦的第七期字節(jié)跳動(dòng)技術(shù)沙龍圓滿落幕,本期沙龍以《字節(jié)高性能開源微服務(wù)框架:CloudWeGo》為主題。在沙龍中,字節(jié)跳動(dòng)字節(jié)跳動(dòng)基礎(chǔ)架構(gòu)服務(wù)框架資深研發(fā)工程師楊芮,跟大家分享了《高性能 RPC 框架 Kitex 內(nèi)外統(tǒng)一的開源實(shí)踐》,本文根據(jù)分享整理而成。
本文將從以下四個(gè)方面介紹 CloudWeGo 高性能 RPC 框架 Kitex 的實(shí)踐及開源:
1. 由內(nèi)至外 - 開源過渡;
2. 開源一年變更回顧;
3. 社區(qū)共建完善生態(tài)及企業(yè)落地;
4. 總結(jié)和展望。
由內(nèi)至外 - 開源過渡
很多同學(xué)可能剛剛了解 CloudWeGo,先介紹一下 CloudWeGo 和 Kitex 的關(guān)系。
CloudWeGo 和 Kitex
Kitex 是 CloudWeGo 開源的第一個(gè)微服務(wù)框架,它是一個(gè)支持多協(xié)議的 Golang RPC 框架,從網(wǎng)絡(luò)庫、序列化庫到框架的實(shí)現(xiàn)基本完全自研的。特別地,Kitex 對(duì) gRPC 協(xié)議的支持使用了 gRPC 官方的源碼,但是我們對(duì) gRPC 的實(shí)現(xiàn)做了深度且定制的優(yōu)化,所以 Kitex 支持的 gRPC 協(xié)議性能優(yōu)于 gRPC 官方框架。同時(shí)這也是 Kitex 與目前已經(jīng)開源的、支持 gRPC 協(xié)議的其他 Golang 框架的主要差異。如果用戶想使用 gRPC 又對(duì)性能有很高的要求,那么 Kitex 框架將會(huì)是一個(gè)很不錯(cuò)的選擇。
繼 Kitex 開源后,今年 CloudWeGo 又陸續(xù)開源了 Golang HTTP 框架 Hertz,Rust RPC 框架 Volo,同時(shí)圍繞這些微服務(wù)框架和微服務(wù)的一些通用能力,我們還開源了一些高性能的基礎(chǔ)庫。關(guān)于更多 CloudWeGo 開源的子項(xiàng)目,可以進(jìn)入 CloudWeGo 官網(wǎng)詳細(xì)了解。
CloudWeGo 官網(wǎng):https://www.cloudwego.io/
根據(jù)社區(qū)同學(xué)反饋,在一些開源群里大家會(huì)討論 Kitex 會(huì)不會(huì)是一個(gè)字節(jié)跳動(dòng)的開源 KPI 項(xiàng)目呢?它的穩(wěn)定性、持續(xù)性能夠得到保障嗎?我可以負(fù)責(zé)任地講,Kitex 不是一個(gè) KPI 項(xiàng)目,它是來自字節(jié)跳動(dòng)內(nèi)部大規(guī)模實(shí)踐的真實(shí)項(xiàng)目。在 Kitex 開源后始終保持內(nèi)外統(tǒng)一,基于內(nèi)外代碼的統(tǒng)一我們保證了 Kitex 的持續(xù)迭代。為了進(jìn)一步消除大家的顧慮,下面具體介紹一下 Kitex 的誕生和開源歷程。
Kitex 發(fā)展歷史
2014 年,字節(jié)跳動(dòng)開始引入 Golang。2015 年,字節(jié)跳動(dòng)內(nèi)部的服務(wù)化開啟。在 RPC 調(diào)用的場(chǎng)景選擇了 Thrift 協(xié)議,在內(nèi)部開始支持 RPC 框架。2016 年,第一個(gè) Golang RPC 框架 Kite 正式發(fā)布。通常在一個(gè)公司高速發(fā)展的初期,基礎(chǔ)能力都是為了快速支持需求落地,面對(duì)的需求場(chǎng)景也較單一,設(shè)計(jì)上不會(huì)有較多考量,其實(shí)這也是合理的,因?yàn)樘剿麟A段并不完全清楚還需要支持哪些場(chǎng)景,過多的考慮反而會(huì)出現(xiàn)過度設(shè)計(jì)的問題。
但是,隨著業(yè)務(wù)場(chǎng)景復(fù)雜化,需求也會(huì)多樣化,而且接入服務(wù)及調(diào)用量逐年增長,Kite 已經(jīng)不足以支持后續(xù)的迭代,在線上服役三年多后,2019 年我們開啟了新的項(xiàng)目 Kitex,2020 年初發(fā)布了正式版本,在 2020 年底字節(jié)內(nèi)部已經(jīng)有 1w+ 服務(wù)接入 Kitex。
從 2014 年到 2020 年,Golang 已經(jīng)是字節(jié)跳動(dòng)內(nèi)部主要的業(yè)務(wù)開發(fā)語言,應(yīng)該是業(yè)界 Golang 應(yīng)用最多的公司。我們的服務(wù)框架支持著數(shù)萬個(gè) Golang 微服務(wù)的可靠通信,經(jīng)過數(shù)量眾多的微服務(wù)和海量流量的驗(yàn)證,我們已經(jīng)有了較為成熟的微服務(wù)最佳實(shí)踐,于是考慮將內(nèi)部的實(shí)踐開源出去豐富云原生社區(qū)的 Golang 產(chǎn)品體系。在 2021年,我們以 CloudWeGo 品牌正式開源了第一個(gè)服務(wù)框架 Kitex。截至今年 8 月,Kitex 已經(jīng)為字節(jié)跳動(dòng)內(nèi)部?6w+?的服務(wù)提供支持,峰值 QPS 達(dá)到上億級(jí)別。
大家或許還有疑問,完整的微服務(wù)體系離不開基礎(chǔ)的云生態(tài),無論在公有云、私有云,都需要搭建額外的服務(wù)以很好地支持微服務(wù)的治理,比如治理平臺(tái)、注冊(cè)中心、配置中心、監(jiān)控、鏈路跟蹤、服務(wù)網(wǎng)格等,而且還存在一些定制的規(guī)范。字節(jié)跳動(dòng)自然也有完善的內(nèi)部服務(wù)支持微服務(wù)體系,但這些服務(wù)短期還無法開源,那 CloudWeGo 如何內(nèi)外維護(hù)一套代碼,統(tǒng)一迭代呢?文章來源:http://www.zghlxwxcb.cn/news/detail-435483.html
關(guān)于這個(gè)問題,我們看一下 Kitex 的模塊劃分。Kitex 的模塊分為三個(gè)部分:中間是 Kitex 主干部分?Kitex Core,它定義了框架的層次結(jié)構(gòu)、接口核心邏輯的實(shí)現(xiàn)以及接口的默認(rèn)實(shí)現(xiàn);左邊的?Kitex Tool<文章來源地址http://www.zghlxwxcb.cn/news/detail-435483.html
到了這里,關(guān)于高性能 RPC 框架 CloudWeGo-Kitex 內(nèi)外統(tǒng)一的開源實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!