自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

字節(jié)跳動開源微服務(wù)中間件 CloudWeGo

開源 服務(wù)器產(chǎn)品
字節(jié)跳動正式宣布開源 CloudWeGo。這是一套以 Go 語言為核心、專注于微服務(wù)通信與治理的中間件集合,具有高性能、可擴(kuò)展、高可靠的特點。

9 月 8 日,字節(jié)跳動正式宣布開源 CloudWeGo。這是一套以 Go 語言為核心、專注于微服務(wù)通信與治理的中間件集合,具有高性能、可擴(kuò)展、高可靠的特點。

[[422817]]

據(jù)介紹,作為項目維護(hù)方,字節(jié)跳動基礎(chǔ)架構(gòu)團(tuán)隊已推進(jìn)項目以 CloudWeGo 開源庫為主進(jìn)行迭代,未來團(tuán)隊將堅持內(nèi)外維護(hù)一套代碼,統(tǒng)一迭代演進(jìn),并逐步分享更多內(nèi)部微服務(wù)最佳實踐。

  • 項目地址:https://github.com/cloudwego
  • 項目官網(wǎng):www.cloudwego.io

CloudWeGo 第一批開源了四個項目,以 RPC 框架 Kitex 和網(wǎng)絡(luò)庫 Netpoll 為主。

Kitex

Kitex 是一個 Golang 微服務(wù) RPC 框架,具有高性能、強(qiáng)可擴(kuò)展的特點。

字節(jié)跳動使用 Golang 作為主要業(yè)務(wù)開發(fā)語言。早在 2016 年,基礎(chǔ)架構(gòu)團(tuán)隊就已經(jīng)開始基于 Golang 開發(fā)內(nèi)部框架 Kite,并在 2019 年圍繞性能和可擴(kuò)展啟動重構(gòu),使其能更好地滿足業(yè)務(wù)發(fā)展和技術(shù)體系演進(jìn)需求。

2020 年 10 月,Kitex 正式上線。雖然是一個全新的框架,但經(jīng)過一年的線上應(yīng)用,目前字節(jié)跳動內(nèi)部已有超過 50% 的 Golang 微服務(wù)遷移到了 Kitex。

下面是 Kitex 的一些特性:

  • 高性能:Kitex 默認(rèn)集成自研網(wǎng)絡(luò)庫 Netpoll 作為網(wǎng)絡(luò)傳輸模塊,性能相較使用 go net 有顯著優(yōu)勢;除了網(wǎng)絡(luò)庫帶來的性能收益,Kitex 對 Thrift 編解碼也做了優(yōu)化,這在之前的性能優(yōu)化實踐文章中有介紹。關(guān)于性能數(shù)據(jù),可參考 https://github.com/cloudwego/kitex-benchmark。
  • 擴(kuò)展性:Kitex 設(shè)計上做了模塊劃分,提供了較多的擴(kuò)展接口以及默認(rèn)的擴(kuò)展實現(xiàn),使用者也可以根據(jù)需要自行定制擴(kuò)展。Kitex 未耦合 Netpoll,開發(fā)者可選擇其他網(wǎng)絡(luò)庫擴(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ù)也會支持 Thrift。
  • 多消息類型:支持 PingPong、Oneway、雙向 Streaming。其中 Oneway 目前只對 Thrift 協(xié)議支持,雙向 Streaming 只對 gRPC 支持,后續(xù)會考慮支持 Thrift 的雙向 Streaming。
  • 服務(wù)治理:支持服務(wù)注冊/發(fā)現(xiàn)、負(fù)載均衡、熔斷、限流、重試、監(jiān)控、鏈路跟蹤、日志、診斷等服務(wù)治理模塊,大部分均已提供默認(rèn)擴(kuò)展,使用者可選擇集成。
  • 代碼生成工具:Kitex 內(nèi)置代碼生成工具,可支持生成 Thrift、Protobuf 以及腳手架代碼。

Netpoll

Netpoll 是字節(jié)跳動內(nèi)部的 Golang 高性能、I/O 非阻塞的網(wǎng)絡(luò)庫,專注于 RPC 場景。

RPC 通常有較重的處理邏輯(業(yè)務(wù)邏輯、編解碼),耗時長,不能像 Redis 一樣采用串行處理(必須異步)。而 Go 的標(biāo)準(zhǔn)庫 net 設(shè)計了 BIO(Blocking I/O) 模式的 API,為了保證異步處理,RPC 框架設(shè)計上需要為每個連接都分配一個 goroutine,這在空閑連接較多時,產(chǎn)生大量的空閑 goroutine,增加調(diào)度開銷。此外,net.Conn 沒有提供檢查連接活性的 API,很難設(shè)計出高效的連接池,池中的失效連接無法及時清理,復(fù)用低效。開源社區(qū)目前缺少專注于 RPC 方案的 Go 網(wǎng)絡(luò)庫。類似的項目如:evio、gnet 等,均面向 Redis、Haproxy 這樣的場景。

