一文了解字節跳動微服務中間件 CloudWeGo

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雲原生時代,各行各業的基礎架構都在經歷微服務架構轉型,研發效率和穩定性是所有互聯網公司需要考慮的問題。開發者想要搭建微服務,離不開配套的微服務治理,如治理平臺、監控、鏈路跟蹤、註冊 \/ 發現、配置中心、服務網格等。隨着 Golang 逐漸成爲雲原生時代的主要編程語言,基於 Golang 的微服務中間件在開源社區有着較強的訴求。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"字節跳動也同樣面臨這些問題。2014 年,字節跳動引入 Golang 解決長連接推送業務面臨的高併發問題,兩年後,內部技術團隊基於 Golang 推出了一個名爲 Kite 的框架,同時對開源項目 Gin 做了一層很薄的封裝,推出了 Ginex。字節跳動基礎架構 \/ 服務框架團隊負責人成國柱在 QCon 2021 的分享中表示,這兩個原始框架的推出,極大推動了 Golang 在公司內部的應用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是由於關聯技術迭代和業務訴求增加,深度耦合的 Kite 和 Thrift ,很難從網絡模型或編解碼層面改造優化,繼續支持新特性勢必會造成代碼臃腫、迭代受阻問題。2019 年下半年,字節跳動技術團隊開始重新設計 Golang RPC 框架,同時爲了在網絡通信上有更好的性能並能支持連接多路複用、感知連接狀態,自研了網絡庫 Netpoll。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"字節跳動重構 Kite 爲 Kitex ,圍繞性能和可擴展性設計,並在次年 10 月完成發佈,投入到內部應用中。據悉,截至 2021 年 9 月,線上有 3w+ 微服務使用 Kitex,大部分服務遷移新框架後可以收穫 CPU 和延遲上的收益。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“在 Kitex 得到內部廣泛使用後,我們決定圍繞微服務逐步把我們的實踐開源出去,並且對外保持統一。”字節跳動 CloudWeGo 技術專家談道,“但微服務相關的項目較多,每個項目單獨開源對外部用戶並不友好,因此我們以 CloudWeGo 作爲項目名,逐步將內部整個微服務體系開源,內外統一使用開源庫,各項目以開源庫爲主進行迭代。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2021 年 9 月 8 日,字節跳動宣佈正式開源 CloudWeGo。"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"中間件“工具箱”CloudWeGo"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"CloudWeGo 是一套字節跳動內部微服務中間件集合,具備高性能、強擴展性和穩定性的特點,專注於解決微服務通信與治理的難題,滿足不同業務在不同場景的訴求。此外,CloudWeGo 也重視與雲原生生態的集成,支持對接 K8s 註冊中心、Prometheus 監控以及 OpenTracing 鏈路追蹤等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前,CloudWeGo 第一批開源了四個項目:"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/sPAsFYqGaAID5RGUINl4","title":"xxx","type":null},"content":[{"type":"text","text":"Kitex"}]},{"type":"text","text":"、Netpoll、Thriftgo 和 netpoll-http2,以 RPC 框架 Kitex 和網絡庫 Netpoll 爲主。Kitex 內置了部分治理策略以及豐富的擴展接口,便於融入微服務體系中;Netpoll 主要面向對高性能有訴求的場景。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"CloudWeGo 的每一個組件都可以單獨使用。“很多人擔心 Kitex 是一個很重的框架,其實 Kitex 沒有耦合任何其他組件包括 Netpoll,Kitex 內置的一些治理能力,用戶也可以選擇性集成。Netpoll 作爲一個網絡庫,其他 RPC 框架、HTTP 框架都可以單獨接入使用。Thriftgo 是 Thrift IDL 解析和代碼生成器,也是獨立的工具,並且提供插件機制,用戶可定製生成代碼。”字節跳動 CloudWeGo 技術專家表示,“我們會繼續開源其他內部項目,如 HTTP 框架 Hertz、基於共享內存的 IPC 通信庫 ShmIPC 等,提供更多場景的微服務需求支持。”"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"CloudWeGo 的優勢和侷限"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"微服務中間件和業務緊密聯繫,是整個業務架構的基礎,在進行技術選型時必須慎重。業內公認的選型標準關鍵在於兩方面:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"能解決實際業務問題和上生產抗流量,且易用性高、可治理、成熟穩定"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"技術是開源的,且開源項目的 star 數、項目活躍度(Issue&PR)、文檔更新頻率、發版週期穩定可靠"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"CloudWeGo 的優勢在於,已經在字節跳動經過大規模生產流量驗證,有可以參考的穩定性和可靠性實際案例。“CloudWeGo 的特點之一是高性能,但實際上在開發之初它經常遇到性能瓶頸,於是內部專門進行了網絡庫、Thrift 序列化的專項優化,優化的過程會比較漫長,一個瓶頸點要花很長時間反覆測試調整實現,我們也發過兩篇文章"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzI1MzYzMjE0MQ==&mid=2247487656&idx=1&sn=e6e125db1fa1bad01048f341a4b7165a&scene=21#wechat_redirect","title":null,"type":null},"content":[{"type":"text","text":"《字節跳動 Go RPC 框架 Kitex 性能優化實踐》"}]},{"type":"text","text":"和"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzI1MzYzMjE0MQ==&mid=2247485756&idx=1&sn=4d2712e4bfb9be27a790fa15159a7be1&chksm=e9d0c2dedea74bc8179af39888a5b2b99266587cad32744ad11092b91ec2e2babc74e69090e6&scene=21#wechat_redirect","title":null,"type":null},"content":[{"type":"text","text":"《字節跳動在 Go 網絡庫上的實踐》"}]},{"type":"text","text":"分享了優化實踐。”字節跳動 CloudWeGo 技術專家表示。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"據悉,與同類型項目相比,CloudWeGo 開發團隊不僅考慮了高性能、強擴展性,還考慮到了易用性。“以 Kitex 爲例,目前從治理功能的多樣性上不及一些開源框架,從性能、擴展性、使用體驗多維度綜合來看,Kitex 具有一定的優勢。Kitex 支持多協議,由於內部以 Thrift 爲主,Kitex 對 Thrift 支持也做了性能優化,如果使用 Thrift,Kitex 將是最佳的選擇。”字節跳動 CloudWeGo 技術專家告訴 InfoQ。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,爲了遵守長期投入承諾,內外維護一套代碼、統一迭代,字節跳動已經將與內部生態沒有耦合的項目直接遷移到 CloudWeGo 開源庫,並將內部依賴調整爲開源庫。而對於需要集成治理能力融入微服務體系的 Kitex,開源團隊則對內外部代碼做了拆分,把 Kitex 的核心代碼遷移到開源庫,內部庫封裝一層殼保證用戶無感知升級,而集成內部治理特性的模塊則作爲 Kitex 的擴展保留在內部庫。未來,字節跳動也會持續把已經在內部經過穩定性驗證的新特性,遷移到開源庫。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在字節跳動內部,爲了便於 Kitex 融入內部的治理體系,Kitex 面向內部提供了 Byted Suite 擴展,集成內部的註冊中心、配置中心、監控等,內部 ServiceMesh 已經得到了大規模落地,Kitex 會根據服務的信息判斷是否是 ServiceMesh 模式,若是,Kitex 則會卸載治理組件,治理能力下沉至 Mesh 中。爲了提高與 ServiceMesh 通信的性能,Kitex 單獨擴展 TransHandler 模塊集成內部實現的 ShmIPC,與 ServiceMesh 通信走 ShmIPC ,後續 Kitex 對 ShmIPC 的擴展以及 ShmIPC 庫也會開源出來。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不過 CloudWeGo 依然有自己的侷限性。字節跳動 CloudWeGo 技術專家告訴 InfoQ:CloudWeGo 功能的豐富度和多樣性還不夠,還需要進一步完善,字節跳動技術團隊會收集外部用戶的需求,評估排期支持,期待更多的開發者加入。目前 Kitex Server 性能優勢明顯,但 Client 相比 Server 性能表現不佳,後續會重點對 Client 進行優化。此外,基於不同的語言框架,默認場景必須能兼容互通而非性能最佳。“剛開源時得到大家的關注,看到一些壓測對比顯示 Kitex 性能表現一般,主要是壓測場景未對齊,後續我們也會考慮面向開源儘量提供性能較優的策略。”"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"“開源”不是爲了“完成 KPI”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前,CloudWeGo 在社區中也比較有活力。據悉,在未被正式宣佈開源前,一個月內 Kitex 收穫了 1.2k stars,Netpoll 收穫了 700+ stars。9 月 8 日,字節跳動正式宣佈開源 CloudWeGo 後,截至 10 月初,項目整體 star 數已經超過 4800,且已被收錄進 CNCF landscape。"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/9d\/9def224863de1e23c5c8dd7f29fe3156.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#999999","name":"user"}}],"text":"CNCF 雲原生全景圖譜"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"字節跳動 CloudWeGo 技術專家表示:“我們收到了來自社區的大量反饋,如很多用戶對 Protobuf 的訴求較爲強烈,我們已經針對這個問題,計劃開展 Kitex 對 Protobuf 支持的性能優化。歡迎大家向 CloudWeGo 提交 issue 和 PR,共建 CloudWeGo。我們也爲企業和組織使用 Kitex 和 Netpoll 設置了專項支持,希望 CloudWeGo 將來能真正成爲通用的、可落地的微服務通信與治理開源方案。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"關於開源,字節跳動 CloudWeGo 技術專家的觀點旗幟鮮明:“完成 KPI 不是這個項目開源的目的。健康的開源模式注重開放共享,共同成長和長期主義。CloudWeGo 認同個體參與、社區價值以及開源共同體帶來的歸屬感。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“字節跳動作爲開源項目的受益者、參與者,也希望成爲開源項目的推動者、主導者,將內部優秀的最佳實踐反饋給開源社區,與社區共同建設、豐富基礎架構領域開源生態,爲廣大開發者和企業在技術選型時提供更多更優的選擇。”字節跳動 CloudWeGo 技術專家談道,“我們擁抱開源的文化,傾聽社區的反饋,積極響應用戶的需求,並且提供友好的中英文文檔和快速開發 guideline,爲社區開發者快速深入瞭解 CloudWeGo 以及參與貢獻提供便利與支持。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"項目地址:"},{"type":"text","text":"https:\/\/github.com\/cloudwego"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"受訪嘉賓:"},{"type":"text","text":"字節跳動 CloudWeGo 技術專家羅廣明、楊芮、馬子昂"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章