因此 Netpoll 應(yīng)運而生,它借鑒了 evio 和 Netty 的優(yōu)秀設(shè)計,具有出色的性能,更適用于微服務(wù)架構(gòu)。

Thriftgo

Thriftgo 是 Go 語言實現(xiàn)的 Thrift IDL 解析和代碼生成器,支持完善的 Thrift IDL 語法和語義檢查,相較 Apache Thrift 官方的 Golang 生成代碼,Thriftgo 做了一些問題修復(fù)且支持插件機(jī)制,用戶可根據(jù)需求自定義生成代碼。

Kitex 的代碼生成工具就是 Thriftgo 的插件,CloudWeGo 近期也會開源另一個 Thriftgo 的插件 thrift-gen-validator,支持 IDL Validator,用于字段值校驗,解決開發(fā)者需要自行實現(xiàn)代碼校驗邏輯的負(fù)擔(dān),彌補(bǔ) Thrift 缺失的能力。

Thriftgo 目前雖然僅支持生成 Golang Thrift 代碼,但其定位是可支持各語言的 Thrift 代碼生成,未來如果有需求,我們會考慮生成其他語言的代碼。同時我們也會嘗試將其回饋至 Apache Thrift 社區(qū)。

Netpoll-http2

Netpoll-http2 基于 Golang 標(biāo)準(zhǔn)庫 golang.org/x/net/http2 的源碼替換 go net 為 Netpoll,目前用于 Kitex 對 gRPC 協(xié)議的支持,對 HTTP2 有需求的外部開發(fā)者也可以使用此庫。

前面提到字節(jié)跳動會堅持內(nèi)外維護(hù)一套代碼,為了遵守長期投入承諾,其基礎(chǔ)架構(gòu)團(tuán)隊已經(jīng)將與內(nèi)部生態(tài)沒有耦合的項目,如 Netpoll,直接遷移到 CloudWeGo 開源庫,并將內(nèi)部依賴調(diào)整為開源庫。

對于需要集成治理能力融入微服務(wù)體系的 Kitex,他們基于其擴(kuò)展性,對內(nèi)外部代碼做了拆分,把 Kitex 的核心代碼遷移到開源庫,內(nèi)部庫封裝一層殼保證內(nèi)部用戶無感知升級,而集成內(nèi)部治理特性的模塊則作為 Kitex 的擴(kuò)展保留在內(nèi)部庫。字節(jié)跳動基礎(chǔ)架構(gòu)團(tuán)隊表示,未來也會持續(xù)把已經(jīng)在內(nèi)部經(jīng)過穩(wěn)定性驗證的新特性,遷移到開源庫。

談到 CloudWeGo 的未來規(guī)劃,字節(jié)跳動基礎(chǔ)架構(gòu)團(tuán)隊表示:“CloudWeGo 不僅僅是一個開源項目,它也是一個真實的超大規(guī)模企業(yè)級實踐項目。通過開源,我們希望 CloudWeGo 能豐富云原生社區(qū)的 Golang 工具體系,為更多開發(fā)者和企業(yè)搭建云原生化的大規(guī)模分布式系統(tǒng),提供一種現(xiàn)代的、資源高效的的技術(shù)方案。”

未來他們會進(jìn)一步推動 CloudWeGo 走向完善:

  • 繼續(xù)開源其他內(nèi)部項目。開源更多字節(jié)跳動常用 Golang 項目,如 HTTP 框架 Hertz、基于共享內(nèi)存的 IPC 通信庫 ShmIPC 等,為開發(fā)者提供更多場景的微服務(wù)需求支持。
  • 逐步開源經(jīng)驗證的、穩(wěn)定的特性。CloudWeGo 的主要項目均為字節(jié)內(nèi)部微服務(wù)提供支持,許多新特性仍在內(nèi)部驗證,相對成熟后會逐步開源,如對 ShmIPC 的集成、無序列化、無生成代碼的支持等。
  • 結(jié)合內(nèi)外部用戶需求,持續(xù)迭代。項目開源后會根據(jù)開發(fā)者需求開展迭代。例如近一個月來,團(tuán)隊收到了來自開發(fā)者的大量關(guān)于 Protobuf 的訴求,為了提供良好的支持,他們已經(jīng)在籌備開展 Kitex 對 Protobuf 支持的性能優(yōu)化。

本文轉(zhuǎn)自O(shè)SCHINA

本文標(biāo)題:字節(jié)跳動開源微服務(wù)中間件 CloudWeGo

本文地址:https://www.oschina.net/news/159372/bytedance-opensource-cloudwego

資訊來源:https://mp.weixin.qq.com/s/43yN06UUcia-yWdJ50ghrw

責(zé)任編輯:未麗燕 來源: 開源中國
點贊
收藏

51CTO技術(shù)棧公眾號